|
| |

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 |  |
 | 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 |
  |
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Neu! sevCommand 4.0 
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere Infos
|