Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Горячие клавиши Добавлено: 06.10.03 19:11  

Автор вопроса:  CyRax  | Web-сайт: basicproduction.nm.ru | ICQ: 204447456 

Подскажите как сделать так, что моя прога ловила например Ctrl+G в любое время в любом окне.

Только имя функции не пишите. Если можно пример

Ответить

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

Номер ответа: 1
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #1 Добавлено: 06.10.03 19:41
Мыло какое? У меня есть кое-что.

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #2
Добавлено: 06.10.03 21:48

Хм, странно что мое мыло исчезло из профиля. :(

cyraxua@hotmail.com

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 07.10.03 01:33

Эх вы люди, что-ж вы только для себя, нужно что-б для всех, и для тех у кого нет мыла ;)

Вот специально для них-то и кидаю это чудо... Разбираться вот только самим придется, скажу только что это все в модуле должно быть...

' ----------------------------------------------------------------

Option Explicit

Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long

Private Declare Function GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" (ByVal lParam As Long, ByVal lpBuffer As String, ByVal nSize As Long) As Long

Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal VK As Long) As Long

Private Declare Function UnregisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long) As Long

Private Declare Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" (ByVal lpString As String) As Integer

Private Declare Function GlobalDeleteAtom Lib "kernel32" (ByVal nAtom As Integer) As Integer

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Const GWL_WNDPROC As Long = -4

Public Enum gbHotKeyModifiers

MOD_ALT = &H1

MOD_CONTROL = &H2

MOD_SHIFT = &H4

MOD_WIN = &H8

End Enum

Public Type gbHWHotKeys

VK As Integer

Shift As gbHotKeyModifiers

id As Long

End Type

Private Const WM_HOTKEY = &H312

Public Const cNone As String = "???"

Private OldWndProc2 As Long, hi As Long

Private Function HotKeyWindowProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

On Error Resume Next

HotKeyWindowProc = CallWindowProc(OldWndProc2, hWnd, uMsg, wParam, lParam)

If OldWndProc2 = &H0 Then Exit Function

If uMsg = WM_HOTKEY Then

If IsFrmLoaded("frmOptions") Then Exit Function

For hi = 0 To UBound(HotKeys)

If LoWord(wParam) = HotKeys(hi).id Then

If HiWord(lParam) = HotKeys(hi).VK And LoWord(lParam) = HotKeys(hi).Shift Then

Select Case hi

Case Is = 0: Call frmOptions.Show

Case Is = 1: frmStatistic.Visible = False: DoEvents: Call VBRasHangUp

Case Else

If hRasConn And dllSet.OneKeyDH Then

If frmStatistic.Label2(3).Caption = ConList(hi - 2) Then _

frmStatistic.Visible = False: _

DoEvents: _

Call VBRasHangUp: _

Exit Function

End If

Call frmStatistic.StartAnim(0)

Call VBRasDial(ConList(hi - 2))

frmStatistic.Label2(0).Caption = 1&

frmStatistic.Visible = dllSet.IsWinVis: Call frmStatistic.SetMeOnTop

End Select

Exit For

End If

End If

Next

End If

End Function

'??????????? ??????? ???????

Public Function RegHotKey(hWnd As Long, ByVal Modifiers As gbHotKeyModifiers, ByVal VirtKey As Integer) As Long

If OldWndProc2 = 0 Then OldWndProc2 = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf HotKeyWindowProc)

RegHotKey = GlobalAddAtom(CStr(Rnd)) '????? ID, ?????????? ?? ????????

If RegisterHotKey(hWnd, RegHotKey, Modifiers, VirtKey) = 0 Then RegHotKey = 0

End Function

'???????? ??????? ???????

Public Function UnRegHotKey(hWnd As Long, ByVal id As Integer, Optional UnSubCass As Boolean = False) As Boolean

If UnSubCass Then Call SetWindowLong(hWnd, GWL_WNDPROC, OldWndProc2): OldWndProc2 = 0

If UnregisterHotKey(hWnd, id) = 0 Then Exit Function '???????

Call GlobalDeleteAtom(id) '???????????

UnRegHotKey = True '???????

End Function

Public Function GetHotKeyText(ByVal VK As Integer, Shift As Integer) As String

Dim KeyName As String * 256

If Shift Then GetHotKeyText = Choose(Shift, "Shift", "Ctrl", "Shift + Ctrl", "Alt", "Shift + Alt", "Ctrl + Alt", "Shift + Ctrl + Alt") & " + "

If VK = 17 Or VK = 16 Or VK = 18 Then Exit Function

GetHotKeyText = GetHotKeyText & Left$(KeyName, GetKeyNameText(ByVal MapVirtualKey(VK, 0) * &H10000, KeyName, 255))

If Len(GetHotKeyText) = 0 Then GetHotKeyText = cNone

End Function

Public Function ReModif(ByVal inModif As Long) As Integer

On Error Resume Next

If inModif Then ReModif = Choose(inModif, &H4, &H2, &H6, &H1, &H5, &H3, &H7, &H8, &HC, &HA, &HE, &H9, &HD, &HB, &HF)

End Function

Private Function LoWord(DWord As Long) As Integer

LoWord = IIf(DWord And &H8000&, DWord Or &HFFFF0000, DWord And &HFFFF&)

End Function

Private Function HiWord(DWord As Long) As Integer

HiWord = (DWord And &HFFFF0000) \ &H10000

End Function

' ----------------------------------------------------------------

Конец мессаги :)

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #4
Добавлено: 07.10.03 01:35

Нда.... не красиво с комментами получилось, некрасиво :((( Ну да ладно, раздеретесь ;)

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #5
Добавлено: 07.10.03 01:52

Спасибо. Чёт многовато кода, а?

Тут много раз мелькала ф-я GetAsyncKeyState.

Мож через неё можно как?

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #6
Добавлено: 11.10.03 03:12

Да неет, я просто прямо из проги кусок кода взял. Так-то это все очень красиво получается! Только все это чудо в отдельный модуль поместить, и вызывать себе нужные для работы функции.

А вот на счет той функуии, это совсем не то! Это самый не разумный способ подражания горячим клавишам. Это даже на отдельный способ не тянет :(

Но если так хочется пойти другим путем, можно еще использовать SetWindowsHookEx, используется в клавиатурных шпионах, но этот способ связан с определенными трудностями :(

Ответить

Страница: 1 |

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



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