Alles zum Thema Windows Clients für den Desktop: Windows 95 / 98 / NT / 2000 / XP / Vista / Win 7 — Q & A zu den Windows Client Versionen sowie Windows Media Center / Windows Home Server
ich haben ein Programm was Fehlermeldungen ausgibt, welche auf dem Monitor angezeigt werden.
Bisher ist es so, das der Montior 24/7 an ist, und daher die Meldung zu lesen ist. Allerdings ist die lebens dauer der Monitore dann realtiv knapp.
Daher möchte ich die Monitore in den Standby gehen lassen und wecken wenn ein Fehlerauftritt. Dies geht natürlich per Tastendruck oder Mausbewegung, aber nicht aus einem Programm.
Nun ist die Frage, wie kann ich den Standby Modus vom Monitor beenden damit die Fehlermeldung sichtbar wird.
z.B. ein Minitool starten welches ein Hardwareerreignis auslöst oder per DDI ?
Hallo Dustin781,
kann dein Programm bei der Anzeige einer auch einen Programm starten?!
Falls ja, müsstest du dir ja nur eine Batch oder halt ein ausführbares Programm erstellen, welches einen Tastendruck "simuliert".
Am einfachsten wäre ein "Druck" auf die "Shift-Taste", damit keine Veränderungen am System vorgenommen werden, aber trotzdem der Monitor wieder "leuchtet".
natürlich kann das programm etwas aufrufen, das ist kein Problem.
Allerdings, egal wie ich den Tastendruck auslöse, ob Batch, AutoIT oder sonst was, es bleibt ein virtueller Tastendruck welcher nicht reicht um den Monitor zu wecken.
Ich denke man muss ein richtiges Hardwareereignis erzeugen.
form1.vb:
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Monitor.SetMonitorState("on", Me.Handle)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Monitor.SetMonitorState("off", Me.Handle)
Me.Close()
End Sub
End Class
Code:
class1.vb:
Imports System.Runtime.InteropServices
Public Class Monitor
<DllImport("user32.dll", EntryPoint:="SendMessageA")> _
Private Shared Sub SendMessage( _
ByVal hWnd As IntPtr, _
ByVal uMsg As Int32, _
ByVal wParam As Int32, _
ByVal lParam As Int32)
End Sub
Private Enum Params As Int32
SC_MONITORPOWER = &HF170
WM_SYSCOMMAND = &H112
TURN_MONITOR_OFF = 2
TURN_MONITOR_ON = -1
End Enum
Public Shared Sub SetMonitorState(ByVal Index As String, ByVal Handle As IntPtr)
Select Case Index
Case "off"
SendMessage(Handle, Params.WM_SYSCOMMAND, Params.SC_MONITORPOWER, _
Params.TURN_MONITOR_OFF)
Case "on"
SendMessage(Handle, Params.WM_SYSCOMMAND, Params.SC_MONITORPOWER, _
Params.TURN_MONITOR_ON)
End Select
End Sub
End Class