PDA

Просмотр полной версии : Эмуляция клавиши enter


spite
24.03.2009, 18:29
Ребята помогите написать батник или реализовать это по другому!
Значит я запускаю програму и мне надо нажать в ней кнопку, или с эмулировать нажатия кнопки ентер, возможно такое с помощью батника сделать?

Chaak
24.03.2009, 18:46
на винапи можно(на батнике думаю нельзя):
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
HWND hwnd;

if(hwnd = FindWindow(NULL, TEXT("Пуск")))
{
SendMessage(hwnd, WM_LBUTTONDOWN, NULL, NULL);
}

return 0;
}

spite
24.03.2009, 18:51
а есть программы типа EasyAutoInstaller которые эмулируют нажатия?

lll6
24.03.2009, 19:04
AutoIt

ex3me
24.03.2009, 19:18
или Sign 0f Mystery

OLISAV
04.04.2009, 16:16
Эмуляция нажатий клавиш - как я делал в Delphi...

Пишешь процедурку...


procedure TForm1.SetKey(Key:Integer);
begin
keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY,0);
keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
end;


потом вызываешь её когда тебе нужно:



SetKey(13); //ASCII код Enter-а...


Если начнет ругаться - значит какой-то uses нужно добавить... У меня были такие:

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, mmsystem;

Gar|k
04.04.2009, 17:14
если программа консольная то и батник сойдет
открой блокнот нажми энтер и сохрани txt файл типа lolo.txt

потом напиши батник start proga.exe < lolo.txt
и будет тебе щастье

если прога оконная то без вин апи тут не обойтись.

criz
05.04.2009, 19:13
Gar|k:
Значит я запускаю програму и мне надо нажать в ней кнопку
есть кнопка, следовательно она не консольная :)
spite, Chaak тебе уже ответил. Компиль, а потом можешь созать батник, который будет прогу запускать :)

St0nX
05.04.2009, 20:27
на винапи можно(на батнике думаю нельзя):
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
HWND hwnd;

if(hwnd = FindWindow(NULL, TEXT("Пуск")))
{
SendMessage(hwnd, WM_LBUTTONDOWN, NULL, NULL);
}

return 0;
}
функция FindWindow возвращает handle, top-level окна и поэтому такой вариант не всегда будет работать.

ProTeuS
05.04.2009, 22:47
BOOL EnumChildWindows( HWND hWndParent,
WNDENUMPROC lpEnumFunc,
LPARAM lParam
);

St0nX
05.04.2009, 23:20
static BOOL CALLBACK HandleChildWindow(HWND hChildWindow, LPARAM Param)
{
PostMessage(hChildWindow, WM_KEYDOWN, VK_NUMPAD1, 0);
return TRUE;
}

void SimulateKeyDown()
{
HWND hCalcWindow = FindWindow(NULL, "Калькулятор");
if (hCalcWindow != NULL)
{
EnumChildWindows(hCalcWindow, &HandleChildWindow, 0);
}
}
Примерчик для выше указанного ;)