sendmessage api选择组合框控件的特定索引

时间:2017-02-16 07:21:08

标签: .net vb.net winforms winapi combobox

我正在编写一个可以选择具有特定索引的其他应用ComboBox的应用。 例如,我想从我的应用程序中选择第二个列出的项目“Adobe flash player”并挂钩。

ComboBox应用不是我的,所以我无法修改目标应用。

通常,可以使用VB.Net中的Sendmessage API来完成文本或单击按钮。

可以检索ComboBox的句柄值(hWnd)。 我想知道要使用哪个函数(api)以及应该使用哪个值。

谢谢。

enter image description here

1 个答案:

答案 0 :(得分: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