vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Warum stürzt das Ding ab? 
Autor: Timo
Datum: 22.03.02 19:08

Hi,

ich habe einen netten Code gefunden, mit dem ich Hotkeys systemweit abfangen kann. Leider stürzt mir das Programm beim zweiten Aufruf immer wieder ab. Kann mir einer sagen woran das liegen kann?
Ist ein wenig viel Code, aber besser gleich alles, bevor wieder irgendwelche Fragen kommen.
An sich ist der Code recht gut, aber leider kann ich ihn nicht ein zweites Mal aufrufen und das würde ich gerne, da ich mir schon extra ein Formular geschrieben habe, welches es mir ermöglicht andere Tastenkombinationen auszuwählen und es klappt auch nur ich dann wieder "StartHotKey" aufrufe, stürzt es ab und die neuen Tasten sind erst wieder beim nächsten Aufruf verfügbar.

Also es geht los:
Option Explicit

Private Declare Function RegisterHotkey Lib "user32" Alias "RegisterHotKey" (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 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 WM_HOTKEY = &H312
Private Const GWL_WNDPROC = -4

Private Const ErrMsg = "Hotkey kann nicht registriert werden !"

'Strg
Private Const MOD_STRG = &H2
'Shift
Private Const MOD_SHIFT = &H4
'Alt
Private Const MOD_ALT = &H1

Private glWinRet As Long

Private Function CallbackMsgs(ByVal wHwnd As Long, ByVal wMsg As Long, ByVal wp_id As Long, ByVal lp_id As Long) As Long
If wMsg = WM_HOTKEY Then
Call Start(wp_id)
CallbackMsgs = 1
Exit Function
End If
CallbackMsgs = CallWindowProc(glWinRet, wHwnd, wMsg, wp_id, lp_id)
End Function

'
'Diese Routine wird gestartet,
'wenn ein Hotkey aktiviert wird
'
Private Sub Start(ByVal vKeyID As Byte)
Form1.Show
Select Case vKeyID
Case 0:
MsgBox "STRG + ALT + A"
Case 1:
MsgBox "STRG + SHIFT + A"
Case 2:
MsgBox "ALT + SHIFT + A"
Case 3:
MsgBox "Strg + A"
Case 4:
MsgBox "Hallo"
End Select
End Sub

'
'Registrieren der Hotkeys
'
Public Sub StartHotkey()
Dim retval As Long
With frmTempHotkey

'1. Hotkey
UnregisterHotKey frmTempHotkey.hWnd, 0
retval = RegisterHotkey(.hWnd, 2, MOD_STRG + MOD_ALT, Asc("A"))
If retval = 0 Then MsgBox ErrMsg

'2. Hotkey
UnregisterHotKey frmTempHotkey.hWnd, 1
retval = RegisterHotkey(.hWnd, 1, MOD_STRG + MOD_SHIFT, Asc("A"))
If retval = 0 Then MsgBox ErrMsg

'3. Hotkey
UnregisterHotKey frmTempHotkey.hWnd, 2
retval = RegisterHotkey(.hWnd, 0, MOD_ALT + MOD_SHIFT, Asc("A"))
If retval = 0 Then MsgBox ErrMsg

'4.Hotkey
UnregisterHotKey frmTempHotkey.hWnd, 3
retval = RegisterHotkey(.hWnd, 3, MOD_STRG, Asc("A"))
If retval = 0 Then MsgBox ErrMsg

'5.Hotkey
UnregisterHotKey frmTempHotkey.hWnd, 4
retval = RegisterHotkey(.hWnd, 4, MOD_ALT, Asc("A"))
If retval = 0 Then MsgBox ErrMsg

glWinRet = SetWindowLong(.hWnd, GWL_WNDPROC, AddressOf CallbackMsgs)
.Visible = False
.Hide
End With
End Sub


frmTempHotKey enthält nur:
Private Sub Form_Unload(Cancel As Integer)
Call EndHotkey
End Sub


Kann ich das nicht auch irgendwie ohne dieses Formular hinbiegen?

Vielen Dank schonmal im voraus, falls hier einer durchsteigt.

Gruss
Timo
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Warum stürzt das Ding ab?57Timo22.03.02 19:08
Re: Warum stürzt das Ding ab?221unbekannt22.03.02 19:26

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel