Hallo,
nach längerem Suchen möchte ich nun doch um Hilfe ersuchen.
(Den Code im Anschluß habe ich im WEB gefunden.)
In meiner Applikation verwende ich das MSComm Control für
die RS232 Kommunikation.
Ich muß verhindern, daß das Aktiv werden des Suspend-Mode oder
des Ruhezustandes die Schnittstelle "kappt".
Und genau dies ruft in meinem Fall diesen Fehler hervor. Da man
ja nicht einfach festlegen kann, das diese Funktionen nicht auf einem Laptop
oder PC verwendet werdendürfen.
Also habe ich mich auf die Suche gemacht und habe folgendes gefunden.
Prinzip: Einfach die Windows-Botschaft für dieses "Anliegen" erkennen und
verbieten.
Benötigte API-Fkt:
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd _
As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
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 Verwendete Variablen und Konstanten:
Public oldProcAddress As Long
Public Const BROADCAST_QUERY_DENY = &H424D5144
Public Const WM_POWER = &H48
Public Const WM_POWERBROADCAST = &H218
Public Const PWR_SUSPENDREQUEST = 1
Public Const GWL_WNDPROC = (-4)
Public Const PWR_FAIL = (-1)
Public Const PBT_APMQUERYSUSPEND As Long = &H0&
Public Const PBT_APMQUERYSTANDBY As Long = &H1& Funkton zur Messagemanipulation: (in einem Modul!)
Public Function VB_WindowProc(ByVal hWnd As Long, ByVal wMsg As Long, ByVal _
wParam As Long, ByVal lParam As Long) As Long
On Local Error Resume Next
Dim lRet As Long
If wMsg = WM_POWER And wParam = PWR_SUSPENDREQUEST Then
VB_WindowProc = PWR_FAIL
ElseIf wMsg = WM_POWERBROADCAST And wParam = PBT_APMQUERYSUSPEND Then
VB_WindowProc = BROADCAST_QUERY_DENY '//Anforderung ablehnen
ElseIf wMsg = WM_POWERBROADCAST And wParam = PBT_APMQUERYSTANDBY Then
VB_WindowProc = BROADCAST_QUERY_DENY '//Anforderung ablehnen
Else
VB_WindowProc = CallWindowProc(oldProcAddress, hWnd, wMsg, wParam, _
lParam)
End If
End Function Einbindung in mein Programm:
'//[Form_Load]
oldProcAddress = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf VB_WindowProc) '//[Form_Unload]
Call SetWindowLong(Me.hWnd, GWL_WNDPROC, oldProcAddress) Auf einem Laptop, der nur auf Batterie läuft, schien alles zu funktionieren. Mit
angeschlossenem Netzkabel (Steckdose) trat der Fehler erneut auf.
Hat jemand evtl. schon mal mit der gleichen Problematik zu tun gehabt?
Tschaui
Woellmi  |