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

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

Wnd [D7, Win95/98]


Cerber ©   (2004-02-21 10:24:00) 

Wnd: Идентификатоp окна или 0 для игноpиpования нажатий клавиш.Я не много не понял что это заиндефикатор можно привести пример для блакнота.


olookin   (2004-02-21 10:53:00) [1]

Сначала ищем нужное окно. Делаем это по поиску WindowText. Например, нужно окно Блокнота - у него title содержит слово "Блокнот".

procedure TForm1.Getwindow1Click(Sender: TObject);
var tl: string;
  h,h1: hWnd;no: boolean;
begin
 //ищем отталкиваясь от окна своей программы
 tl:='Блокнот';
 //назначаем хэндл начального окна - это окно нашей программы
 h:=Form1.Handle;
 h1:=h; no:=false;
 //сначала ищем по Z-последовательности окна следующие за окном программы
 while no=false do begin
 //получаем хэндл следующего окна
 h:=GetNextWindow(h,GW_HWNDNEXT);
 //если хэндл равен 0 то больше окон нет - выходим из while
 if h=0 then no:=true;
 //получаем title найденного окна
 GetWindowText(h,p,255); s:=StrPas(p);
//если в title окна есть слово tl то делаем это окно активным
 if Pos(tl,s)<>0 then begin
 SetForegroundWindow(h);
//и перерисовываем его - ыв принципе можно и не делать
 RedrawWindow(h,0,0,RDW_VALIDATE and RDW_UPDATENOW and RDW_ALLCHILDREN);
//и эмулируем нажатие клавиши, например символа "А"  
 SimulateKeystroke(ord('A'),0);
//и например переводим каретку на строку вниз - т.е. проще говоря жмем enter
 SimulateKeystroke(vk_return,0);
//и после всего этого выходим из while
 no:=true; break; end;
 end;

 //если не нашли среди окон впереди, ищем окна находящиеся перед окном программы
 if no=false then begin h:=h1;
 while no=false do begin
 h:=GetNextWindow(h,GW_HWNDPREV);
 if h=0 then no:=true;
 GetWindowText(h,p,255); s:=StrPas(p);
 if Pos(tl,s)<>0 then begin
 SetForegroundWindow(h);
 RedrawWindow(h,0,0,RDW_VALIDATE and RDW_UPDATENOW and RDW_ALLCHILDREN);
 SimulateKeystroke(ord('A'),0);
 SimulateKeystroke(vk_return,0);
 no:=true; break; end;
 end;
 end;
end;

эмулятия нажатия клавиши....
procedure SimulateKeystroke(Key : byte; extra : DWORD);
begin
 keybd_event(Key,extra,0,0);
 keybd_event(Key,extra,KEYEVENTF_KEYUP,0);
end;


Наверх

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