No.6ベストアンサー
- 回答日時:
リストビューのウィンドウプロシージャーが LVM_SETITEMSTATE に対して、FALSE を戻すことが「できる」は仕様です。
なぜ、"その"ウィンドウプロシージャーが FALSE を戻すのかは、"その"ウィンドウプロシージャーの実装に依存すると思います。> SCツールはアイドル状態ですので、chie65535さん、の言うキューが…
>
# SendMessage() はキューをバイパスすると思います。
ウィンドウプロシジャーの実装が解らない以上どうしようもないですね
これまで通りの処理方法で行うことにします。
jmhさん、はじめみなさんご解答ありがとうございました。
No.5
- 回答日時:
> LVM_SETITEMSTATEですと成功TRUE、失敗FALSEです
>
はい。SendMessage() は、その「失敗 FALSE」を戻しているだけだと思います。失敗したのは、SendMessage() ではなくて、リストビューのウィンドウプロシージャーではないでしょうか?
SendMessage() 呼び出し → リストビューの WindowProc() 呼び出される
↓
SendMessage() が TRUE/FALSE を戻す ← WindowProc() が TRUE/FALSE を戻す
# SendMessage() はキューをバイパスすると思います。
この回答への補足
jmhさん、解りやすご説明ありがとうございます。
それにしてもリストビューのキューをバイパスしてします原因は何が考えられますででしょうか?
SCツールはアイドル状態ですので、chie65535さん、の言うキューがいっぱいと言うことは考えられないのですが・・・
No.4
- 回答日時:
> SendMessageは失敗してます。
>
貴方は、::SendMessage() の戻り値を評価してますが、
http://msdn.microsoft.com/ja-jp/library/cc411022 …
の戻り値には「メッセージ処理の結果が返ります。この戻り値の意味は、送信されたメッセージにより異なります。」とあります。
参考URL:http://msdn.microsoft.com/en-us/library/ms644927 …
No.3
- 回答日時:
::SendMessage() は成功してて、LVM_SETITEMSTATE メッセージを受け取ったウィンドウプロシージャーが false を戻してるのだと思います。
リストビュー hLV のウィンドウプロシージャーはどうなってるんですか?
この回答への補足
質問内容が曖昧で申し訳ございません。
SendMessageは失敗してます。
また別プロセスはSCツールというVNCですのでウィンドウプロシジャの実装は解りません。
私が作成したプログラム内容はchie65535さんへの補足を参照して頂けたらと思います
No.2
- 回答日時:
No.1
- 回答日時:
Windowsのメッセージキューは無限ではありません。
キューに入れられるメッセージの個数は有限です。Windowsでは、プロセスごとに「実行優先度」があり、運が悪ければ「実行優先度が低く、なかなか実行させてもらえない」と言う事が起きます。
この時「なかなか実行の順番が回って来ない」と「メッセージキューにメッセージが溜まる一方で、メッセージが処理されない」と言う事が起きます。
そして、あるタイミングで「メッセージキューが一杯になって、もうメッセージが受け取れない」と言う状態になります。
こういう状態になっているプロセスにメッセージを送ればSendMessageは失敗します。
SendMessageに失敗した場合は「他のプロセスに実行権を渡し、ある程度、他のプロセスに実行してもらい、送り先のプロセスがメッセージを処理してキューに空きが出来る事を期待」してから、もう一度、SendMessageをやり直しましょう。
なお、最初からやり直す必要はありません。単に「他のプロセスに実行権を渡す」と言うのを行ってから、失敗したのだけやり直せばOKです。
てゆ~か「定期的に特定のメッセージを特定のプロセスに送り続ける」と言うのは、場合によっては処理しきれない程の高負荷になりシステムをハングアップされる可能性があるので「やるなとは言わないが、避けた方が良い」です。
少なくとも「メッセージキューの糞詰まり」はさせない方が良いでしょう。
この回答への補足
chie65535さん、ご解答ありがとうございます。
VNCでSCツールというのがあるのですが、頻繁に落ちてしまうので落ちたら再度SCツールを立ち上げることをしています。
SCツールを立ち上げ後、リストビューから接続先を取得して・・・
ということをやっています。
上記の接続先の取得の時に、何百回に1度くらい失敗します
SCツールも待ち状態ですのでメッセージキューも空いていると思うのですが・・・
Sleep(0)でスレッドを切り替えて、再度SendMessageしましたが何度送っても失敗しました
こんな感じで試してみました
while (TRUE) {
if (::SendMessage(hLV, LVM_SETITEMSTATE, nIdx, lpvItm ))
break;
::Sleep(0);
}
すみません、テストしてもなかなか落ちないのでお返事が遅れたことお許しください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 パソコンが立ち上がりません 6 2022/10/06 00:30
- その他(メールソフト・メールサービス) Thunderbird メール受信 できない時にエラーが欲しい 1 2023/05/26 15:07
- ネットスーパー ネットショッピングで与信処理失敗とエラーが出ました!番号など正確に入力しました。残高残っています。何 2 2022/11/19 19:26
- デスクトップパソコン パソコン インテルC5i5RYH BIOSの設定方法を教えて下さい 5 2022/09/27 13:34
- Android(アンドロイド) AndroidでFirefoxブラウザーを使っていますが特定の画像がダウンロード出来ませんでした。 1 2022/09/17 13:11
- 仮想通貨(暗号通貨) 仮想通貨のワールドコインを登録したのに初回登録分のコインが入手できない? 1 2023/08/14 15:01
- VPN VPN接続が急にできなくなりました。 1 2022/12/13 15:25
- その他(海外) クレジットカードの3Dセキュアについて 日本のクレカで海外の航空会社のサイトで航空券を買う場合、ある 4 2022/08/02 11:26
- Windows 10 Windows Updateの更新ができない場合に初期化 3 2023/01/18 20:00
- 戦争・テロ・デモ 謝罪汁賠償汁飲ますのは韓国の専売特許ですか 2 2022/08/29 11:26
このQ&Aを見た人はこんなQ&Aも見ています
-
賃貸で可能な古民家風レトロな部屋作りのコツ!改めて知る畳の高い機能性と魅力も紹介
畳の部屋を雰囲気のよい部屋に仕上げたい!賃貸住宅でもできる古民家風のレトロな部屋作りのコツを伺った。
-
LVM_SETITEMSTATEでListViewのアイテムを選択するには?
その他(プログラミング・Web制作)
-
SendMessage関数がうまく動作しません
C言語・C++・C#
-
.netアプリへのSendMessageでフリーズ
Visual Basic(VBA)
-
-
4
画面を強制的に再描画させる方法
C言語・C++・C#
-
5
WinAPIで電卓をクリック
Visual Basic(VBA)
-
6
SendMessage で ESC など
C言語・C++・C#
-
7
Alt+P,Alt+NをPostmessageで送るには
Visual Basic(VBA)
-
8
リストビューの選択状態を取得するメッセージはありますか?
C言語・C++・C#
-
9
VC++スレッドの正しい終了のさせかた
C言語・C++・C#
-
10
VB.NETによるプロセス間通信
Visual Basic(VBA)
-
11
VC++でコントロールの境界線を描画する方法
C言語・C++・C#
-
12
ウィンドウにキー送信で ENTER を送りたい
Visual Basic(VBA)
-
13
WaitForSingleObjectの使い方について
C言語・C++・C#
-
14
既存のアプリのsyslistview32から文字列取得
Visual Basic(VBA)
-
15
(UWSC) 「#32770」の意味わかりますか?
その他(プログラミング・Web制作)
-
16
SendMessage中のメッセージ・ループについて
C言語・C++・C#
-
17
VB.NETのSendMessageを教えてください
Visual Basic(VBA)
-
18
ttlで戻り値を取得する方法
その他(プログラミング・Web制作)
-
19
CString から LPCTSTRの型に変換
C言語・C++・C#
-
20
【VBA】ファイルパスに半角スペースが入ると、VBAが動かない
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
explorer.exeが異様にメモリを食う
-
Windowsでのfork方法
-
タスクマネージャーのプロセス...
-
プロセスIDの取得方法について
-
非表示になったエクセルは?
-
コマンド実行時の結果のリダイ...
-
C#でのbatファイル実行結果取得
-
Linuxでのスレッド間メッセージ...
-
プロセスのアタッチ・デタッチ...
-
IISがフリーズ
-
他のコンピュータのプロセスを取得
-
WindowsAPIのCreateFile関数ま...
-
CreateProcessでアプリが終了し...
-
シェルで親プロセス終了時に子...
-
vb.netでEXCEL起動がうまくでき...
-
他のアプリケーションをクリッ...
-
ウィンドウのタイトルからプロ...
-
起動中のプロセスのメモリを書...
-
OSPFでプロセスを分ける意義に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
explorer.exeが異様にメモリを食う
-
タスクマネージャーのプロセス...
-
VB6.0 SHELLで起動...
-
C#でのbatファイル実行結果取得
-
プロセスのアタッチ・デタッチ...
-
プロセスIDからウィンドウハ...
-
プロセスIDの取得方法について
-
popen について
-
C++のプログラムをバックグラウ...
-
非表示になったエクセルは?
-
Windowsでのfork方法
-
別のプロセスの関数を呼び出す...
-
sleep関数の精度について
-
Visual C++からpingを実行して...
-
ADOでアクセスのレコードに...
-
C++でシェルを起動
-
SendMessageが失敗するときがある
-
ウィンドウのタイトルからプロ...
-
OSPFでプロセスを分ける意義に...
おすすめ情報