![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
работа с окнами через WinApi в Windows 2000
Greg123 © (2005-05-26 15:00:00)У меня есть программа, которая запускает другое приложение и программно нажимает в нём кнопки.
Эта прога отлично работает в Windows XP, но перестаёт работать в Windows 2000, т.е. например по активации окна функциями SetForegroundWindow или SetWindowPos вместо развёртывания окон они только мигают или запускается копия приложения.
Как это поправить???
Вот для примера кусок кода:
window_handle:=FindWindow(nil,pchar('exe Программа'));
if window_handle0 then
begin
SetForegroundWindow(window_handle);
button_handle:=FindWindowEx(window_handle,0,nil,pchar ('&Контроль'));
if(button_handle0) then
begin
SetForegroundWindow(button_handle);
keybd_event(VK_RETURN,0,0,0);
keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
//или так SendMessage(button_handle,bm_click,0,0);
i := 1;
end;
end;
Sleep(7000);
end;
ANB (2005-05-26 17:24:00) [21]SetForegroundWindow(window_handle);
Попробуй, напиши результат.
Greg123 (2005-05-26 17:20:00) [22]Если не трудно, можно поподробнее как в моём случае пользоваться функцией AttachThreadInput
ANB (2005-05-26 17:18:00) [23]
> Тебе нужно AttachThreadInput использовать
- млин, а у меня на ХР без нее окно поднимается. Это только для 2000 или я чего то не то сделал ?
ANB (2005-05-26 17:17:00) [24]
> SetForegroundWindow(button_handle);
- эта функция не умеет активировать КНОПКИ. Как у тебя на ХР работала - ума не приложу. И зачем ты кликаешь по кнопке клавиатурой, да еще и через keybd_event.
<offtop>
А чего вообще пишешь ?
</offtop>
alpet (2005-05-26 17:12:00) [25]Тебе нужно AttachThreadInput использовать, что-бы окно реально "всплывало". А Sleep убери, для таких случаев функцию лучше вызывать по таймеру (WM_TIME).
Greg123 (2005-05-26 16:16:00) [26]В программе, на которой нажимаются кнопки обсчитываются данные и бежит счётчик, при переключении между окном моей программы и этой расчёт замедляется (как мне показалось)
Digitman (2005-05-26 16:07:00) [27]
> чтобы не было тормозов, поставил проверку через 7 сек
ГДЕ написано, что без оного кода ожидаются какие-то "тормоза" ?
Greg123 (2005-05-26 16:05:00) [28]Этот кусок проверяет не появилось ли определённое окно,
чтобы не было тормозов, поставил проверку через 7 сек.
Кусок кода вырезал криво, вначале ещё есть do... while
Digitman (2005-05-26 15:49:00) [29]
> Greg123 (26.05.05 15:42) [2]
может и подскажу.
но может подскажешь для начала, откуда в твоем коде взялся этот слип ?
Greg123 (2005-05-26 15:42:00) [30]Может подскажешь как сделать по-умному
Digitman (2005-05-26 15:29:00) [31]
> Sleep(7000);
это особо умиляет