Не могу отправить ключ в окно с SendMessage - PullRequest
3 голосов
/ 19 марта 2010

Я пишу программу на C под Windows, которая должна отправить ключ ENTER в диалоговое окно, чтобы закрыть его автоматически.

Я получаю дескриптор для интересующего меня окна верхнего уровня (с помощью EnumDesktopWindows ()) и затем пытаюсь отправить ключ ENTER с помощью SendMessage (обратите внимание также, что закрытие окна путем отправки WM_CLOSE работает нормально). 1003 *

Ни одна из следующих работ:

SendMessage( hTargetWindow, WM_CHAR, VK_RETURN, 0 );

SendMessage( hTargetWindow, WM_CHAR, VK_RETURN, 1 );

SendMessage( hTargetWindow, WM_KEYDOWN, VK_RETURN, 1 );
SendMessage( hTargetWindow, WM_KEYUP, VK_RETURN, 1 );

SendMessage( hTargetWindow, WM_KEYDOWN, VK_RETURN, 1 );
SendMessage( hTargetWindow, WM_CHAR, VK_RETURN, 1 );
SendMessage( hTargetWindow, WM_KEYUP, VK_RETURN, 1 );

и так далее ...

В качестве возможно более простого сценария я также попытался отправить ключ ascii, скажем, в блокнот.

Как это должно работать?

Заранее спасибо

Ответы [ 4 ]

4 голосов
/ 22 марта 2010

Ни один из способов, предложенных Ником Ди, не сработал! Удивительно, но следующие работы:

PostMessage(hTargetWindow, WM_KEYDOWN, VK_RETURN, 0);

То есть я вызываю PostMessage вместо SendMessage. Я не эксперт по Windows, поэтому не совсем понимаю разницу между этими двумя функциями.

В любом случае, это именно то, что мне нужно: отправка ключа ENTER в диалоговое окно (кстати, я имитирую поведение ключа реестра enableDefaultReply в Win XP Embedded). На самом деле, это делает то, что мне нужно, с одним исключением: кажется, работает, только если все окно имеет фокус. Но это должно быть легко исправить.

Спасибо за предложение PostMessage!

3 голосов
/ 19 марта 2010

Это должно работать

SendMessage(hTargetWindow, WM_KEYDOWN, VK_RETURN, 0);

Но диалоговое окно не закроется, если кнопка по умолчанию , которая фактически закрывает диалоговое окно, не сфокусирована.

А для отправки символов ASCII:

PostMessage(hTargetWindow, WM_CHAR, ch, 0);
0 голосов
/ 22 марта 2010

В зависимости от версии Windows отправка сообщений может не работать, если вы отправляете сообщение в приложение с повышенными правами (то есть, с правами администратора) из приложения без прав доступа. Может ли это быть виновником здесь?

0 голосов
/ 21 марта 2010

использовать функцию SendInput

http://msdn.microsoft.com/en-us/library/ms646310%28VS.85%29.aspx

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