Страница: 1 |
Страница: 1 |
Вопрос: HotKeys - как это?
Добавлено: 14.02.05 09:50
Автор вопроса: RomaVis | ICQ: 266287351
Вот хочу зделать прогу, в которой будут ХотКейс. НО они должны работать даже когда окно формы проги будет свернуто, кароче клавиши должны быть ГЛОБАЛЬНЫМИ - как это зделать?
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #1
Добавлено: 14.02.05 12:02
Попробуй API RegisterHotKey.
Номер ответа: 2
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #2
Добавлено: 14.02.05 17:02
Или сделай неприодалимое усилие и зайди в примеры )
Номер ответа: 3
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #3
Добавлено: 14.02.05 18:34
Ага, именно неприодалимое
Номер ответа: 4
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #4
Добавлено: 15.02.05 13:12
Есть апиха такая - GetKeyState. Ее юзай.
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Номер ответа: 5
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #5
Добавлено: 15.02.05 17:38
Это не то что плохой способ это способ отвратный, не юзай его! Тут тебе и ложное срабатывание будет и несрабатывание и вообще компот получишь
Номер ответа: 6
Автор ответа:
RomaVis
ICQ: 266287351
Вопросов: 31
Ответов: 147
Профиль | | #6
Добавлено: 16.02.05 08:42
2Страшный Сон
Ты чо, а если надо например Ctrl+F то как получить Ctrl ???
А Sne прав я её пробовал (GetKeyState) так она какието -234 выдает, потом 44 так если скажите как её юзать хорошо - буду пользовать, а ели нет - небуду
Номер ответа: 7
Автор ответа:
someone
Вопросов: 215
Ответов: 1596
Web-сайт:
Профиль | | #7
Добавлено: 16.02.05 11:39
пользуюсь ей, все работает. а вот отрывок из SendKeys:
SendKeys (txtMacro.Text)
Sleep 25
Exit Sub
End If
ну, SendKeys нам не надо, так что можно выразить это дело так:
MsgBox "Нажaта клавиша F"
End If
попробуй сделать такое: используй константы vbShiftMask, vbCtrlMask и vbAltMask. можно это вместить к vbKeyF
сам не пробовал.
Номер ответа: 8
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #8
Добавлено: 16.02.05 18:24
Функция GetKeyState возвращает отрицательное число, если клавиша нажата. Позволяет отслеживать нажатия всех клавиш на клавиатуре и всех по меньшей мере пяти кнопок мыши. Я ее юзаю, пашет нормально. Сочетания клавиш тоже ловит.
Номер ответа: 9
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #9
Добавлено: 19.02.05 01:54
Лучше хук поставить на комбинацию клавишь.
Я уже пытался выставить исходники ассемблерной ф-ции на хук, результат -
письмо не дошло
KeyboardHook.asm
******************
;* KeyboardHook
*
;*
*
;***************************************************************************
************
;* Auteur : Papaow *
;* *
;*
*
;* ml /c /coff /Cp KeyboardHook.asm
*
;* link /SECTION:.bss,S /DLL /DEF:KeyboardHook.def /SUBSYSTEM:WINDOWS
KeyboardHook.obj *
;***************************************************************************
************
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
;===========================================================================
================
.const
WM_KEYBOARDHOOK equ WM_USER+6
;===========================================================================
================
.data
hInstance dd 0
;===========================================================================
================
.data?
hHook dd ?
hWnd dd ?
CtrlKey db ?
;===========================================================================
================
.code
;---------------------------
;## Chargement de la DLL. ##
;## ##
;## Arguments : aucun ##
;## ##
;## Retour : EAX==1 ##
;---------------------------
DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD
push hInst
pop hInstance
mov eax,TRUE
ret
DllEntry Endp
;===========================================================================
================
;-------------------------------
;## Hook sur [Ctrl]+[T] ##
;## ##
;## Arguments : aucun ##
;## ##
;## Retour : PostMessage ##
;-------------------------------
KeyboardProc proc nCode:DWORD,wParam:DWORD,lParam:DWORD
invoke CallNextHookEx,hHook,nCode,wParam,lParam
mov eax, lParam
and eax, 80000000h ; test du premiers bits.
.if eax==NULL ; touche enfoncйй.
.if wParam==VK_CONTROL
mov BYTE PTR [CtrlKey], 1
.endif
.endif
mov eax, lParam
and eax, 80000000h
.if eax==80000000h ; touche relachйe.
.if wParam==VK_CONTROL
mov BYTE PTR [CtrlKey], 0
.endif
.endif
mov eax, lParam
and eax, 0C0000000h
.if eax==NULL ; touche enfoncйй et pas de rйpйtition
.if wParam==VK_T
.if byte ptr [CtrlKey]==1
invoke PostMessage,hWnd,WM_KEYBOARDHOOK ,wParam,BYTE PTR [CtrlKey]
.endif
.endif
.endif
xor eax, eax
ret
KeyboardProc endp
;===========================================================================
================
;----------------------------------
;## Installation du Keyboardhook ##
;## ##
;## Arguments : aucun ##
;## ##
;## Retour : aucun ##
;----------------------------------
InstallHook proc hwnd:DWORD
push hwnd
pop hWnd
invoke SetWindowsHookEx,WH_KEYBOARD,addr KeyboardProc,hInstance,NULL
mov hHook,eax
ret
InstallHook endp
;===========================================================================
================
;-------------------------------------
;## Dйsinstallation du Keyboardhook ##
;## ##
;## Arguments : aucun ##
;## ##
;## Retour : aucun ##
;-------------------------------------
UninstallHook proc
invoke UnhookWindowsHookEx,hHook
ret
UninstallHook endp
End DllEntry
KeyboardHook.def
EXPORTS
KeyboardProc
InstallHook
UninstallHook
Build_Hook.bat
ml.exe /c /coff /Cp KeyboardHook.asm
link.exe /SECTION:.bss,S /DLL /DEF:KeyboardHook.def /SUBSYSTEM:WINDOWS
KeyboardHook.obj
del KeyboardHook.obj
del KeyboardHook.exp
[OFFTOP]GetKeyState возвращает силу нажатия/отжатия клавиши [/OFFTOP]