| |
Fortgeschrittene ProgrammierungSperre vom Desktop unterdrücken durch simulierte Aktivität | | | Autor: benne | Datum: 13.07.16 07:48 |
| Hallo,
auf einem PC mit WIN7 ist per Richtlinie der Desktop nach sehr kurzer Zeit gesperrt.
Ich habe jedoch ein Programm laufen, dass ständig Daten in andere Systeme schaufelt.
Die Anzeige gibt mir Auskunft, was gerade läuft oder ob Fehler vorhanden sind.
Wenn der Desktop dunkel wird, dann ist das nicht in meinem Sinn.
Ich möchte in meinem Programm per Timer ein Ereignis auslösen, dass z.B. eine Tastatureingabe (nicht störend) simuliert, so dass der Timer für die Desktopsperre nicht zum Zug kommt.
Es gibt solche Programme auch im Netz, aber nur als EXE. Das ist mir etwas zu heiß ...
Wie kann ich das im Programm intern (z.B. API Aufruf) aufrufen?
Viele Grüße
Benne | |
Re: Sperre vom Desktop unterdrücken durch simulierte Aktivität | | | Autor: benne | Datum: 13.07.16 12:44 |
| Hallo effeff,
das war meine erste Idee, die ich getestet habe.
Leider war Windows von diesem Versuch wenig beeindruckt.
Offensichtlich wurde das nicht als "Aktivität" betrachtet.
Gruß
Benne | |
Re: Sperre vom Desktop unterdrücken durch simulierte Aktivität | | | Autor: Archilleus | Datum: 15.07.16 09:27 |
| Vielleicht hilft ein Desktop-Refresh:
In einem Modul:
<Modul>
Option Explicit
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal _
hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindowEx Lib "user32" _
Alias "FindWindowExA" (ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long
Const WM_KEYDOWN = &H100
' Benötigte API-Deklarationen
Private Declare Function InvalidateRect Lib "user32" ( _
ByVal hWnd As Long, _
lpRect As Any, _
ByVal bErase As Long) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
' Desktop aktualisieren
Public Sub DesktopRefresh()
Dim nResult As Long
nResult = InvalidateRect(0&, 0&, False)
If nResult <> 0 Then
Call InvalidateRect(0&, 0&, False)
End If
End Sub
Public Sub Run_Desktop_Refresh()
Dim DeskWin As Long
'Aktualisierung der HTML-Seiten auf dem Desktop
DeskWin = FindWindowEx(0&, 0&, "Progman", vbNullString)
DeskWin = FindWindowEx(DeskWin, 0&, "SHELLDLL_DefView", vbNullString)
DeskWin = FindWindowEx(DeskWin, 0&, "SysListView32", vbNullString)
PostMessage DeskWin, WM_KEYDOWN, &H74, &H3F0001
'eigentlicher Desktop
Call DesktopRefresh
End Sub </Modul>
Gruß Archilleus | |
Re: Sperre vom Desktop unterdrücken durch simulierte Aktivität | | | Autor: Fieber | Datum: 15.07.16 16:53 |
| Funktioniert leider nicht unter Windows 10
Gruß
Fieber
http://computer.net-berlin.de - Visual Basic - Tips & Tricks sowie viel Grafik | |
Re: Sperre vom Desktop unterdrücken durch simulierte Aktivität | | | Autor: Fieber | Datum: 15.07.16 23:40 |
| Hallo Benne
Versuch mal Das hier:
' https://msdn.microsoft.com/en-us/library/aa373208(v=vs.85).aspx
Option Explicit
Private Declare Function SetThreadExecutionState Lib "kernel32" (ByVal esFlags _
As Long) As Long
Public Enum EXECUTION_STATE
ES_CONTINUOUS = &H80000000 ' ES_CONTINUOUS Or ... -> einfrieren,
' ES_CONTINUOUS -> aufwecken
ES_DISPLAY_REQUIRED = &H2 ' Display-Leerlauf-Timer zurücksetzen
ES_SYSTEM_REQUIRED = &H1 ' System-Leerlauf-Timer zurücksetzen
ES_AWAYMODE_REQUIRED = &H40 'Hintergrund-Aktivitäten
End Enum
' Keine Display-Abschaltung durch zurücksetzen des Display-Leerlauf-Timers.
Call SetThreadExecutionState(EXECUTION_STATE.ES_DISPLAY_REQUIRED)
' Keine PC-Abschaltungdurch zurücksetzen des System-Leerlauftimers.
Call SetThreadExecutionState(EXECUTION_STATE.ES_SYSTEM_REQUIRED)
' Friert den Display-Timer ein.
Call SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS Or _
EXECUTION_STATE.ES_DISPLAY_REQUIRED)
' Friert den System-Timer ein.
Call SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS Or _
EXECUTION_STATE.ES_SYSTEM_REQUIRED)
' Hintergrund-Aktivitäten wärend des Schlafens.
Call SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS Or _
EXECUTION_STATE.ES_AWAYMODE_REQUIRED)
'-- Timer wiederaufwecken
Call SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS) Gruß
Fieber
http://computer.net-berlin.de - Visual Basic - Tips & Tricks sowie viel Grafik | |
Re: Sperre vom Desktop unterdrücken durch simulierte Aktivität | | | Autor: Franki | Datum: 17.07.16 01:17 |
| Hallo,
du versuchst die Mechanismen bzw. Einstellmöglichkeiten von Windows auszuhebeln. Wenn dir die eingestellten Richtilinien (Desktop wird zu schnell dunkel) nicht passen, dann ändere sie doch einfach.
Wenn du dazu keine Berechtigung hast, dann wird dein Umgehungsversuch auch nicht von Dauer sein, da der Admin das irgendwann mit bekommt, dass du da versuchst zu tricksen. Ist nur eine Frage der Zeit.
Alles was du hier jetzt schon genannt bekommen hast, bzw. gefunden hast ist schön und gut, wenn das klappt, dann bezieht sich das aber nicht nur auf deine Anwendung sondern allgemein auf das Windows System.
Aber anders gefragt, warum ist dir das so wichtig? Wenn ein User nicht am Rechner aktiv ist, wird der Bildschirm dunkel, aber wenn du das verhinderst sitzt ja auch niemand vor dem Rechner und beobachtet was dein Programm grade macht. Wenn dem User dein Programm wichtig ist, dann sorgt er ja sowieso für dessen Sichtbarkeit indem er am Rechner arbeitet z.B.
Gruß
Frank | |
Re: Sperre vom Desktop unterdrücken durch simulierte Aktivität | | | Autor: benne | Datum: 21.07.16 15:23 |
| Hi Franki, Fieber und Archilleus,
zuerst mal vielen Dank für eure Antworten.
Ich war bis heute unterwegs und konnte deshalb nicht ins System.
Die angebotenen Möglichkeiten sehen gut aus, ich werde sie alle testen und die Passenden verwenden.
@Frank:
Prinzipiell hast du erst mal Recht!
Im vorliegenden Fall geht es darum, bei bestimmten Rechnern (es sind aktuell 2) eine Gruppenrichtlinie auszuhebeln, die beim Rest der Firma absolut Sinn macht.
Diese Rechner stehen jedoch in einem separaten Bereich, der Bildschirm ist gut einsehbar.
Im Regelfall laufen hier nur Meldungen und Listen von Aktionen ab.
Falls aber etwas klemmt oder ein Fehler auftritt, dann sieht man beim nächsten Draufschauen, dass ein Eingriff notwendig ist.
Müsste ich jedesmal zuerst einen Login machen, damit der Bildschirm hochfährt, wäre das nicht zweckdienlich.
Ein Viertelstunde Verzögerung, bis jemand draufschaut, ist kein Problem. Aber stundenlang sollte es nicht gehen.
Natürlich gäbe es noch die andere Möglichkeit, einen Watchdog einzubauen, der per Mail oder was auch immer eine Meldung abgibt.
Die ganze Geschichte ist aktuell im Aufbau, das Programm für diese Hintergrundaktionen ändere ich noch gelegentlich. Würde das Ganze bei einem Kunden stehen, wäre der Aufbau ganz anders.
Ich hoffe, dass ich dir meine Beweggründe näher bringen konnte. Ich wollte durch eine kleine Maßnahme vermeiden, dass ich einen oder mehrere Rechner aus der Gruppenrichtlinie rausnehmen lassen muss. Sobald das Ding stabil läuft, müsste ich das wieder ändern lassen ...
Ansonsten stimme ich mit deinen Aussagen voll und ganz überein. Das Konstrukt riecht schon ein wenig nach "Murks".
Gruß
Benne | |
Re: Sperre vom Desktop unterdrücken durch simulierte Aktivität | | | Autor: benne | Datum: 21.07.16 16:13 |
| Hallo Fieber,
funktioniert astrein, so wie ich es brauche.
Vielen Dank dafür.
Gruß Benne | |
Re: Sperre vom Desktop unterdrücken durch simulierte Aktivität | | | Autor: Franki | Datum: 27.07.16 01:51 |
| Hallo,
also wie ich das sehe, versuchst du etwas in einer Testphase zu machen was irgenwann in einer produktiv Phase enden soll.
Das ist halt Alltag beim Programmieren. Aber da macht man das in einer Testumgebung, wenn es dort funktioniert, dann übernimmt man es in die Produktivumgebung. Rechner rein, weider raus usw. kann man machen in der Testphase, aber letztendlich muss man sich auf das Endergebnis konzentrieren.
Gruß
Frank | |
| 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 TOP! Unser Nr. 1
Neu! sevDataGrid 3.0
Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Weitere Infos
|