CB_SELECTSTRING не работает для японского товара - PullRequest
3 голосов
/ 03 марта 2020
 [DllImport("user32.dll")]
 public static extern int SendMessage(IntPtr hWnd, int msg, string wParam, string lParam);

 Private void GetSlecteITemIdex()
 {
       int _ComBoxHandle = System.Windows.Automation.AutomationElement.Current.NativeWindowHandle;
       int l_GETSelectedItem1 = SendMessage((IntPtr)l_ComBoxHandle, CB_SELECTSTRING, null, "英語");
         if (l_GETSelectedItem1 == -1)
                throw new Exception("Item not found.");
 }

Combo Image: ComboBox containing japanese item

Я хочу получить индекс японского элемента "" "из комбинированного списка, но он всегда дает индекс" -1 ", используя код выше для engli sh предметов это дает мне правильный индекс, что дополнительно нужно сделать, чтобы правильно получить японский предметный индекс.

1 Ответ

3 голосов
/ 03 марта 2020

В соответствии с документами аргументы для сообщения CB_SELECTSTRING:

  • wParam: нулевой индекс элемент, предшествующий первому элементу для поиска ... Если wParam равен -1, весь список ищется с начала.

  • lParam: указатель на строку с нулевым символом в конце который содержит символы для поиска. Поиск не чувствителен к регистру, поэтому эта строка может содержать любую комбинацию прописных и строчных букв.

Таким образом, вы должны выбрать следующее объявление для SendMessage из https://www.pinvoke.net/default.aspx/user32.sendmessage:

[DllImport("user32.dll", CharSet = CharSet.Auto)] 
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam)

Передайте -1 (вместо null) первый аргумент для поиска с начала.

(Обратите внимание, что CharSet = CharSet.Unicode также могут быть выбраны. Как объяснено в Charsets и marshaling , Auto и Unicode оба заставить строки быть маршалированными до wchar_t (UTF-16) на Windows и char16_t (UTF-16) на . NET Core 2.2 и более ранних версиях на Unix; они отличаются только на . NET Core 3.0 и более поздних версиях и Mono на Unix, где Auto маршальных строк до char (UTF-8).)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...