2016-10-16 4 views
1

До сих пор я сделать окно - активным, чтобы отправить текст с помощью SendKeys, но я хочу сделать это в фоновом режиме, используя SendMessageuser32.dll. Как найти текстовое поле?

IntPtr main = FindWindow(null, "Label Code (Scan)"); 
if (!main.Equals(IntPtr.Zero)) 
    { 
     if (SetForegroundWindow(main)) 
     { 
      SendKeys.SendWait(code); 
      SendKeys.SendWait("{ENTER}"); 
      } 
    } 

Я пытался что-то вроде:

IntPtr main = FindWindow(null, "Label Code (Scan)"); 
SendMessage(main, 0x000C, 0, "Hello"); 

Но переименовывает название окна для «Hello». Похоже, мне нужно найти дочернее окно, но не могу узнать о lpszClass.

public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); 

enter image description here

+0

В Winspector нажмите и перетащите туда, где говорится «нажмите и перетащите», а затем перетащите перекрестье в текстовое поле. Какую информацию вы получаете? – NineBerry

+0

@NineBerry показан на изображении. 00030BA: CVIRTLVDChild00400000 «Код метки (сканирование)» –

+0

Используйте System.Windows.Automation, чтобы все: найти окно, найти текстовое поле и ввести текст. – andlabs

ответ

2

Элементы управления в окне не является реальным управлением Windows. Они рисуются и управляются Window itselt. Тем не менее, окно может поддерживать фреймворк Windows Automation, позволяющий взаимодействовать с элементами управления.

Используйте инструмент Inspect, чтобы проверить, поддерживает ли окно API автоматизации Windows.

Если это так, используйте команду classes in System.Windows.Automation с информацией, которую вы видите в инструменте «Осмотр», чтобы установить текст.

Смежные вопросы