Hook - убивает IDE

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Hook - убивает IDE

Сообщение Джеффи » 04.05.2005 (Ср) 0:52

Ситуация такая есть некий код хука:
Код: Выделить всё
'in module
Option Explicit

Public Const WH_KEYBOARD = 2
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function GetActiveWindow Lib "user32" () As Long
Public hHook As Long

Public Function KeyboardProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    'if idHook is less than zero, no further processing is required
    If idHook < 0 Then
        'call the next hook
        KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
    Else
        'If GetActiveWindow = Form1.hWnd Then
            Select Case wParam
            frmmain.print wParam
            'Case vbKeyUp
            '    Beep
            'End Select
        'End If
        'call the next hook
        KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
    End If
End Function

'in form
Option Explicit

Private Sub Form_Load()
    'KPD-Team 2000
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    'set a keyboard hook
    hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, App.hInstance, App.ThreadID)
End Sub
Private Sub Form_Unload(Cancel As Integer)
    'remove the windows-hook
    UnhookWindowsHookEx hHook
End Sub

Если нажать на любую кнопку при работе программы, IDE байзика просто берёт и закрывается, как обойти эту проблему?

Alex Mals
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 11.12.2004 (Сб) 18:09

Сообщение Alex Mals » 04.05.2005 (Ср) 3:37

Select Case wParam
frmmain.print wParam
'Case vbKeyUp
' Beep
'End Select

А Ctrl+F5 показал бы где косяк.
На взгляд, в последней указанной строке.

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 04.05.2005 (Ср) 7:13

:oops: Ой... Скорее не так вот так:
Код: Выделить всё
'Select Case wParam
frmmain.print wParam
'Case vbKeyUp
' Beep
'End Select

но всёравно не в этом дело... :roll:

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 04.05.2005 (Ср) 8:47

Косяк в том, что ты ОСТАНАВЛИВАШЬ проект, а не выходишь из приложения!

Если интересует почему, спроси у SERG, он это лучше объяснит.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 04.05.2005 (Ср) 9:02

Если же спрашивать не хочешь, то просто запомни -- хук и отладка вещи несовместимые :) Отключай хук и ищи баги.
Lasciate ogni speranza, voi ch'entrate.

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 04.05.2005 (Ср) 15:36

Спасибо уяснил :wink:


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Yandex-бот и гости: 114

    TopList