Domino 9 und frühere Versionen > ND6: Entwicklung
API - ist Notes minimiert?
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