Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: HotKeys - как это? Добавлено: 14.02.05 09:50  

Автор вопроса:  RomaVis | ICQ: 266287351 
Вот хочу зделать прогу, в которой будут ХотКейс. НО они должны работать даже когда окно формы проги будет свернуто, кароче клавиши должны быть ГЛОБАЛЬНЫМИ - как это зделать?

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #1
Добавлено: 14.02.05 12:02
Попробуй API RegisterHotKey.

Ответить

Номер ответа: 2
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #2
Добавлено: 14.02.05 17:02
Или сделай неприодалимое усилие и зайди в примеры :))

Ответить

Номер ответа: 3
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: 123
 Профиль | | #7
Добавлено: 16.02.05 11:39
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer


пользуюсь ей, все работает. а вот отрывок из SendKeys:

  If (GetAsyncKeyState(vbKeyScrollLock) = -32768) Then
        SendKeys (txtMacro.Text)
        Sleep 25
        Exit Sub
    End If


ну, SendKeys нам не надо, так что можно выразить это дело так:

If (GetAsyncKeyState(vbKeyF) = -32768) Then
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

LIBRARY KeyboardHook
EXPORTS
KeyboardProc
InstallHook
UninstallHook


Build_Hook.bat

@echo off
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]

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам