Forums Neueste Beiträge
 

Besseres Sleep / Doevents

04/12/2014 - 11:57 von Wolfgang Wolf | Report spam
Hallo,

ich suche mit GetActiveWindow/GetWindowText ein bestimmtes Fenster einer
fremden Anwendung. Wenn dieses Fenster nicht gefunden wird veranlasse
ich eine Fernsteuer-Aktion die dieses Fenster aufruft.
Danach prüfe ich erneut die Existenz dieses Fensters. Obwohl das Fenster
nun das ist wird nicht gefunden, es sei denn ich halte die Anwendung
kurz an.

Hier der Pseudo-Code meiner Funktion

hwnd = FindeFenster
if hwnd = 0 then StarteFenster
do while hwnd = 0 then
i=i+1
if i = 10 then stop
sleep xxx
doevents
hwnd = FindeFenster
loop

wenn die Anwendung bei i anhaltet wird gleich danach das Fenster
gefunden. Sleep und doevents haben keinen Einfluss. Das Anhalten gibt
Windows offensichtlich die Gelegenheit seine hwnds neu zu ordnen.

Ich könnte mir da sicher irgendeine Krücke mit einem Timer basteln,
möchte das aber nur ungern machen. Besser wàre eine sleep-Funktion, die
gleiches bewirkt wie der kurze Debug-Stop. Kennt ihr da was?

Schönen Gruß
W. Wolf
 

Lesen sie die antworten

#1 Ahmed Martens
04/12/2014 - 12:29 | Warnen spam
Hallo Wolfgang,

Am Thu, 04 Dec 2014 11:57:57 +0100 schrieb Wolfgang Wolf:

Hallo,

ich suche mit GetActiveWindow/GetWindowText ein bestimmtes Fenster einer
fremden Anwendung. Wenn dieses Fenster nicht gefunden wird veranlasse
ich eine Fernsteuer-Aktion die dieses Fenster aufruft.
Danach prüfe ich erneut die Existenz dieses Fensters. Obwohl das Fenster
nun das ist wird nicht gefunden, es sei denn ich halte die Anwendung
kurz an.

Hier der Pseudo-Code meiner Funktion

hwnd = FindeFenster
if hwnd = 0 then StarteFenster
do while hwnd = 0 then
i=i+1
if i = 10 then stop
sleep xxx
doevents
hwnd = FindeFenster
loop

wenn die Anwendung bei i anhaltet wird gleich danach das Fenster
gefunden. Sleep und doevents haben keinen Einfluss. Das Anhalten gibt
Windows offensichtlich die Gelegenheit seine hwnds neu zu ordnen.

Ich könnte mir da sicher irgendeine Krücke mit einem Timer basteln,
möchte das aber nur ungern machen. Besser wàre eine sleep-Funktion, die
gleiches bewirkt wie der kurze Debug-Stop. Kennt ihr da was?

Schönen Gruß
W. Wolf



ich verwende immer folgende Funktion:

<Code>

' API Declaration
Public Declare Function GetTickCount Lib "kernel32" () As Long


' *********************************************************
' *
' * Modul Delay
' *
' *********************************************************

Public Sub Delay(nSekunden As Long)
Dim TimeOut As Long

10 On Error GoTo Delay_Error

' Abbruchbedingung für die Do Loop Schleife ermitteln
20 TimeOut = (GetTickCount / 1000) + nSekunden

30 Do
' Systemevents zulassen
40 DoEvents

' TimeOut erreicht?
50 Loop Until TimeOut < (GetTickCount / 1000)

60 On Error GoTo 0
70 Exit Sub

Delay_Error:

80 MsgBox "Fehlernr.: " & Err.Number & " (" & Err.Description &
") in Prozedur Delay von Modul mdlSytem", , "Fehler in Zeile: " & Erl
End Sub

</Code>

Die Funktion habe ich irgendwann einmal aus den tiefen des INet gefunden
und funktioniert bei mir tadellos. Die Sleep-Funktion hatte manchmal
unschöne Nebeneffekte.

Gruß Ahmed
Antworten bitte nur in der Newsgroup.
Win7 Prof. 64bit / MS-Office 2010 Prof. 32bit

Ähnliche fragen