Как отправить нажатие клавиши «ВВОД» в другое приложение? - PullRequest
4 голосов
/ 16 сентября 2009

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

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

Как отправить ключ ВВОД во внешнее приложение?

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

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

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

Я использую Delphi 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)));

Ответы [ 4 ]

12 голосов
/ 16 сентября 2009

Попробуйте это

PostMessage(AppHandle, WM_KEYDOWN, VK_RETURN, 0);

Bye.

2 голосов
/ 16 сентября 2009

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

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

1 голос
/ 16 сентября 2009

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

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

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

В сети есть единица, которую я обнаружил hkSend.pas , в которой вся необходимая настройка подключена к одному вызову функции (SendKeys).

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

НТН,

Райан.

1 голос
/ 16 сентября 2009

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

...