Hallo Zusammen,
ich bin nach wie vor auf der Suche nach einer Funktion, mit der man prüfen kann ob Notes gerade minimiert ausgeführt wird. Das muss doch über die API zu machen sein, ich weis allerdings nicht wie ich das ganze richtig anstelle.
Mein Ansatz wäre die Funktion "FindWindow"
Declare Function FindWindow Lib "user32" Alias"FindWindowA" (Byval lpClassName As String, Byval lpWindowName As String) As Long
Aber wie finde ich nun heraus ob Notes minimiert ist?
Grüße an die API-Experten, Klaus
Hallo eknori,
Danke für den Tip. Ich muss nur wissen ob Notes gerade minimiert ist, damit ich bestimmte Befehle nicht ausführe die dann auf einen Fehler laufen (ws.reloadwindow).
Wie spreche ich die Funktion in Notes so an, damit ich einen brauchbaren Wert bekomme? 'Me' scheint es in Notes nicht zu geben?
ShowWindow Me.hwnd , SW_HIDE
Vielen Dank für Deine Hilfe, Grüße Klaus
hmm....
OPTIONS:
Declare Function IsWindowEnabled Lib "user32" Alias "IsWindowEnabled" ( Byval hwnd As Long ) As Long
'END OPTIONS
Sub test
On errror Goto errorhandler
Dim wasenabled As Long 'receives enabled/disabled status of Command1
Dim retval As Long ' return value
' Determine if the window Command1 is currently enabled or not.
wasenabled = IsWindowEnabled(Command1.hwnd)
Msgbox Cstr(wasenabled)
Exit Sub
errorhandler:
Msgbox " " + Error$ + " !! Zeile: " + Str(Erl)
Exit Sub
End Sub
Wie weise ich meiner aktuellen Lotus Notes Anwendung zu Command1 zu???
Das hier läuft immer hinaus auf "Variant does not contain an Object"
Grüße Klaus
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:
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
und die Funktion:
'**************************************************************************
'* 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
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
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:
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
Funktion
'******************************************************************************
'* 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
Vielleicht kanns ja noch jemand gebrauchen!
Grüße, Klaus