2017-02-16 14 views
1

特定のインデックスを持つ別のアプリのComboBoxを選択できるアプリをコーディングしています。 たとえば、私のアプリケーションから2番目にリストされた項目「Adobe Flash Player」をフックで選択したいとします。コンボボックスコントロールの特定のインデックスを選択するためのsendmessage API

ComboBoxアプリは私のものではないため、対象アプリを変更することはできません。

通常、VB.NetのSendmessage APIを使用すると、テキストを入力したり、ボタンをクリックすることができます。

ハンドル値(hWnd)はComboBoxです。 使用する関数(api)と使用する値を知りたい。

ありがとうございます。

enter image description here

答えて

1

あなたは、コンボボックスにCB_SETCURSELメッセージを送ることができます。 wParamのパラメータがSendMessageの場合、選択したインデックスとして設定するアイテムのインデックスは0から始まり、lParamは無駄です。

アプリケーションは、CB_SETCURSELメッセージを送信して、 コンボボックスのリスト内の文字列を選択します。必要であれば、リストは文字列を ビューにスクロールします。コンボボックスの編集コントロール内のテキストが変更され、 の新しい選択が反映され、リスト内の以前の選択が削除されます。

  • wParam:選択する文字列の0から始まるインデックスを指定します。 this パラメータが-1の場合、リスト内の現在の選択が削除され、 編集コントロールがクリアされます。
  • lParam:このパラメータは使用されません。

C#例

[System.Runtime.InteropServices.DllImport("user32.dll")] 
static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); 
const int CB_SETCURSEL = 0x014E; 
void SetSelectedIndex(IntPtr comboBoxHandle, int index) 
{ 
    SendMessage(comboBoxHandle, CB_SETCURSEL, index, 0); 
} 

VB.NET例私がまさに必要

<System.Runtime.InteropServices.DllImport("user32.dll")> _ 
Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, _ 
          ByVal wParam As Integer, ByVal lParam As Integer) As IntPtr 
End Function 
Const CB_SETCURSEL As Integer = &H14E 
Sub SetSelectedIndex(comboBoxHandle As IntPtr, index As Integer) 
    SendMessage(comboBoxHandle, CB_SETCURSEL, index, 0) 
End Sub 
+0

。ありがとう。さらに、ComboBoxコントロールのCountを取得する方法はありますか? – klados

+0

あなたは大歓迎です:) –

+0

「CB_GETCOUNT」はアイテム数を取得するためのものです。あなたがそれについての質問をしたら私に通知してください、そして私はあなたのための例を投稿します。 –

関連する問題