2017-02-16 10 views
1

Я кодирую приложение, которое может выбрать другого приложения с определенным индексом. Например, я хочу выбрать второй элемент «Adobe flash player» из моего приложения с помощью подключения.sendmessage api, чтобы выбрать определенный индекс элемента управления combobox

Приложение ComboBox не является моим, поэтому я не могу изменить целевое приложение.

Обычно, размещение текста или нажатия кнопки можно сделать с помощью Sendmessage API в VB.Net.

Значение дескриптора (hWnd) этого ComboBox может быть восстановлено. Я хочу знать, какую функцию (api) использовать и какое значение следует использовать.

спасибо.

enter image description here

ответ

1

Вы можете отправить CB_SETCURSEL сообщений в поле со списком. Параметр wParamSendMessage должен быть нулевым индексом элемента, который вы хотите установить в качестве выбранного индекса, а 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? – klados

+0

Добро пожаловать :) –

+0

'CB_GETCOUNT' предназначен для подсчета количества предметов. Не стесняйтесь сообщать мне, если вы задали вопрос об этом, и я отправлю вам пример. –