Пишу программу которая меняет символы с английского на русский,если пишешь и забыл сменить раскладку клавиатуры...Ну что то типо punto switchera или как то так называется=).Все это делаю через глобальные хуки,ставя хук на WH_GETMESSAGE вот далбше работаю с буфером через OpenClipboard() и так далее=).Возникли трудности что когда я инсталю хук,перестает менятся раскладка клавиатуры...Как это можно исправить?Или мне прийдется написать в своей библиотеке свой обработчик SHIFT+ALT?Пробывал написать обработчик,определял через GetKeyState() нажаты ли клавиши,но проблема в том что когда повторно нажимаешь ALT+SHIFT кнопки считаются не нажатыми...Если кто дочитал до конца помогите пожалуйста...
хм... грубо говоря... модель... после перехвата необходимо вызвать оригинал функции из функции перехватчика, чтобы отработались оконные сообщения... я правда делал подобное сплайсингом GetMessage и PeekMessage, но суть наверное такая же... ты это делаешь? а программно раскладку клавиатуры можно было переключать с помощью ActivateKeyboardLayout, если ничего не путаю...
Ты имеешь ввиду вызвать CallNextHookEX?Я его вызываю...Блин у меня ваще при перехвате WM_GETMESSAGE и обработки WM_CHAR почему то перестает менятся раскладка клавиатуры...Даже если я при обработке WM_CHAR вызываю обычный MessageBox()...Может это не в программе проблема?
вообще попробуй в своем обработчике, когда приходит WM_CHAR, смотреть 29ый байт lParam... попробуй нажать альт+шифт... посмотри, приходит ли в этом байте 1, или нет... а вообще выложи код своего обработчика для WM_GETMESSAGE...
DWORD KeyBoardProc(int code,WPARAM wParam,LPARAM lParam) { if(code>=0) { MSG *msg=(MSG*)lParam; if(msg->message==WM_CHAR) { MessageBoxA(0,0,0,0); } } else return CallNextHookEx(hHook,code,wParam,lParam); } ну вот вобщем такой у меня обработкчик стоит...