Форум: "WinAPI";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
ВнизПрограммное "нажатие" клавиши в другом приложении Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.032 c