vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Sperre 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sperre vom Desktop unterdrücken durch simulierte Aktivität 
Autor: effeff
Datum: 13.07.16 11:25

Vielleicht mit SendKeys? http://www.vbarchiv.net/commands/cmd_sendkeys.html

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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-2024 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