Domino 9 und frühere Versionen > ND6: Entwicklung

API - ist Notes minimiert?

<< < (2/2)

eknori:
Command1.hwnd ist die Visaul Basic Schreibweise zur Ermittlung des Window Handle der Form Command1.

Das funktioniert in Notes natürlich nicht so.

Da du dich vermutlich auch mit dem Cursor nicht in dem Fenster befindest, fällt also der einfache Weg über die API GetWindowFromPoint flach.

Du musst dich daher durch die Liste der Fenster durchfragen und nach deinem "Notes" Fenster suchen. Dann kommst du über GetWindow an das handle deiner Notes Anwendung

http://www.activevb.de/rubriken/apikatalog/deklarationen/getwindow.html

klaussp:
Danke eknori,

leider liefert mir die Funktion "isWindowEnabled" immer True zurück, auch wenn das Fenster minimiert ist. Hast Du vielleicht noch eine andere Idee?

Hier der Code, damit es etwas klarer wird!

Declarations:

--- Code: ---Declare Function GetWindow Lib "user32" ( Byval hWnd As Long, Byval wCmd As Long) As Long
Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (Byval hwnd As Long, Byval lpString As String, Byval cch As Long) As Long
Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Declare Function IsWindowEnabled Lib "user32" Alias "IsWindowEnabled" ( Byval hwnd As Long ) As Long
Declare Function IsWindowVisible Lib "user32" Alias "IsWindowVisible" ( Byval hwnd As Long ) As Long

Const GW_HWNDNEXT = 2

--- Ende Code ---


und die Funktion:

--- Code: ---'**************************************************************************
'* Suche nach einem übergebenen Teilstring in der Liste der Fenster
'* Prüfen ob das Fenster gerade aktiv ausgeführt wird
'**************************************************************************

Function FindWindowLike(Teilstring As String) As Long
Dim hWnd As Long
Dim strCurrentWindowText As String
Dim r As Integer
Dim ret As Boolean

hWnd = GetForegroundWindow

'solange durch die Fensterliste loopen bis Fenster gefunden wird
Do Until hWnd = 0
strCurrentWindowText = Space$(255)
r = GetWindowText(hWnd, strCurrentWindowText, 255)
strCurrentWindowText = Left$(strCurrentWindowText, r)
If Instr(1, Lcase(strCurrentWindowText), Lcase(Teilstring)) <> 0 Then Goto Found
hWnd = GetWindow(hWnd, GW_HWNDNEXT)
Loop
Exit Function

Found: 'Teilstring wurde gefunden
FindWindowLike = hWnd

'Prüfen ob das gefundene Fenster auch aktiv ausgeführt wird
ret = iswindowenabled (hWnd)
ret1 = iswindowvisible(hWnd)

Dim text As String
text = Cstr(Now) & " Ergebnis, Fensterhandle =  " & Cstr(strCurrentWindowText) & Cstr(findwindowlike) & " Enabled = " & Cstr(ret) & Cstr(ret1)
End Function
--- Ende Code ---

iswindowvisible liefert True
iswindowenabled liefert ebenfalls True
Das Fenster ist aber zum Testzeitpunkt definitiv minimiert, und es wird das richtige Fenster ermittelt (strCurrentWindowText).

Noch ne Idee?

Grüße, Klaus

klaussp:
Habs gefunden - die passenden Funktion ist 'IsIconic'. Diese liefert für ein gegebenes Fenster einen Boolean Wert ob das Fenster minimiert (=True) bzw. geöffnet (=False) ist.

Declarations:

--- Code: ---Declare Function GetWindow Lib "user32" ( Byval hWnd As Long, Byval wCmd As Long) As Long
Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (Byval hwnd As Long, Byval lpString As String, Byval cch As Long) As Long
Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Declare Function IsIconic Lib "user32" (Byval hwnd As Long) As Boolean

Const GW_HWNDNEXT = 2
--- Ende Code ---

Funktion

--- Code: ---'******************************************************************************
'* Suche nach einem übergebenen Teilstring in der Liste der Fenster
'* Prüfen ob das Fenster gerade aktiv ausgeführt wird oder minimiert ist
'* Rückgabe True = minimiert ; False = nicht minimiert
'******************************************************************************
Function PruefeMinimiert(Teilstring As String) As Boolean
Dim hWnd As Long
Dim strCurrentWindowText As String
Dim r As Integer

hWnd = GetForegroundWindow

'solange durch die Fensterliste loopen bis Fenster gefunden wird
Do Until hWnd = 0
strCurrentWindowText = Space$(255)
r = GetWindowText(hWnd, strCurrentWindowText, 255)
strCurrentWindowText = Left$(strCurrentWindowText, r)
If Instr(1, Lcase(strCurrentWindowText), Lcase(Teilstring)) <> 0 Then Goto Found
hWnd = GetWindow(hWnd, GW_HWNDNEXT)
Loop
Exit Function

Found: 'Teilstring (=Fenster) wurde gefunden
'Prüfen ob das gefundene Fenster auch aktiv ausgeführt wird (Boolean)
PruefeMinimiert = IsIconic(hWnd)
Exit Function

errhandler:
Print " "  + Error$ + " !!   Zeile: " + Str(Erl)
Exit Function
End Function
--- Ende Code ---

Vielleicht kanns ja noch jemand gebrauchen!

Grüße, Klaus

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln