![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
有効でないウインドウハンドルを指定したSendMessageは安全?では無いでしょうか?
あるサブスレッドの処理進捗状況を、あるサブウインドウに貼り付けた
プログレスバー・コントロールに「現在~%」などと表示しています。
サブスレッド内からSendMessageでこのプログレスバーコントロールに
数値を送信しているのですが、
プログレスバーが貼りついているサブウインドウはユーザーが
閉じるボタンなどを押して任意に閉じたり開いたり出来るものに
なっています。
それでもし「閉じる」でサブウインドウが破棄されたとき
当然その子ウインドウであるプログレスバーコントロールのハンドルも有効な
ものでなくなっています。
このときスレッドで実行されるSendMessageは安全なものでは
なくなっているのでしょうか?
SendMessageを送る直前でif判定などでコントロールのハンドルが
有効かどうか調べるようにも考えたのですが
「調べて有効だと判断した直後」に破棄されて、それからSendMessageが実行される
という場合も可能性としてあるなら、直前での判定は意味が無いことになります。
(現在はウインドウを閉じる時、破棄するのでは無くSW_HIDEなどとして、ただ隠すだけに
しているのですがどうもスッキリした方法では無いなと思い。
本当にサブウインドウがいらない場合でも居座り続けるので。。)
SendMessage命令自体が、仮に送信先が存在しない場合でも安全に終えてくれるという
前提があれば簡単で良いのですが、このような場合どのようにするべきでしょうか。
No.1ベストアンサー
- 回答日時:
マイクロソフトのSendMessage仕様を記載しているホームページを見ても、「送信先が存在しない場合」の動作は記載されていないようです。
http://msdn.microsoft.com/ja-jp/library/cc411022 …
しかし、SendMessage関数はSendMessage関数を実行するとメッセージキューを介さずに直接相手のウィンドウプロシージャを実行し、相手のウィンドウプロシージャが終了するまで制御が戻ってこなかったハズです。
よって、相手がいなかった場合はダンマリになるか、関数の戻り値で異常が返るかのどちらかになると思います。
すんなり、HIDEにしておくのが無難かと思います。
回答ありがとうございます。
そうですか、やっぱり破棄はしない方が良さそうですね。
隠しにして、動作の保証を優先させたいと思います。
迅速なレスありがとうございました。またよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Chrome(クローム) 最近Win10にてブラウザが左にスッと隠れていく現象に悩まされてます 3 2023/07/22 23:11
- その他(プログラミング・Web制作) VSCodeの自動保存の2か所を無効にしているのに自動で保存されてしまう 1 2022/10/19 11:31
- その他(OS) Mac OSの操作について 2 2022/06/08 09:19
- Illustrator(イラストレーター) ウインドウの固定 1 2022/05/02 17:11
- ドライブ・ストレージ 外付けHDDの取り出し 3 2022/04/20 10:54
- その他(コンピューター・テクノロジー) PC利用中に勝手に起動する窓を消し去る方法を教えて下さい。 1 2023/05/08 16:48
- Windows 10 ファイルエクスプローラーでフォルダを閉じる操作について 2 2022/10/15 11:06
- その他(OS) MacのFinder操作について 2 2022/07/13 07:29
- Chrome(クローム) Google Chromeのブラウザ(PC)ウインドウの移動について 3 2022/07/19 15:14
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vbaから他のアプリを終了
-
他のウィンドウのボタンを自動...
-
msgboxの表示位置
-
コールバック関数とは…(C言語)
-
マウスの状態の取得
-
CloseHandle()
-
MQプログラミング MQGetの手法...
-
VB6でシャットダウン、ログオフ...
-
マウスホイールをフックしたい
-
有効でないウインドウハンドル...
-
キーボード・フックのアプリを...
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
コンボボックス内の文字サイズ変更
-
グラフの交点の求め方(Excel)
-
フォントの大きさ
-
コントロールの書式設定で、“コ...
-
マインクラフト(pc版)で座標...
-
検索の画面がでなくなってしま...
-
NVIDIAのシェーダーキャッシュ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbaから他のアプリを終了
-
msgboxの表示位置
-
他のウィンドウのボタンを自動...
-
メッセージボックスの選択ボタ...
-
SetWindowText関数について
-
VBAでコントロールのハンドルを...
-
Excel VBA で外部アプリケーシ...
-
VB.netでFindWindowExやると・...
-
メッセージハンドラ
-
点滅で知らせる方法
-
CloseHandle()
-
システム例外のメッセージを変...
-
WM_NCLBUTTONUPについて
-
デスクトップ上のアイコンの位...
-
メッセージループについて
-
キーボード・フックのアプリを...
-
VBでRegisterWindowMessage関数...
-
WM_CTLCOLORDLG
-
windowsメールスロットについて...
-
マウスフックについて
おすすめ情報