tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル他アプリのプルダウン操作
記事No9754
投稿日: 2009/12/24(Thu) 22:42
投稿者よっし
こんにちは。
現在vb.netにて他アプリを操作するツールを組んでいます。

他アプリのプルダウンメニューにPostMessageにてプルダウンに
書かれている内容の目的の文字列を一文字づつ送信し目的とする項目を
選択させようとしています。
アルファベットキーなどは文字列を頭から順に送信する事により
選択できるのですが、_(アンダーバー)だけはプルダウンにて
受け付けないのか反応しません。
何か方法等はあるのでしょうか?
なおプルダウン内の目的とする項目の位置はわかっているので、
「↓」キーを回数分送信して選択させようとも考えましたが、
プルダウンでは反応がありません。

なお要点のみですが構文は以下のようにしています
PostMessage(hwnd, WM_CHAR, AscW(se_1na), 0)'se_1naは1文字列

なお、他アプリのリストボックスならばアンダーバーも、「↓」
も正常に反応し正常に目的の項目を選択してくれます。

[ツリー表示へ]
タイトルRe: 他アプリのプルダウン操作
記事No9755
投稿日: 2009/12/25(Fri) 00:16
投稿者Hongliang
プルダウンって、コンボボックスのことですよね?
それでインデックス固定なら、CB_SETCURSEL を使えば簡単です。
// アプリの構造によっては CBN_SELCHANGE も必要になるかも。ならないかも。

[ツリー表示へ]
タイトルRe^2: 他アプリのプルダウン操作
記事No9757
投稿日: 2009/12/25(Fri) 12:18
投稿者よっし
ご返答ありがとうございます。
現在CB_SETCURSELについて調査中です。

ひとつ質問をさせていただきたいのですが、
他アプリのコンボボックスのハンドルを取得しようとしているのですが、
spy++で調べると、コンボボックスがハイライトした状態でないと
項目自体が表示されません。これはどういった事なのでしょうか。
当然ですがウインドウ自体は表示され見えている状態です。

よろしくご教授ください。

[ツリー表示へ]
タイトルRe^3: 他アプリのプルダウン操作
記事No9758
投稿日: 2009/12/25(Fri) 12:52
投稿者Hongliang
さあ? そういう風な構造にしてるんじゃないですか?
例えば .NET の DataGridViewComboBoxCell では、セルがエディットモードの時のみコンボボックスを表示し、通常時はそれっぽい外観を表示しているだけで実際のコンボボックスは表示していません。
// そういうのに対してどうするかって言うと個別の問題になります。
よっしさんが扱おうとしているアプリケーションがどういう実装になっているかは存じませんが。

[ツリー表示へ]
タイトルRe^4: 他アプリのプルダウン操作
記事No9763
投稿日: 2009/12/29(Tue) 10:11
投稿者よっし
ご返答ありがとうございます。

CB_SETCURSELなど色々と試してみたのですが、やはりうまく動かないようです。
文字コードだけは送信されているようなのですが、他は無反応です。
Hongliangさんがおっしゃるように、コンボボックスが無効になっている
ような処理が入っているところを見ると、アプリ側でなにか制限が
かかっているのでしょうか。
そうだとすると他に代用できるような方法はありますでしょうか?

[ツリー表示へ]