Autor Thema: API - ist Notes minimiert?  (Gelesen 2853 mal)

Offline klaussp

  • Aktives Mitglied
  • ***
  • Beiträge: 184
  • Geschlecht: Männlich
API - ist Notes minimiert?
« am: 25.03.07 - 14:12:25 »
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"
Code
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
« Letzte Änderung: 26.03.07 - 15:50:41 von klaussp »
Klaus

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: API - ist Notes minimiert?
« Antwort #1 am: 25.03.07 - 14:25:56 »
Willst du nur wissen, ob die Anwendung minimiert ist, oder willst du dann mit deinem Wissen was anstellen ?

gucke dir mal http://www.vbarchiv.net/vbapi/ShowWindow.php an. Damit kannst du das machen, was du möchtest
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline klaussp

  • Aktives Mitglied
  • ***
  • Beiträge: 184
  • Geschlecht: Männlich
Re: API - ist Notes minimiert?
« Antwort #2 am: 25.03.07 - 14:42:43 »
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?

Code
    ShowWindow Me.hwnd , SW_HIDE 

Vielen Dank für Deine Hilfe, Grüße Klaus
Klaus

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
« Letzte Änderung: 25.03.07 - 15:30:19 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline klaussp

  • Aktives Mitglied
  • ***
  • Beiträge: 184
  • Geschlecht: Männlich
Re: API - ist Notes minimiert?
« Antwort #4 am: 25.03.07 - 20:50:13 »
hmm....


Code
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
Klaus

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: API - ist Notes minimiert?
« Antwort #5 am: 26.03.07 - 06:26:24 »
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

Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline klaussp

  • Aktives Mitglied
  • ***
  • Beiträge: 184
  • Geschlecht: Männlich
Re: API - ist Notes minimiert?
« Antwort #6 am: 26.03.07 - 10:54:30 »
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


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

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
« Letzte Änderung: 26.03.07 - 13:34:09 von klaussp »
Klaus

Offline klaussp

  • Aktives Mitglied
  • ***
  • Beiträge: 184
  • Geschlecht: Männlich
Re: API - ist Notes minimiert?
« Antwort #7 am: 26.03.07 - 15:50:30 »
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

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

Vielleicht kanns ja noch jemand gebrauchen!

Grüße, Klaus
Klaus

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz