Главная страница
    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.068 c
1-1080910101
Zeon
2004-04-02 16:48
2004.04.18
Очистка памяти


1-1080879933
russko
2004-04-02 08:25
2004.04.18
Сворачивание главной формы


1-1080945586
KyRo
2004-04-03 02:39
2004.04.18
Как узнать имена файлов ?


7-1076655802
Diska
2004-02-13 10:03
2004.04.18
Железо


3-1079686617
_Andy_
2004-03-19 11:56
2004.04.18
Datamodule





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский