|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 28, 2004 16:08:08 Использую сабжевую функцию для определения нажатых CTRL, SHIFT, ALT, WIN, точнее LCTRL, RCTRL ну и так далее. В MSDN написано, что достаточно использовать VK_RCONTROL например и это работает в Хр, но НЕ работает в 98 и 95!!! хотя в документации про это ни слова... В чем же на самом деле дело? Неточность в MSDN или другая бяка? Подскажите, плиз как это исправить? Ну или хотябы почему так? |
|
|
Дата: Июл 28, 2004 17:14:15 Покажи код. |
|
|
Дата: Июл 28, 2004 19:32:33 ; SendHotKey ================================= SendHotKey proc VK:dword, flag:dword ; return TRUE = processed or FALSE = not invoke GetKeyboardState,addr bKeybState xor ecx,ecx .if bKeybState[VK_LCONTROL] & 80h ; verify the highest bit only (if 1 - key pressed) or ecx,VKM_LCONTROL .endif .if bKeybState[VK_LSHIFT] & 80h or ecx,VKM_LSHIFT .endif .if bKeybState[VK_LMENU] & 80h ; LEFT ALT or ecx,VKM_LALT .endif .if bKeybState[VK_LWIN] & 80h or ecx,VKM_LWIN .endif .if bKeybState[VK_RCONTROL] & 80h or ecx,VKM_RCONTROL .endif .if bKeybState[VK_RSHIFT] & 80h or ecx,VKM_RSHIFT .endif .if bKeybState[VK_RMENU] & 80h ; RIGHT ALT or ecx,VKM_RALT .endif .if bKeybState[VK_RWIN] & 80h or ecx,VKM_RWIN .endif mov edx,VK ; eax or edx,ecx ; now edx has VK_KEY,Scancode & CTRL,SHIFT,ALT,WIN keys status .if dl == VK_LCONTROL || dl == VK_LSHIFT || dl == VK_LMENU || dl == VK_LWIN || \ dl == VK_RCONTROL || dl == VK_RSHIFT || dl == VK_RMENU || dl == VK_RWIN || \ dl == VK_CONTROL || dl == VK_SHIFT || dl == VK_MENU xor dl,dl ; 0 - skip modifiers .endif invoke SendMessage,hMainWnd,HKM_KBDHOOK,edx,flag .if !eax ; verify window handle invoke FindWindow,addr szMainClass,NULL mov hMainWnd,eax .endif ret SendHotKey endp VKM_.... - собственные константы |
|
|
Дата: Июл 28, 2004 22:11:02 lazari Я спутал твою функцию с GetKeyState, после которой часто пытаются проверять DWORD хотя функция возвращает SHORT, распространенная ошибка, кстати у Iczelion'а тоже присутствует эта ошибка в одном из туторов :-) Про GetKeyboardState ничего сказать не могу, ибо не применял никогда. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.037 |