Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

работа с окнами через WinApi в Windows 2000


Страницы:   1 2

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);


это особо умиляет


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо