HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0303
こいる外部アプリのListBoxを選択させたが、選択した時の動作が起きてくれない3解決


こいる

リンク

2020/3/3(Tue) 12:02:47|NO.89607

外部アプリのListBoxに、LB_SETCURSELを送って項目を選択させたのですが、
選択はできたのですが、選択したときの動作が起きてくれません。


どうやら、「LB_SETCURSEL」は、選択したときに
アプリケーションに送られるメッセージ「LBN_SELCHANGE」を送らないらしく、これが原因だと思います。
https://docs.microsoft.com/en-us/windows/win32/controls/lbn-selchange

直接親ウィンドウにLBN_SELCHANGEを送ってみたのですが、
wParamの下位ワードがよく分からなくて省いたのが原因なのか、反応してくれませんでした。


どうすればいいのでしょうか?
お力添えください。



この記事に返信する


こいる

リンク

2020/3/3(Tue) 12:04:58|NO.89608

補足:
やりたいことは、「選択したときの動作を起こしたい」ということです。



あらや

リンク

2020/3/3(Tue) 15:11:36|NO.89609

これで動くかわかりませんが
直接親ウィンドウにLBN_SELCHANGEを送る方法です。

ウィンドウハンドルの取得に関しては省略してあります。


#define global WM_COMMAND 0x0111 // オブジェクトからメッセージが送られた #define global LB_SETCURSEL 0x0186 // リストボックス選択インデックス設定 #define global LBN_SELCHANGE 0x00000001 // リストボックスの選択が変更された #define global GWL_ID -12 // ウィンドウの識別子を取得 #uselib "user32.dll" #cfunc GetWindowLong "GetWindowLongA" int, int // 省略 // p_hwnd; // 親ウィンドウのハンドル // lb_hwnd; // リストボックスのハンドル(lParam値にもなる) lb_id = GetWindowLong( lb_hwnd, GWL_ID ); // リストボックスのウィンドウの識別子 wp = (LBN_SELCHANGE << 16) | (lb_id & 0xFFFF); // wParam値 // 約1秒ごとにリストボックスのインデックスを変更する send_idx = 0; // 送信するリストボックスのインデックス *main sendmsg lb_hwnd, LB_SETCURSEL, send_idx, 0; // リストボックスにLB_SETCURSELを送信 sendmsg p_hwnd, WM_COMMAND, wp, lb_hwnd; // 親ウィンドウにWM_COMMANDを送信 wait 100; // 約1秒待機 // リストボックスのインデックスを0〜2の範囲におさめる send_idx++; send_idx \= 3; goto *main;



こいる

リンク

2020/3/3(Tue) 18:28:51|NO.89610

返信ありがとうございます。

しっかり動きました!


GetWindowLongで識別子が取得できるとは……。
勉強になりました。

本当にありがとうございました!



ONION software Copyright 1997-2023(c) All rights reserved.