Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.059 c
4-1076677030
Chery
2004-02-13 15:57
2004.04.18
Как запустить одно приложение из другого? (да, ламерство...)


7-1076492192
Ермак
2004-02-11 12:36
2004.04.18
SECURITY ATTRIBUTES


7-1076171882
nester
2004-02-07 19:38
2004.04.18
Как добавить задание в Планировщик(он же Scheduler)


1-1080448960
AmazedDexter
2004-03-28 08:42
2004.04.18
Вставка рисунка


9-1063033980
Norlin
2003-09-08 19:13
2004.04.18
Как работать с векторами?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский