Как отправить нажатие клавиши ENTER в другое приложение?

У меня есть код, который запускает внешнее приложение и автоматически заполняет запрос пароля.

Я хочу автоматизировать нажатие клавиши "ENTER", чтобы пользователю не приходилось нажимать "ОК".

Как я могу отправить клавишу ENTER во внешнее приложение?

Ниже приведен мой код в том виде, в котором он есть сейчас.

Первая строка для отправки пароля в приложение работает нормально.

Вторая строка для отправки нажатия клавиши ENTER не имеет никакого эффекта.

Я использую Делфи 2010.

    //now that we have the control handle, send the password to it
    SendMessage(AppHandle,WM_SETTEXT,0,Integer(PChar(pwd)));

    //and now push ENTER
    SendMessage(AppHandle,WM_KEYDOWN,0,Integer(PChar(#13)));

person JosephStyons    schedule 16.09.2009    source источник
comment
Может быть, вам нужно сначала отправить вкладку, а затем нажать Enter?   -  person Phoexo    schedule 16.09.2009
comment
В Vista/Win7 — если ваше приложение, на которое вы нацелены, запущено от имени администратора, этот метод не сработает, поскольку ОС будет игнорировать сообщения.   -  person skamradt    schedule 16.09.2009


Ответы (4)


Попробуй это

PostMessage(AppHandle, WM_KEYDOWN, VK_RETURN, 0);

Пока.

person RRUZ    schedule 16.09.2009
comment
Просто и эффективно. Спасибо! - person JosephStyons; 16.09.2009

Быстрый ответ. Дублируйте свой последний вызов SendMessage, используя событие WM_KEYUP. Некоторые системы срабатывают только при отпускании клавиши, а не при ее нажатии.

Что-то попробовать, пока настоящие программисты не ответят. (:-)

person kingchris    schedule 16.09.2009
comment
Пользовательский интерфейс довольно часто реагирует на события «нажатие мыши», а не на «нажатие мыши». Я не уверен в нажатиях клавиш. Но в любом случае хорошее предложение. +1 - person Ates Goral; 16.09.2009

Есть несколько способов сделать то, что вы хотите.

Первый и самый простой для детализации — это файл SendKey32.pas. Этот модуль был специально написан, чтобы позволить вам делать именно то, о чем вы просите. Это delphi.about .com дает хорошее объяснение устройства и того, что оно может делать.

Я лично начал использовать другой метод из-за некоторых ограничений, которые я обнаружил в материалах SendKey32. Второй метод — сообщения журнала воспроизведения. Это тип системного хука Windows, который позволяет вам отправлять (нажатие клавиши) сообщения в операционную систему и заставлять ее обрабатывать все мелкие хлопоты.

Я нашел в Интернете модуль под названием hkSend.pas, в котором есть все необходимые настройки для единого вызова функции (SendKeys).

Если вы сделаете запрос в Google и просмотрите первые несколько записей, вы найдете копию файла .pas и сможете увидеть, о чем идет речь. Человек, написавший hkSend, похоже, заставил его работать аналогично SendKey32.pas, но вместо этого использовал воспроизведение журнала.

ХТХ,

Райан.

person Vivian Mills    schedule 16.09.2009

Попробуйте #13#10 вместо #13.

person Phoexo    schedule 16.09.2009
comment
Спасибо за идею, но без разницы. Я также пытался отправить их последовательно, но безуспешно. - person JosephStyons; 16.09.2009