Отловить нажатие клавиш в Windows

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

3eJIeHb
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 13
Зарегистрирован: 04.05.2008 (Вс) 9:01

Отловить нажатие клавиш в Windows

Сообщение 3eJIeHb » 24.09.2008 (Ср) 21:35

Вообщем необходимо отловить нажатие клавишь в Windows и выполнить необходимое действие, когда программа свернута или окно программы неактивно.

Например необходимо отловить нажатие клавиши Ю и выдать сообщение, что нажата клавиша "Ю"

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Отловить нажатие клавиш в Windows

Сообщение Viper » 25.09.2008 (Чт) 7:23

3eJIeHb, хочешь сказать, что ты воспользовался поиском и не нашел ответа на этот вопрос? Не верю!
Весь мир матрица, а мы в нем потоки байтов!

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Отловить нажатие клавиш в Windows

Сообщение Debugger » 25.09.2008 (Чт) 9:29

Код: Выделить всё
Public Declare Function GetKeyboardState Lib "user32" Alias "GetKeyboardState" (pbKeyState As Byte) As Long

А так - да, эта тема обсуждалась тысячи раз.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Отловить нажатие клавиш в Windows

Сообщение ANDLL » 25.09.2008 (Чт) 10:10

Debugger писал(а):
Код: Выделить всё
Public Declare Function GetKeyboardState Lib "user32" Alias "GetKeyboardState" (pbKeyState As Byte) As Long

А так - да, эта тема обсуждалась тысячи раз.
Дык, если она обсуждалась столько раз, то зачем ты постиш это?
GetAsyncKeyState, а не GetKeyboardState
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Отловить нажатие клавиш в Windows

Сообщение Williams » 25.09.2008 (Чт) 13:29

3eJIeHb писал(а):Вообщем необходимо отловить нажатие клавишь в Windows и выполнить необходимое действие, когда программа свернута или окно программы неактивно.

Например необходимо отловить нажатие клавиши Ю и выдать сообщение, что нажата клавиша "Ю"


А в файл тебе это нажатие, случайно сбрасывать не надо, а потом отсылать на сервер? :)

Может я маньяк, но мне кажется что GetAsyncKeyState в 99.99% случаев - это хулиганство.
И вы думаете, что вас оставят в живых после прочтения этого поста?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Отловить нажатие клавиш в Windows

Сообщение Денис » 25.09.2008 (Чт) 15:28

Williams писал(а):Может я маньяк, но мне кажется что GetAsyncKeyState в 99.99% случаев - это хулиганство.

Какая разница с какой целью он что-либо изучает. В любом случае, он уже засветился и если надо, его проверят.
Всё, не флудим.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

3eJIeHb
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 13
Зарегистрирован: 04.05.2008 (Вс) 9:01

Re: Отловить нажатие клавиш в Windows

Сообщение 3eJIeHb » 26.09.2008 (Пт) 15:06

Williams писал(а):
3eJIeHb писал(а):Вообщем необходимо отловить нажатие клавишь в Windows и выполнить необходимое действие, когда программа свернута или окно программы неактивно.

Например необходимо отловить нажатие клавиши Ю и выдать сообщение, что нажата клавиша "Ю"


А в файл тебе это нажатие, случайно сбрасывать не надо, а потом отсылать на сервер? :)

Может я маньяк, но мне кажется что GetAsyncKeyState в 99.99% случаев - это хулиганство.


А вот ли тебе не пофиг для чего я это использую?
Мне необходимо выловить нажатие клавишь Ctrl + C для сравения его со ссылкой.
Сравнивать значения из буфера было не очень охото. Думаю так проблема решится гораздо качественней.

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Отловить нажатие клавиш в Windows

Сообщение Joo » 26.09.2008 (Пт) 16:14

3eJIeHb писал(а):А вот ли тебе не пофиг для чего я это использую?
Мне необходимо выловить нажатие клавишь Ctrl + C для сравения его со ссылкой.
Сравнивать значения из буфера было не очень охото. Думаю так проблема решится гораздо качественней.

А если было нажато Ctrl+Ins ??? Или скопировали из меню? Тут надо следить за буфером, а не за клавишами....
Кейлогер пишет блин....
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Отловить нажатие клавиш в Windows

Сообщение Viper » 26.09.2008 (Пт) 18:30

Такс... Или автор объясняет нам, что же он пишет, или одно из двух. А то возникает две версии - что автор пытается сделать некое действо X, но почему-то через Y, либо таки да... кейлоггер.
Весь мир матрица, а мы в нем потоки байтов!

3eJIeHb
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 13
Зарегистрирован: 04.05.2008 (Вс) 9:01

Re: Отловить нажатие клавиш в Windows

Сообщение 3eJIeHb » 27.09.2008 (Сб) 9:16

Люди, вы? Я вас не понимаю. Вы в каждом человеке видите хакера? Или только во мне?

Я делал через таймер проверку буфера. Я думал, что это будет очень ресурсоемко, но с отловом клавиш, получается примерно то же, т.к. его тоже в таймер надо ставить. Не все люди хареры! Есть и мирные жители.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Отловить нажатие клавиш в Windows

Сообщение Viper » 27.09.2008 (Сб) 10:59

Значит таки X через Y.
Весь мир матрица, а мы в нем потоки байтов!

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Re: Отловить нажатие клавиш в Windows

Сообщение Atoman » 27.09.2008 (Сб) 14:20

3eJIeHb
Я бы вместо проверки через таймер, отлавливал сообщение WM_DRAWCLIPBOARD

3eJIeHb
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 13
Зарегистрирован: 04.05.2008 (Вс) 9:01

Re: Отловить нажатие клавиш в Windows

Сообщение 3eJIeHb » 27.09.2008 (Сб) 15:29

Atoman, +1 щас погуглим :)

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Re: Отловить нажатие клавиш в Windows

Сообщение Atoman » 27.09.2008 (Сб) 16:47

Вот доложно работать.
Код: Выделить всё
Public Class RichEditBox
   Inherits System.Windows.Forms.RichTextBox
   
    <DllImport("User32.dll")> _
    Private Shared Function SetClipboardViewer(ByVal hWndNewViewer As IntPtr) As IntPtr
    End Function

    <DllImport("User32.dll")> _
    Private Shared Function ChangeClipboardChain(ByVal hWndRemove As IntPtr, ByVal hWndNewNext As IntPtr) As Boolean
    End Function

    <DllImport("user32.dll")> _
    Private Shared Function SendMessage(ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
    End Function

    Private Const WM_DRAWCLIPBOARD As Integer = &H308
    Private Const WM_CHANGECBCHAIN As Integer = &H30D

    Public Event ChangeClipboard As EventHandler
   
    Private nextClipboardViewer As IntPtr = IntPtr.Zero
   
    Protected Overrides Sub OnHandleCreated(ByVal e As System.EventArgs)
        MyBase.OnHandleCreated(e)
        Me.nextClipboardViewer = SetClipboardViewer(Me.Handle)
    End Sub

    Protected Overrides Sub OnHandleDestroyed(ByVal e As System.EventArgs)
        ChangeClipboardChain(Me.Handle, Me.nextClipboardViewer)
        MyBase.OnHandleDestroyed(e)
    End Sub

   Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
      Select Case m.Msg
            Case WM_DRAWCLIPBOARD
                RaiseEvent ChangeClipboard(Me, New EventArgs)
                SendMessage(Me.nextClipboardViewer, m.Msg, m.WParam, m.LParam)
            Case WM_CHANGECBCHAIN
                If Me.nextClipboardViewer.Equals(m.WParam) Then
                    Me.nextClipboardViewer = m.LParam
                Else
                    SendMessage(Me.nextClipboardViewer, m.Msg, m.WParam, m.LParam)
                End If
            Case Else
                MyBase.WndProc(m)
        End Select
    End Sub
End Class

3eJIeHb
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 13
Зарегистрирован: 04.05.2008 (Вс) 9:01

Re: Отловить нажатие клавиш в Windows

Сообщение 3eJIeHb » 28.09.2008 (Вс) 18:18

Atoman, Жуть!!! :shock:
Я до такого еще не дорос, но все-равно спасибо :shock:


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 45

    TopList