Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.18;
Скачать: CL | DM;

Вниз

Программное "нажатие" клавиши в другом приложении   Найти похожие ветки 

 
ai   (2004-02-12 07:59) [0]

Всем Доброе утро (день, вечер, ночь)!
Никак не разберусь с проблемой. Я хочу передавать другому приложению все отловленные моей программой нажатия клавишь клавиатуры, т.е. сделать мою программу "прозрачной" для нажатий клавишь для другого приложения. Попробовал несколько способов:

1.      
HWND := FindWindow(pchar("notepad"),nil) ;
     if HWND > 0 then
       begin
         SendMessage(HWND, WM_SETFOCUS, 0, 0);
         SendMessage(HWND, WM_KEYDOWN, Msg.wParam, Msg.lParam);
       end;

2. тоже с PostMessage

3.      
FHWND := FindWindow(pchar("notepad"),nil) ;
     if FHWND > 0 then
       try
         OtherThreadID := GetWindowThreadProcessId(FHWND, @ProcID);
         MyThreadID := GetCurrentThreadId;
         AttachThreadInput( OtherThreadID, MyThreadID, True);
       except
       end;


но кроме операций с самим окно ничего не получилось. В чем я не прав?


 
ai   (2004-02-12 09:46) [1]

уточнение:
Msg.wParam, Msg.lParam в 1-м примере - из перехваченного сообщения WM_KEYDOWN


 
Ricko ©   (2004-02-12 11:20) [2]

Попробуй это:
FHWND:=GetWindow(FHWND, GW_CHILD);


 
AKul ©   (2004-02-12 12:07) [3]


> ai   (12.02.04 07:59)  


1. Необходимо передавать сообщения не родительскому окну Notepad"а, а его окну, отвечающему за ввод (дочернему окну класса Edit).
2. Вместо WM_KEYDOWN передавайте сообщение WM_CHAR; WM_SETFOCUS передавать не нужно.


> сделать мою программу "прозрачной" для нажатий клавишь для
> другого приложения

Чтобы перехватить нажатие клавиш в другом приложении придется ставить Hook.


 
ai   (2004-02-13 08:18) [4]

> AKul
может я неоднозначно выразился. фраза сделать мою программу "прозрачной" для нажатий клавишь для
другого приложения
означает, что есть какое-то приложение, которое может реагировать на "горячие" клавиши, когда оно в фокусе, и я хочу, чтобы когда мое приложение было в фокусе не мешало тому воспринимать коды нажатия клавиатуры. Есть 2 проблемы. Первая в том, что то приложение, пожоже, просто перехватывает нажатия клавиатуры, а не регистрирует "горячие" клавиши в Windows. Вторая проблема - приложение стороннего производителя и я не могу поставить в нем хук.


 
AKul ©   (2004-02-13 10:52) [5]


> ai   (13.02.04 08:18) [4]

Вы должны посылать сообщение WM_KEYDOWM или WM_CHAR (зависит от того, какое именно обрабатывается) именно тому окну, оконная процедура которого отвечает за обработку этих "горячих" клавиш. Посмотрите все окна этого приложения, например, с помощью Microsoft Spy++.


> приложение, пожоже, просто перехватывает нажатия клавиатуры,
> а не регистрирует "горячие" клавиши в Windows

Может приложение просто ставит "горячие" клавиши когда оно активно, и отменяет их, когда теряет фокус.
Если это так, то попробуйте перехватить вызов API-функции UnregisterHotKey (просто не передавайте ей управление) при потере фокуса этого приложения.
А может стоит попробовать передавать сообщение WM_HOTKEY?
Может эти "горячие" клавиши оссоциированы с какими-нибудь кнопками или меню, то можно нажимать программно последние (передавать BM_CLICK и подобные).
Это, конечно, если Вас интересуют только "горячие" клавиши.

А если приложение при обработке "горячих" клавиш делает проверку на свою активность? Тогда придется при каждом нажатии на клавишу в Вашем приложении, активизировать другое и передавать нажатые клавиши (кстати, если приложение, для которого нужно "програмно" нажать клавишу, имеет фокус ввода в данный момент, то можно воспользоваться функцией keybd_event), после чего отбирать у него фокус. Но такое "мерцание" вряд ли кому-то понравится. Можно попробовать держать это приложение всегда активным (при работе Вашего приложения), но как-нибудь его спрятать, например, сделать очень маленьким или установить за пределами экрана, а с помощью Hook"а (поставленного из Вашего приложения) перехватывать нажатие клавиш в этом приложении и отображать/обрабатывать их в своем.


 
ai   (2004-02-13 14:44) [6]

> AKul
очень интересное предложение в последнем предложении (вот, елки, тафтология то). Большое спасибо за идею, попробую.



Страницы: 1 вся ветка

Текущий архив: 2004.04.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.055 c
1-1080629977
Gaval
2004-03-30 10:59
2004.04.18
Файлы


3-1080027055
Игорь
2004-03-23 10:30
2004.04.18
Хелп! Срочно .. вопрос по XML и БД (+)


6-1076419762
Prankster
2004-02-10 16:29
2004.04.18
Отправка почты


14-1079972900
Обитатель
2004-03-22 19:28
2004.04.18
Что с моей виндой-2000 ?


14-1079863601
Goida
2004-03-21 13:06
2004.04.18
Глюки, глюки, глюки!!!! Форум не обновляется!..