vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 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

Fortgeschrittene Programmierung
MSComm => "Overrun Error" 
Autor: Wöllmi
Datum: 15.05.06 19:12

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

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
MSComm => "Overrun Error"779Wöllmi15.05.06 19:12
Re: MSComm => "Overrun Error"446Wöllmi16.05.06 20:17

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