Здравствуйте, SCrash, Вы писали:
SC>Привет всем!
SC>У меня возник вопрос:
SC>Можно ли при помощи своей программы "нажимать" кнопку в другой программе? Извините за тавтологию, сейчас поясню суть.
procedure TForm1.Button1Click(Sender: TObject);
var
H: HWND;
begin
H := HWND(131128); //Хэндл кнопки пуск :)
SendMessage(H, WM_LBUTTONDOWN, 0, 0);
Sleep(20);
SendMessage(H, WM_LBUTTONUP, 0, 0);
end;
Другое дело как получать хэндлы нужных тебе кнопок. Что могу посоветовать — врубай Spy++, запоминай их капшины...
... << RSDN@Home 1.1 beta 1 >>
Здравствуйте, SCrash, Вы писали:
SC>Привет всем!
SC>У меня возник вопрос:
SC>Можно ли при помощи своей программы "нажимать" кнопку в другой программе? Извините за тавтологию, сейчас поясню суть.
SC>Мне приходиться очень много за день создавать отчеты при помощи программы "A". Данные у меня находятся в файлах текстовых.
SC>Это меня уже задолбало ;(((, хочу написать на CBuilder'e программу, которая будет эмулировать нажатия определенных комбинаций клавиш или "button'ов" на программе "A", затем заполнять поля ввода текстом и нажимать Ок.
Есть такая штука Rational Robot. Если я правильно понял проблему, то это как раз то что тебе нужно
Здравствуйте, Demiurg, Вы писали:
D>D>procedure TForm1.Button1Click(Sender: TObject);
D>var
D> H: HWND;
D>begin
D> H := HWND(131128); //Хэндл кнопки пуск :)
D> SendMessage(H, WM_LBUTTONDOWN, 0, 0);
D> Sleep(20);
D> SendMessage(H, WM_LBUTTONUP, 0, 0);
D>end;
D>
D> Другое дело как получать хэндлы нужных тебе кнопок. Что могу посоветовать — врубай Spy++, запоминай их капшины...
Отлично! Спасибо!
Еще небольшая просьба — не подскажешь, реально таким же способом control Edit заполнить своим текстом?
Здравствуйте, SCrash, Вы писали:
D>> Другое дело как получать хэндлы нужных тебе кнопок. Что могу посоветовать — врубай Spy++, запоминай их капшины...
SC>Отлично! Спасибо!
SC>Еще небольшая просьба — не подскажешь, реально таким же способом control Edit заполнить своим текстом?
Реально. Есть сообщение
WM_SETTEXT
wParam = 0; // not used; must be zero
lParam = (LPARAM)(LPCTSTR)lpsz; // address of window-text string
Работать будет, только если в другом сообщении каком-нить тебе потребуется передать данные другому процессу, то может уже и не сработать, так как адресные пространства у процессов разные, а передается, как видишь, адрес строки. Здесь работает потому что Микрософт сама сделала для этого и некоторых других сообщений всю черновую работу по копированию данных в другой процесс и переинициализации адреса. А в общем случае нужно использовать WM_COPYDATA.
Здравствуйте, Demiurg, Вы писали:
D>Здравствуйте, SCrash, Вы писали:
D>>> Другое дело как получать хэндлы нужных тебе кнопок. Что могу посоветовать — врубай Spy++, запоминай их капшины...
SC>>Отлично! Спасибо!
SC>>Еще небольшая просьба — не подскажешь, реально таким же способом control Edit заполнить своим текстом?
D> Реально. Есть сообщение
D>D>WM_SETTEXT
D>wParam = 0; // not used; must be zero
D>lParam = (LPARAM)(LPCTSTR)lpsz; // address of window-text string
D> Работать будет, только если в другом сообщении каком-нить тебе потребуется передать данные другому процессу, то может уже и не сработать, так как адресные пространства у процессов разные, а передается, как видишь, адрес строки. Здесь работает потому что Микрософт сама сделала для этого и некоторых других сообщений всю черновую работу по копированию данных в другой процесс и переинициализации адреса. А в общем случае нужно использовать WM_COPYDATA.
Огромное спасибо!
Сейчас буду испытывать!
P.S.: Лень — двигатель прогресса!