2017-02-16 160 views
1

的具體指標我編碼的應用程序,可以另一個應用程序的ComboBox具有一定的指數選擇。 例如,我想從我的應用程序中選擇第二個列出的項目「Adobe flash player」並進行掛接。SendMessage函數的API來選擇ComboBox控件

ComboBox應用程序是不是我的,所以我不能修改目標應用程序。

通常情況下,把一個文本或點擊一個按鈕就可以通過在VB.Net使用Sendmessage API來完成。

ComboBox的句柄值(HWND)可以被檢索。 我想知道使用哪個函數(api)以及應該使用哪個值。

謝謝。

enter image description here

回答

1

您可以發送CB_SETCURSEL消息到組合框。的SendMessagewParam參數應該是從零開始,你要設置爲選定的索引項的指數和lParam是沒用在這裏。

應用程序發送一消息CB_SETCURSEL選擇在組合框中的 列表的字符串。如有必要,該列表將字符串滾動到 視圖。組合框的編輯控件中的文本更改爲反映 新選擇,並且刪除列表中的任何先前選擇。

  • wParam:指定要選擇的字符串從零開始的索引。如果此 參數爲-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'用於獲取物品數量。隨時通知我,如果你問了一個關於它的問題,我會爲你發佈一個例子。 –