Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2012, 13:08   #1
onefinal
Пользователь
 
Регистрация: 21.07.2012
Сообщений: 18
По умолчанию Отправка клавиш в неактив окно

вот к чему я пришел, научился отправлять клавиши в неактив окно

PHP код:
if GetAsyncKeyState(VK_F1) <> 0 then
      PostMessage
(FindWindow(nil'Aion Client'), WM_IME_KEYDOWN,VK_F1,); 
вот так я ищу hWnd окна и ему отправляю F1 но если таких окон будет 2, то ни в одно не отправляеться команда, сделал список с процессами

PHP код:
procedure TForm1.GetProcessList;
var
  
WndHWND;
  
buff: array [0..127of Char;
begin
  form1
.combobox1.Items.Clear// Î÷èùàåì ñïèñîê ïðîöåññîâ â ôîðìå
  
Wnd := GetWindow(HandleGW_HWNDFIRST);
  while 
Wnd <> do
  
begin
    
// Íåêîòîðûå îêíà ïîêàçûâàòü íåíóæíî
    
if (Wnd <> Application.Handle) and // Ñîáñòâåííîå îêíî
      
(GetWindowText(WndbuffSizeOf(buff)) <> 0// Îêíà áåç çàãîëîâêîâ
      
then
    begin
      GetWindowText
(WndbuffSizeOf(buff));
     
form1.combobox1.Items.Add(StrPas(buff)); // Äîáàâëåíèå çàïèñè â ñïèñîê
    
end;
    
Wnd := GetWindow(WndGW_HWNDNEXT);
  
end;
end;

procedure TForm1.btRefreshClick(SenderTObject);
begin
  GetProcessList
;



end
и стал в ступор, нужно из этого списка выбрать программу потом получить её hWnd и отправлять, подкиньте идею пожалуйста
onefinal вне форума Ответить с цитированием
Старый 21.07.2012, 13:51   #2
Larboss
Недо
Участник клуба
 
Регистрация: 11.08.2011
Сообщений: 1,394
По умолчанию

Получай Handle не по окну.

http://programmersforum.ru/showthread.php?t=5551
С помощью программирования можно разбогатеть и изменить мир к лучшему (с) Бьерн Страуструп
Larboss вне форума Ответить с цитированием
Старый 21.07.2012, 14:38   #3
onefinal
Пользователь
 
Регистрация: 21.07.2012
Сообщений: 18
По умолчанию

там не понял, сделал то что по теме, теперь вопрос
почему срабатывает не с первого раза этот код ?



Код:
procedure TForm1.ListBox1Click(Sender: TObject);

begin
      //PostMessage(FindWindow(nil, 'ComboBox1.Items[ComboBox1.ItemIndex]'), WM_IME_KEYDOWN,VK_F1,0 );
     Wnd :=  FindWindow(nil, PChar(combobox1.Items[combobox1.ItemIndex]));
      if combobox1.ItemIndex>=0
  then Label1.Caption:=combobox1.Items[combobox1.ItemIndex]
  else Label1.Caption:='Íè÷åãî íå âûáðàíî';

//PostMessage(Wnd, WM_IME_KEYDOWN,VK_F1,0 );

end;



procedure TForm1.Timer1Timer(Sender: TObject);
begin
if GetAsyncKeyState(VK_F1) <> 0 then
     sendMessage(Wnd, WM_IME_KEYDOWN,VK_F1,0 );

     if GetAsyncKeyState(VK_F2) <> 0 then
     sendMessage(Wnd, WM_IME_KEYDOWN,VK_F2,0 );

     if GetAsyncKeyState(VK_F3) <> 0 then
     sendMessage(Wnd, WM_IME_KEYDOWN,VK_F3,0 );

     if GetAsyncKeyState(VK_F4) <> 0 then
     sendMessage(Wnd, WM_IME_KEYDOWN,VK_F4,0 );

     if GetAsyncKeyState(VK_F5) <> 0 then
     sendMessage(Wnd, WM_IME_KEYDOWN,VK_F5,0 );

end;

end.
onefinal вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[?] Послать клавишу в чужое окно, не выводя окно на передний план. Moriarty Win Api 4 21.02.2011 05:11
Передать нажатия клавиш в другое окно antonq Win Api 1 25.04.2009 12:31
как сьэмулировать нажатие клавиш в невидимое окно Пепел Феникса Win Api 1 30.01.2009 09:40
Отправка сообщений в окно alexeyd Win Api 1 25.03.2008 13:32
«Окно+символ». Создать класс, представляющий окно в текстовом режиме. RustreX Паскаль, Turbo Pascal, PascalABC.NET 1 11.11.2007 19:28