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/
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他人に質問する前にテディベアに質問しなさい、てやつですな。
書き込んだ質問の内容でググればあっさり見つかったりするしね。
0337デフォルトの名無しさん
2010/04/20(火) 18:57:13HeapAllocとかHeapFreeとかのフラグ、HEAP_NO_SERIALIZEの説明の「相互排他」って何ですか?
ググッた結果、マルチスレッドであちこちからメモリ確保するときに、何かしてくれる?と思うのですが、
その「何か」がよく分かりません。
>HEAP_NO_SERIALIZE:この関数がヒープにアクセスしている間、相互排他を行わないようにします。
↑この一文を分かりやすく解説してください。
0338118
2010/04/20(火) 19:40:010339デフォルトの名無しさん
2010/04/20(火) 19:49:080340デフォルトの名無しさん
2010/04/20(火) 19:50:050341デフォルトの名無しさん
2010/04/20(火) 20:42:04気にするな
0342118
2010/04/20(火) 20:48:34おまえがな
0343デフォルトの名無しさん
2010/04/20(火) 21:00:50ちなみに cygwin を用いて深いディレクトリ、ファイルは生成できます・・・
0344デフォルトの名無しさん
2010/04/21(水) 10:18:370345デフォルトの名無しさん
2010/04/21(水) 10:49:53UNICODEで開発
>>344
ダイアログスタイルで開発
0346デフォルトの名無しさん
2010/04/21(水) 11:03:34MFCを使ってダイアログベースで作ってます。
0347デフォルトの名無しさん
2010/04/21(水) 11:07:460348デフォルトの名無しさん
2010/04/21(水) 11:09:470349デフォルトの名無しさん
2010/04/21(水) 11:13:080350デフォルトの名無しさん
2010/04/21(水) 13:01:02>UNICODEで開発
343です。
当初私もそう思っていました。
UNICODE版のGetOpenFileNameWを使っているのですが、
開くDLG(コモンダイアログ)内部でMessageBoxを表示しているようです。
OFNHookProcも試したのですが、CDN_FILEOKが呼び出されません。
WndProc をHOOKして[OK]ボタンや[ファイル名DBLCLK]を横取りしないといけないのでしょうか?
0351デフォルトの名無しさん
2010/04/21(水) 16:29:38Persistent Routesリストの取得方法を教えてくださいください
0352デフォルトの名無しさん
2010/04/21(水) 16:48:480353デフォルトの名無しさん
2010/04/21(水) 17:02:100354デフォルトの名無しさん
2010/04/21(水) 17:02:42System\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes
System\CurrentControlSet\Services\Vxd\MSTCP\PersistentRoutes
0355デフォルトの名無しさん
2010/04/21(水) 17:10:51ありがとうございます。
確かにレジストリに存在しました!
これを弄くり倒します。
0356デフォルトの名無しさん
2010/04/21(水) 17:15:33route add ができない><
いやレジストリに追加しただけでは実際にルート処理されないですよねこれ?
0357デフォルトの名無しさん
2010/04/21(水) 17:20:53んで>>354の2つ目のServicesの中にVxdは存在しませんですた。
とりあえず、レジストリエディタで適当にルートぶち込んでみっかなあ
0358デフォルトの名無しさん
2010/04/21(水) 17:46:07そういやActiveアレには普通にaddできるんだから
レジストリに追加しといてヘルパapiでActiveにaddすりゃーいいってことか!!!
レジストリにかいときゃリブったらちゃんとアレされたのは確認できたし
いやはや>>354に感謝
0359デフォルトの名無しさん
2010/04/21(水) 17:54:26自分なら裏でroute.exeを実行する
0360デフォルトの名無しさん
2010/04/21(水) 18:20:35vxdありがとう。
ちなみに最初はShellExecuteでroute.exeを実行してaddやdeleteをやってたんだけど
ヘルパAPIなるものでActiveの操作は普通にできたからPersistentもいけるんじゃないかなとかおもって
深みにざっくり嵌ったわけですよ
ぶっちゃけレジストリ弄くるのも不本意なんだがAPIでできないっぽいからそこは曲げてアレ
0361デフォルトの名無しさん
2010/04/21(水) 23:42:23CreateCompatibleBitmapで作成した領域に描画して、
BitBltの背景色を利用して白黒の1bitモノクロ画像に変換しようとしたところ、
GDI+で読み込んだビットマップがうまく変換されませんでした。
ちなみにCreateCompatibleBitmapのところをCreateDIBSectionすると期待どうりに変換されるのは分かったのですが、
どうしてCreateCompatibleBitmapだと変換できないのかが理由が分かりませんでした。
言語はC++でMFCなどは使用していません。
理由が分かる方がいましたら教えてください。
0362デフォルトの名無しさん
2010/04/22(木) 00:01:31GetPixelで返ってきた実際の値を使わないと駄目、とかありそう。
素直にDIBSection使っといた方が良い気がするけど。
0363361
2010/04/22(木) 05:46:16有難うございます。
GetPixelで取得した値を使用してみても駄目でした。
なぜCreateCompatibleBitmapだとSetBkColorで設定した色が変換されないのかが分からないままです。
0364デフォルトの名無しさん
2010/04/22(木) 07:15:170365デフォルトの名無しさん
2010/04/22(木) 10:35:430366デフォルトの名無しさん
2010/04/22(木) 12:39:060367デフォルトの名無しさん
2010/04/22(木) 12:57:160368デフォルトの名無しさん
2010/04/22(木) 13:50:040369118
2010/04/22(木) 14:32:000371118
2010/04/22(木) 14:33:46おまえがな
0372デフォルトの名無しさん
2010/04/22(木) 15:02:55シリアルポート com1とかが他アプリから開いたイベントを取得したいのですがどうすればよろしいでしょうか?
案としては
CrateFile("com1" ・・・
で開いて閉じてを繰り返し開の失敗したら開かれてるとする。
デメリット:ちょっとカッコ悪いし、もし開いて閉じる間に空いてが開こうとすると相手側がエラーになる
LoadLibraryのhook
デメリット;comのオープン方法がCreateFileで開かれなかった場合。他にもAPIありますよね?
なんてのを考えてるんですが、他に良い案ないでしょうか?
0373デフォルトの名無しさん
2010/04/22(木) 15:20:260374デフォルトの名無しさん
2010/04/22(木) 15:29:19フィルタドライバですか、経験なかったです。
調べてみるとちょっと敷居高そうですが、チャレンジしてみます。
ありがとうございました。
0375デフォルトの名無しさん
2010/04/22(木) 15:52:04登録されている数分ループするのですが正常に値が取得できないのがあります。
4個登録されていてループは5回目で抜けるのでそこはOKなんですが
データも3個までは正常にとれてますが4個目は何故かNULLになっています。
どうしてですか?
0376デフォルトの名無しさん
2010/04/22(木) 15:58:100377デフォルトの名無しさん
2010/04/22(木) 17:39:34相変わらず118を名乗る理由がよくわからんがな。
0378118
2010/04/22(木) 17:48:52お前の発言ワケワカラン
0380デフォルトの名無しさん
2010/04/22(木) 21:58:23んじゃいいや笑
まぁ見づらいからあんま無駄レスすんなよ。
以上無駄レスでした。
0381デフォルトの名無しさん
2010/04/22(木) 22:09:490382118
2010/04/22(木) 22:19:48黙れゴミ
0383デフォルトの名無しさん
2010/04/22(木) 22:57:50( ・ω・) �d�d
/ ~つと)
0384118
2010/04/22(木) 23:05:490385118
2010/04/22(木) 23:12:21■ このスレッドは過去ログ倉庫に格納されています