Win32API質問箱 Build87
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/03/28(日) 10:23:58やさしいお兄さんやお姉さんたちが答えてくれるかも。
「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ!
過去スレ、関連リンクは>>2-10くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
- Win32API質問箱 wiki
http://wiki.livedoor.jp/program1/d/FrontPage
Win32API質問箱 Build86
http://pc12.2ch.net/test/read.cgi/tech/1265350980/
0237デフォルトの名無しさん
2010/04/14(水) 17:52:120238デフォルトの名無しさん
2010/04/14(水) 17:52:57レスありがとうございました。
>>235参考にさせていただきます。
0239デフォルトの名無しさん
2010/04/14(水) 17:56:160240118
2010/04/14(水) 18:05:18矢印厨うぜー
0241デフォルトの名無しさん
2010/04/14(水) 19:59:13少なくとも
>>228
>単純に「\.\」は「\」に置換して、
の言うことは聞いては駄目!!
0242118
2010/04/14(水) 20:15:53じゃ、てめぇが代案示しなよ
非難ばっかするな
0243デフォルトの名無しさん
2010/04/14(水) 20:25:40>242
0244デフォルトの名無しさん
2010/04/14(水) 20:26:240246デフォルトの名無しさん
2010/04/14(水) 20:41:090247デフォルトの名無しさん
2010/04/14(水) 20:50:290248118
2010/04/14(水) 21:23:41localhost:8080
0249デフォルトの名無しさん
2010/04/14(水) 21:39:000250デフォルトの名無しさん
2010/04/15(木) 01:36:47UNCってファイル用のAPIで普通にオープンとかできるの?
0251デフォルトの名無しさん
2010/04/15(木) 01:42:170252デフォルトの名無しさん
2010/04/15(木) 03:24:420253デフォルトの名無しさん
2010/04/15(木) 06:27:15つまみ以外の場所をクリックしたら即座にその値を設定したいのですが、その方法が分かりません。
具体的に言うと、つまみがPageSizeの幅づつ移動するのでなく、
MediaPlayerのように一瞬でつまみがカーソル位置に移動して欲しいのです。
どうしたらいいでしょう。
0254デフォルトの名無しさん
2010/04/15(木) 06:30:58それUNCと違う。
0255デフォルトの名無しさん
2010/04/15(木) 06:52:02代替ストリーム
ファイル名とかフォルダ名の後ろに「:ファイル名」
0256デフォルトの名無しさん
2010/04/15(木) 07:29:27地味に困る
0257118
2010/04/15(木) 09:58:35普通に開ける
0258デフォルトの名無しさん
2010/04/15(木) 10:53:09そう考えていた時期が僕にもありました
ttp://mist.clueup.org/blogs/1/archive/2007/12/13/Windows-File-name-length-limit.aspx
実際はいけねーんだよ
どうなってんだか・・・;;
0259デフォルトの名無しさん
2010/04/15(木) 11:02:21各要素はファイルシステム依存
FATやNTFSは255文字
fsutil fsinfo volumeinfoでコンポーネント最大長を確認できる
0260デフォルトの名無しさん
2010/04/15(木) 11:03:520261デフォルトの名無しさん
2010/04/15(木) 11:04:02全体が32767文字までいけても、ファイル名だけの長さにも制限があると
ありがとう!
あと、どうやら \\?\ をつけた場合
・絶対パスじゃないといけない
・'/' ではなく '\\'を使う必要がある
・..\\ などのかけあがりなどを含めてはいけない
となるようだ
認識あってますかね?
0262デフォルトの名無しさん
2010/04/15(木) 11:06:02The Windows API has many functions that also have Unicode versions to permit a maximum path length of approximately 32,000 characters composed of components up to 255 characters each in length.
0263デフォルトの名無しさん
2010/04/15(木) 11:23:07日本語版はCreateFileからリンクもされていないし、そもそも詳細ページが翻訳されていない・・・
ttp://msdn.microsoft.com/ja-jp/library/aa365247%28v=VS.85%29.aspx
頑張って読んでみます
0264デフォルトの名無しさん
2010/04/15(木) 11:52:30エラーが出たらきちんと対処することにした
0265118
2010/04/15(木) 14:19:090266デフォルトの名無しさん
2010/04/15(木) 14:50:140267デフォルトの名無しさん
2010/04/15(木) 15:09:520268118
2010/04/15(木) 15:10:05CreateFileでFILE_FLAG_NO_BUFFERINGすればええやろ
0269デフォルトの名無しさん
2010/04/16(金) 11:56:04uintptr_t p = _beginthread
と走らせたスレッドが、終了しているかどうかを p を使って知る方法はないでしょうか?
0270デフォルトの名無しさん
2010/04/16(金) 12:37:500271デフォルトの名無しさん
2010/04/16(金) 12:47:28無い
pが有効なカーネルオブジェクトのハンドルでない場合 終了した
pが有効なカーネルオブジェクトのハンドルである場合 終了した後ハンドルが再利用されたかもしくは終了していない
ただしCREATE_SUSPENDで_beginthreadしてHANDLE_FLAG_PROTECT_FROM_CLOSEフラグをセットすれば普通に判定可能
0272デフォルトの名無しさん
2010/04/16(金) 13:07:50はあ?
WaitForSingleObject って知ってる?
質問スレで嘘書いててんじゃねーよ
0273デフォルトの名無しさん
2010/04/16(金) 13:23:27スレッド終了時に何をしているか
を調べなされ。
ていうか、VCスレで訊いた方が良いぞ。
処理系依存だし。
0274デフォルトの名無しさん
2010/04/16(金) 13:53:35_beginthread は スレッド終了時に戻りのハンドルを CloseHandle しやがりますので
_beginthreadex 使えぇぇ とか
0275デフォルトの名無しさん
2010/04/16(金) 13:54:310276デフォルトの名無しさん
2010/04/16(金) 14:06:550277デフォルトの名無しさん
2010/04/16(金) 14:16:43いや
スレッド終了時にシグナルになるから WaitForSingleObjectで終了しているのか判断できる
CloseHande しやがる場合
_beginthread で得られた戻りが WaitForSingleObject で確認するまでの間に
ハンドルの再利用の可能性を否定できないから嫌らしいワケ
CloseHande されない場合、確認側が明示的に CloseHandle するまでの間
ハンドルの衝突を防ぐことができるから より確実だ ということさ
0278デフォルトの名無しさん
2010/04/16(金) 14:18:58スレッドが終了する前にWaitForできるとは限らないもんな
今ちょっと実験してみたが、スレッドが既に終了している状態でWaitForすると、
WAIT_FAILED を吐いた上で、GetLastErrorは ERROR_INVALID_HANDLE だわ。無効なハンドル。
再利用がどれくらいの頻度で行われるのかもついでに試してみたら、意外と再利用されまくるのね。
ハンドルが簡単にかぶるわ
0279デフォルトの名無しさん
2010/04/16(金) 14:29:40プラットフォームSDK/win32 で CreateFile を使った場合、
戻された HANDLE からファイルを closeするにはどうしたら良いのでしょうか。
MSDN の該当ページ ( http://msdn.microsoft.com/ja-jp/library/cc429198.aspx ) を見ると、
>解説
>CreateFile が返したオブジェクトハンドルを閉じるには、 関数を使います。
とだけ書かれていて、「どの関数」 かが明示されていません。 ご存知の方、よろしくお願い致します。
0280279
2010/04/16(金) 14:33:12いきなり上手くいきました・・・ すみませんでした。
http://msdn.microsoft.com/ja-jp/library/cc429605.aspx
>解説
>CloseHandle 関数は、次のオブジェクトのハンドルを閉じます。
>?ファイル
0281デフォルトの名無しさん
2010/04/16(金) 14:39:260282デフォルトの名無しさん
2010/04/16(金) 14:45:54http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx
0283デフォルトの名無しさん
2010/04/16(金) 14:49:00>>CreateFile が返したオブジェクトハンドルを閉じるには、 関数を使います。
>とだけ書かれていて、「どの関数」 かが明示されていません。
クソワロタwwwwwww マジで日本語版MSDN死んでいいよwwww 嫌がらせだろこれww
0284デフォルトの名無しさん
2010/04/16(金) 14:57:26use the CloseHandle function to close the handle.
機械翻訳の過程で CloseHandle を close hande と置き換え→すっとばし発生 なのかねw
0285デフォルトの名無しさん
2010/04/16(金) 15:04:31そして何かのコピペになりそうだw
問い「これはどうしたらいいのですか?」
答え「関数を使います」
0286デフォルトの名無しさん
2010/04/16(金) 15:06:33使いものにならないのに。
0287デフォルトの名無しさん
2010/04/16(金) 15:23:47すいません、調べてみても
HANDLE_FLAG_PROTECT_FROM_CLOSE
を使う必要性が感じられないのですが。
そもそも_beginthread はCREATE_SUSPENDが使えませんし。
総合すると _beginthreadex を使えばOK
ということになりそうなのですが、exを使った場合でも
HANDLE_FLAG_PROTECT_FROM_CLOSE
の出番はありますでしょうか?
0288デフォルトの名無しさん
2010/04/16(金) 15:25:13ちゃんと
CreateFile が返したオブジェクトハンドルを閉じるには、CloseHandle 関数を使います。
てなってるな。劣化してるのかな?
0289デフォルトの名無しさん
2010/04/16(金) 15:33:56>>271は良くわかっていない初心者だから放置していいよ。
exから得たハンドル使えば解決。
0290デフォルトの名無しさん
2010/04/16(金) 15:35:36無い。 が、終了確認後に CloseHandle してやらないとまずい。
_beginthread
○ スレッド終了時に自動的にハンドルをクローズする(リソース漏れは自動回避される)
そのかわり 終了判定は困難
「終了確認前にスレッドが終了しているか否か」 で判定の意味が変化してしまう
# そして、終了確認側で既にスレッドが終了しているか否かを知る術は?… と自己矛盾な記述に…
_beginthreadex
○ スレッド終了後もハンドルは維持され終了判定は容易。
だが、自前でハンドルをクローズしないと漏れ漏れ
0291デフォルトの名無しさん
2010/04/16(金) 15:36:27CREATE_SUSPENDが使えないなら新規スレッド側で待機
_beginthreadexを使うなら必要ない
0292デフォルトの名無しさん
2010/04/16(金) 16:17:33_beginthreadexで作ったスレッドには、解放すべきものが二つある。
1・_endthreadex で解放する「何か」
2・ CloseHandleで解放する「スレッドの生死などを確認するなどに利用する、何か」
1は、スレッド用の関数を抜ければ自動で呼ばれるので、きちんと抜ける場合は呼んでも呼ばなくても良い
2は、明示的にクローズしてやる必要がある。
スレッドを作った側でクローズしても、スレッド側でクローズしてもOK(だけど二重にクローズしないようにな!)
また、スレッドが生きている間にクローズしても(生死確認などができなくなるだけで)問題ない。
という認識正しいでしょうか?
0293デフォルトの名無しさん
2010/04/16(金) 16:21:351 おけ
2 おけ 生死判断したいなら、生死判断した後にクローズ(おおよそ スレッドを作った側ではある)
0294デフォルトの名無しさん
2010/04/16(金) 16:40:50exじゃない版は、連絡用の「何か」とスレッド用の「何か」が分離されていないから色々扱いづらかったんですね
ex版を使うべきっていう意見を正しく理解できたと思います。
0295デフォルトの名無しさん
2010/04/16(金) 16:45:05「何か」=「_begintheadがCreateThreadを呼んで返された『スレッドハンドル』」な
0296デフォルトの名無しさん
2010/04/16(金) 16:58:09スレッド用の何かというが、exでもランタイムが使うTLSなんてユーザー側に見せてないだろ
分離できてないのはお前の頭じゃね?
0297デフォルトの名無しさん
2010/04/16(金) 17:03:030298デフォルトの名無しさん
2010/04/16(金) 17:28:55インストール時にCRTのソースもインストールしておくと実装が見れるが
TLS だけじゃなく、浮動小数点周辺や構造化例外(C++ の例外をうまくスレッド別に配送)の面倒を見てるね
ま、ランタイムにかかわる表面には出てこない何かとひとくくりの表現で良いんでない? (1の何かに関して)
0299デフォルトの名無しさん
2010/04/16(金) 20:45:03知識として持っててあたりまえのことを質問する馬鹿が増えた
0300118
2010/04/16(金) 21:13:46俺、ブラやぱんつに興味ないんだ。
スリップが透けてるといいと思うけど、いないしな。
下着なしも、もっといないしな。
透けてなくていいよ。
0301デフォルトの名無しさん
2010/04/18(日) 16:42:20環境はWin7、VC6++でダイアログベースのアプリです。
マウスオーバーでダイアログを非表示にして、表示されていた位置からマウスを
離すと再びダイアログを表示させることはできますか?
非表示はWM_MOUSEMOVEのときにShowWindow(SW_HIDE)でできるんですが
マウスを離して表示させるのはどうやったらできるでしょうか。
0302デフォルトの名無しさん
2010/04/18(日) 16:47:07やった事無いけどパッと思いつく方法としては、
その非表示のタイミングでマウスをSetCaptureしつつ、Screen座標ひろっておいて、
移動中、一定距離離れたタイミングで再び表示&ReleaseCaptureしてやるとか
きちんと動作確認して、不意な操作や例外的な対処もしないとマズいけど
0303デフォルトの名無しさん
2010/04/18(日) 16:49:07SetCapture
ShowWindow(SW_HIDE)
WM_MOUSEMOVE (2回目はHIDE中に呼ばれていればマウスキャプチャをリリース)
ReleaseCapture
ShowWindow(SW_SHOW)
0304デフォルトの名無しさん
2010/04/18(日) 16:58:01回答ありがとうございます。
SetCapture試してみます。
0305デフォルトの名無しさん
2010/04/18(日) 17:23:35使い方間違ってるのかもしれないけど
Hide した直後から WM_MOUSEMOVE が来なくなってるみたいだw
Release しようにもマウス座標が取れないw
0306デフォルトの名無しさん
2010/04/18(日) 17:34:16304です
同じくうまくいきませんでした。
SetCapture後にHideしたらかってにReleaseされて
Hide後にSetCaptureした場合はキャプチャされないような動きです。
0307デフォルトの名無しさん
2010/04/18(日) 17:36:580308デフォルトの名無しさん
2010/04/18(日) 17:54:07alphablendを0にして
translatedにするといいかも
0309デフォルトの名無しさん
2010/04/18(日) 17:59:07○ transparent
0310デフォルトの名無しさん
2010/04/18(日) 18:05:09フォアグランドで且つオーナーなウィンドウがSetCaptureしてやればいいと思うよ。
例えばGetDesktopWindow()で取得したHWNDをSetCapture()に渡すとか。
0311304
2010/04/18(日) 18:38:44Hideした瞬間にWM_MOUSELEAVEが来てしまいました。
そのときのWM_MOUSELEAVEを無視するとして
ダイアログがあった場所から離れてもWM_MOUSELEAVEはこないようです。
>>308
透明ウィンドウにするという発想ですか。なるほど・・
半透明にもできたりしてそれはそれでよさそうです。
>>310
デスクトップのHWNDをSetCaptureに渡してみましたが、
渡さない場合と同じくWM_MOUSEMOVEがこないようです。。
ん〜、いけるような気はするのですが。
0312デフォルトの名無しさん
2010/04/18(日) 19:27:25それだとSetCaptureしたあとのマウスイベントがDesktopWindowの方に逝っちゃう
0313デフォルトの名無しさん
2010/04/18(日) 19:36:54自分で戻さないといけないみたいだけど
0314デフォルトの名無しさん
2010/04/19(月) 02:26:360315デフォルトの名無しさん
2010/04/19(月) 03:13:040316デフォルトの名無しさん
2010/04/19(月) 03:24:020317デフォルトの名無しさん
2010/04/19(月) 03:32:370318デフォルトの名無しさん
2010/04/19(月) 07:08:010319デフォルトの名無しさん
2010/04/19(月) 08:27:380320デフォルトの名無しさん
2010/04/19(月) 10:17:080321118
2010/04/19(月) 14:06:18↑
2ちゃんの画一的なコメント 乙
0322デフォルトの名無しさん
2010/04/19(月) 14:49:52beamのアイコンがつぶれてしまう。
なんかいい方法ない?
0323デフォルトの名無しさん
2010/04/19(月) 14:53:10関係無いけど、この表現に物凄い違和感
0324デフォルトの名無しさん
2010/04/19(月) 17:52:120325118
2010/04/19(月) 18:15:190326304
2010/04/19(月) 20:23:25一応その方法で行くことにしてうまく実現できました。
今回のやりたいことを実装してるツールがVectorにあったので、
Spy++で見てみるとそれもTimerでやってるみたいだったので
真似することにしました。
0327デフォルトの名無しさん
2010/04/20(火) 16:17:390328118
2010/04/20(火) 16:52:020329デフォルトの名無しさん
2010/04/20(火) 16:57:100330デフォルトの名無しさん
2010/04/20(火) 17:00:46GetSystemPowerStatusであっさり出来たわ役立たず共
0331118
2010/04/20(火) 17:25:45おまえがな
0332デフォルトの名無しさん
2010/04/20(火) 17:39:210333118
2010/04/20(火) 17:49:42おまえがな
0334デフォルトの名無しさん
2010/04/20(火) 18:38:04それすら全くどうでもいい
0335デフォルトの名無しさん
2010/04/20(火) 18:47:020336デフォルトの名無しさん
2010/04/20(火) 18:54:52他人に質問する前にテディベアに質問しなさい、てやつですな。
書き込んだ質問の内容でググればあっさり見つかったりするしね。
■ このスレッドは過去ログ倉庫に格納されています