Monitor ausmachen per WPF?
- WPF
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von BasicSharpx3.
-
-
Definiere "ausschalten".
Soll der Bildschirm schwarz werden? Soll die Hintergrundbeleuchtung ausgeschaltet werden? Soll das komplette Gerät ausgeschaltet werden? Soll nur die Touch-Funktionalität deaktiviert werden, das Bild aber erhalten bleiben?
Um was für einen Monitor handelt es sich überhaupt? Externes Gerät? Wenn ja: welches Modell? Oder Laptop?
Und warum gehst Du davon aus, dass Du WPF dafür brauchst?"Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils -
-
Wenn dein Monitor nach dem "ausschalten" in deinem genannten Szenario noch auf die Touches reagiert und durch den PC wie bei MouseEvents wieder "eingeschaltet" wird, dann reicht ein SendMessage zum ausschalten
stackoverflow.com/questions/713498/turn-on-off-monitor
sonst wird das so wohl nicht realisierbar sein.And i think to myself... what a wonderfuL World!Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Eddy“ ()
-
-
Hööy habe dass gleiche Problem nur möchte ich ein Service drauß machen, dass er mir meine Tablets von 00:00 - 06:00 Uhr das Display ausschaltet und dann um 6e wieder einschaltet und in den Bildschirmschoner reingeht..
Code habe ich am PC funktionierts aber am Tablet nicht??..
VB.NET-Quellcode
- Private WM_SYSCOMMAND As Integer = &H112
- Private SC_MONITORPOWER As Integer = &HF170
- Private WM_SYSCOMMAND2 As Integer = &H112&
- Private SC_SCREENSAVE As Integer = &HF140&
- Private oTimer1 As Timer
- <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 Sub OnTimedEvent1(ByVal state As Object)
- Try
- Dim sUhrzeit As String = Date.Now.ToShortTimeString
- Select Case sUhrzeit
- Case "00:10"
- SendMessage(&HFFFF, WM_SYSCOMMAND, SC_MONITORPOWER, 2)
- Case "00:15" 'Test
- SendMessage(&HFFFF, WM_SYSCOMMAND, SC_MONITORPOWER, 1&)
- SendMessage(&HFFFF, WM_SYSCOMMAND2, SC_SCREENSAVE, 0&)
- End Select
- Catch ex As Exception
- File.Create(AppDomain.CurrentDomain.BaseDirectory + "FAIL")
- End Try
- End Sub
Wäre nett wenn mir jemand damit helfen könnte komme seit nem Tag nicht weiter
-
Mich stört es ganz heftig dass du die Zeit in String umwandelst. Laut deiner Programmierung muss man vorraussetzen, dass der Rechner die ganze zeit an ist. Das ist sehr ungünstig. Sowie ich dein Problem verstanden habe soll die Zeit zwischen 00:00 - 06:00 aus sein. Das macht man dann mit einem DateTime und TimeSpan.
In deinem Fall ist es recht einfach weil du Minuten auf 00 stellst:
Das ist jetzt ziemlich verkürzt da gestellt. Mathematisch gesehen dennoch korrekt. Somit würde dein Programm unabhängig davon wann du dein Computer einschaltest den Monitor ausmachen. Vielleicht würde ich noch eine kleine Prüfung einbauen, die den Status von Monitor prüft. Damit du nicht ständig ausmachst bzw. anmachst... -
-
Ich vermute, dass du die Tablets nicht Debuggen kannst. Wobei das auch geht. Du brauchst irgend wie den selben User auf deinem Rechner wo du das Programm erstellst wie bei deinem Tablet. Dann muss du irgend wie den Prozess anbinden. Dann würde praktisch dein Programm auf dem Tablet laufen und wenn du in auf deinem Rechner wo du das Programm erstellst irgend wo ein Breakpoint setzt, wird es dort anhalten. Sieht bei Tablet komisch aus. Aber es funktioniert. Wie genau das geht, frag im Forum unter neuen Frage...
Was zu deinem Problem angeht: Ich vermute, dass die die Zeit verpassen wann genau die Ausschalten sollen. Somit gerät das ganze ins nichts.
Insgesamt wenn Du mit der Zeit arbeitest, dann belasse es bei der Zeit. Sonst wird es unendlich kompliziert. DateTime bietet schon sehr viel. Warum das Rad neu erfinden. Zu Hilfe kannst du zusätzlich TimeSpan verwenden. Mit den beiden sollte alles erschlagen sein was auch immer du willst.
Danke für die Bewertung! -
Kein Ding bedanke mich ja schließlich bei dir
Also ich glaube mein Problem ist, dass das ein Dienst wird und deswegen es Probleme gibt..
Als normale WinForm/WPF funktioniert mein Vorhaben ohne Probleme nur dass dieganzeZeit ein Prozess läuft ist auch bisschen mies
Ich hatte es am Anfang in einer Do Schleife dachte dass es funktioniert war wohl dann doch nicht so das Tablet hat nur gelaggt am Ende Werde gleich mal ein Tablet neu aufsetzen um das mit dem Remote Debugging hinzubekommen guter Tipp danke!
Ich benutze Threading Timer, stimmt dieser Code so hier?
VB.NET-Quellcode
- Private oTimer1 As Threading.Timer
- Protected Overrides Sub OnStart(ByVal args() As String)
- Dim oCallback1 As New TimerCallback(AddressOf OnTimedEvent1)
- oTimer1 = New System.Threading.Timer(oCallback1, Nothing, 200, 200)
- File.Create(AppDomain.CurrentDomain.BaseDirectory + "OnStart.txt") 'Check
- End Sub
- Private Sub OnTimedEvent1(ByVal state As Object)
- Thread.Sleep(5000)
- Try
- Dim sUhrzeit As String = Date.Now.ToShortTimeString
- Select Case sUhrzeit.Substring(0, 5)
- Case "00:10"
- TurnOffLCD()
- Case "00:15"
- TurnOnLCD()
- Thread.Sleep(1000)
- MonitorOn()
- Thread.Sleep(1000)
- ScreenSaver()
- End Select
- Catch ex As Exception
- MsgBox(ex)
- File.Create(AppDomain.CurrentDomain.BaseDirectory + "FAIL")
- End Try
- End Sub
Die Subs ScreenSaver, TurnOffLcd, TurnOnLCD und MonitorOn hab ich selber geschrieben in WinForm funktionierts nur bei Service nicht :angry:
Wäre echt gut wenn jemand was hat evtl benutzt jemand etwas ähnliches..:) -
Man man man, du hast immer noch nicht den Code auf DateTime umgestellt. DAS SOLLTEST DU ALS ERSTES MACHEN!
guck doch mal selbst in deinen Programm. Mich wundert dass es überhaupt funktioniert. So schreibt man keine Threads. Ich weis was du mit deinem Programm erreichen wolltest, aber es ist nicht gut umgesetzt... Schreib ich mal extra für dich mal was:
VB.NET-Quellcode
- Imports System.Windows.Threading
- Class MainWindow
- Public Sub New()
- InitializeComponent()
- DispatcherTimer.Start()
- End Sub
- Private _DispatcherTimer As DispatcherTimer = Nothing
- Private ReadOnly Property DispatcherTimer As DispatcherTimer
- Get
- If _DispatcherTimer Is Nothing Then
- _DispatcherTimer = New DispatcherTimer()
- _DispatcherTimer.Interval = New TimeSpan(0, 0, 10)
- AddHandler _DispatcherTimer.Tick, AddressOf DispatcherTimerTick
- End If
- Return _DispatcherTimer
- End Get
- End Property
- Private Sub DispatcherTimerTick(sender As Object, e As EventArgs)
- Try
- Dim tmpTime = DateTime.Now
- If tmpTime.Hour < 6 Then
- 'TurnOffLCD()
- Else
- 'MonitorOn()
- End If
- Catch ex As Exception
- 'Irgend was...
- End Try
- End Sub
- End Class
So. Da hast du es. Fang nicht mit so eine Kacke an, wie "Thread.Sleep(1000)"
Guck mal, mein Timer wird jede 10 sekunden aktiviert, macht was, und ist dann zu ende. Was du da gemacht hast:
da würdest du nichts sehen. weil dein Prozess noch nicht abgeschlossen ist. Ich weiß jetzt nicht wie das mit dem Monitor an und aus ist. aber meist aktualisiert sich die Oberfläche erst nach beendigung des Prozesses. Der Timer darf nur kurz sein. Bei Amateuren vielleicht etwas länger, aber immer abgeschlossen.
Wenn du schon willst, dass dein Timer für kurze zeit monitor aus macht, dann ist besser so:
VB.NET-Quellcode
-
- Imports System.Windows.Threading
- Class MainWindow
- Public Sub New()
- InitializeComponent()
- DispatcherTimer.Start()
- End Sub
- Private _DispatcherTimer As DispatcherTimer = Nothing
- Private ReadOnly Property DispatcherTimer As DispatcherTimer
- Get
- If _DispatcherTimer Is Nothing Then
- _DispatcherTimer = New DispatcherTimer()
- _DispatcherTimer.Interval = New TimeSpan(0, 0, 0, 0, 500)
- AddHandler _DispatcherTimer.Tick, AddressOf DispatcherTimerTick
- End If
- Return _DispatcherTimer
- End Get
- End Property
- Private _Stopwatch As New Stopwatch()
- Private monitorAn As Boolean = False
- Private Sub DispatcherTimerTick(sender As Object, e As EventArgs)
- Try
- Dim tmpTime = DateTime.Now
- If tmpTime.Hour = 0 AndAlso tmpTime.Minute = 10 Then
- 'MonitorOn()
- ElseIf tmpTime.Hour = 0 AndAlso tmpTime.Minute = 15 Then
- If Not _Stopwatch.IsRunning Then
- _Stopwatch.Start()
- End If
- If _Stopwatch.Elapsed.TotalSeconds > 1 Then
- If monitorAn Then
- 'TurnOnLCD()
- Else
- 'MonitorOn()
- End If
- monitorAn = Not monitorAn
- _Stopwatch.Stop()
- _Stopwatch.Reset()
- _Stopwatch.Start()
- End If
- End If
- Catch ex As Exception
- 'Irgend was...
- End Try
- End Sub
Achtung, auch der timer intervall muss kleiner sein auf 500 ms. sonst würde es nciht funktinieren... -
-
Ähnliche Themen
-
Hehenberger - - Sonstige Problemstellungen
-
4 Benutzer haben hier geschrieben
- EugenIS (6)
- BasicSharpx3 (4)
- Niko Ortner (1)
- Eddy (1)