Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1008to1012
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fremde fenster Navigieren .. mit z.b sendkeys

Fremde fenster Navigieren .. mit z.b sendkeys
11.09.2008 09:54:19
chris
Hallo zusammen,
hätte da eine frage.Würde mich freuen wenn mir jemand helfen könnte.Versuche schon seid längerer zeit mit einem VBA Makro ein andere programm zu steuern.
Leider klappt das nicht ganz wie ich das möchte weil die Antwortzeiten des anderem programmes nicht immer gleich sind.
Deshalb habe ich mir überlegt das ich das ganze überprüfen lasse.Also überprüfen und mein Programm warten lasse bis das gewünschte fenster aktiv ist.
Aber irgendwie komme ich damit nicht klar.Nur was mache ich falsch.Würde mich über Hilfe sehr freuen.
Hier der code mit dem ich versuche das ganze zu steuern.
'um Makro bestimmte Zeit in Millisekunden warten zu lassen
Declare

Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Declare 

Function GetForegroundWindow Lib "user32" () As Long
Public Declare 

Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As  _
Long
Public Declare 

Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString  _
As String, ByVal cch As Long) As Long
Public Declare 

Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
'Für Tastaturklicks
Public Declare 

Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Dim hwCurr As Long
Dim intLen As Long
Dim strTitle As String
Dim Size As RECT


Sub prog1_leeer()
AppActivate ("Dokumente suchen:Selektionskriterien"), True ' Fenster aktivieren
'20 mal  "entfernen"  drücken (um evtl. vorhandene Nummer zu löschen
For ll = 1 To 30
SendKeys "{DELETE}", True
Next
' einfügen der Nummer
SendKeys Cells(1, 1), True
Sleep 50
For ii = 1 To 3
SendKeys "{TAB}", True
Next
' eintragen der Version
Sleep 50
SendKeys Cells(1, 2), True
Sleep 50
SendKeys "{F8}", True
Sleep 1000
'Hier wird das Fenster noch einmal aktiviert ob das nötig ist weiß ich nicht .. ? da es ja  _
schon aktiv sein sollte.
AppActivate ("Dokumentliste")
Sleep 200
SendKeys "^+{F10}", True
'Hier sollte meine überprüfung sein dei aber nicht klappt.
'Die do while schleife sollte so lange laufen im Hintergrund bis das fenster mit dem titel " _
Dokument 'ändern" aktiv ist und den focus hat.
Do While strTitle  "Dokument ändern"
hwCurr = GetForegroundWindow
intLen = GetWindowTextLength(hwCurr) + 1
strTitle = Space$(intLen)
intLen = GetWindowText(hwCurr, strTitle, intLen)
'welches_fenster = strTitle
Loop
'Hier soll der code dann weiterlaufen.
For ll = 1 To 5
SendKeys "{DELETE}", True
Next
SendKeys "12", True
'Speichern der geänderten Daten
SendKeys "^s", True
MsgBox ("gespeichert")
End Sub



Function welches_fenster()
hwCurr = GetForegroundWindow
intLen = GetWindowTextLength(hwCurr) + 1
strTitle = Space$(intLen)
intLen = GetWindowText(hwCurr, strTitle, intLen)
welches_fenster = strTitle
End Function


9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fremde fenster Navigieren .. mit z.b sendkeys
12.09.2008 17:18:00
Tino
Hallo,
hier mal ein Beispiel ohne Deine Code und die Dateien nachzubauen.
Modul Modul1
Option Explicit 
Sub Test() 
  
 Do While PruefeFenster("Dokument ändern") = False 
  hwCurr = GetForegroundWindow 
  intLen = GetWindowTextLength(hwCurr) + 1 
  strTitle = Space$(intLen) 
  intLen = GetWindowText(hwCurr, strTitle, intLen) 
  'welches_fenster = strTitle 
 Loop 
 
End Sub 
 
 
Function PruefeFenster(Titel As String) As Boolean 
On Error GoTo Nichtaktiv: 
 AppActivate Titel 
 PruefeFenster = True 
Exit Function 
 
Nichtaktiv: 
 PruefeFenster = False 
End Function 
 


Hier wird in der separaten Funktion versucht dieses Fenster zu aktivieren, ist dieses nicht vorhanden
wird ein Fehler erzeugt, dies nutze ich um der Funktion einen bestimmten Rückgabewert zu geben und dieser wird mit der Do While Schleife abgefragt.
Gruß Tino

Anzeige
AW: Fremde fenster Navigieren .. mit z.b sendkeys
12.09.2008 19:16:54
Chris
Ok vielen Dank.
Werde es aber erst am Dienstag testen können.
Schönes WE !!! gruß Chris
AW: Fremde fenster Navigieren .. mit z.b sendkeys
12.09.2008 19:53:00
Chris
Noch was, wo ein Problem sein könnte.
Ich finde immer nicht den fensternamen zum aktivieren mit appactivate.
Muss dazu sagen es handelt sich um SAP.
Gibt es da eine andere möglichkeit das fenster zu aktivieren oder besser gesagt nach dem zu suchendem Fensternamen zu schauen. Also wie ich schreiben muss bei
Do While PruefeFenster("Dokument ändern") = False
Danke noch einmal !
gruß Chris
AW: Fremde fenster Navigieren .. mit z.b sendkeys
12.09.2008 20:52:14
Tino
Hallo,
der Fenstertitel ist doch im SAP ein fester Wert oder besteht aus festen Werten.
Um mit AppActivate ein Fenster zu aktivieren, reicht auch ein Bestandteil des Titels aus um diese zu aktivieren. Aber es sollte darauf geachtet werden, dass dieser Bestandteil nur in einem Titel vorkommen kann.
Auszug aus der VBA Hilfe.
Welche Anwendung aktiviert werden soll, wird bestimmt, indem title mit der Zeichenfolge des Titels jeder einzelnen momentan ausgeführten Anwendung verglichen wird. Wenn es keine genaue Übereinstimmung gibt, wird eine beliebige Anwendung, deren Zeichenfolge mit title beginnt, aktiviert. Wenn mehr als eine Instanz dieser Anwendung mit title bezeichnet ist, wird eine der Instanzen willkürlich aktiviert.
Gruß Tino
Anzeige
AW: Fremde fenster Navigieren .. mit z.b sendkeys
13.09.2008 09:50:57
Chris
Hallo Tino,
danke noch einmal für die Antwort.
bei mir kommt ein fehler.. ? Leider weiß ich nicht genau welcher.
(habe es gerade mal daheim versucht die anwendung die zu aktivieren ist nicht komplett in appactivate zu schreiben dann kommt dieser fehler:
"Laufzeitfehler 5"
Ungültiger Prozeduraufruf oder ungültiges Argument
Ich werde es Dir am Montag noch einmal hier ins Forum Posten.
Danke bis dahin schönes WE !!! gruß Chris
AW: Fremde fenster Navigieren .. mit z.b sendkeys
13.09.2008 13:22:00
Tino
Hallo,
wie heißt Dein zu aktivierendes Fenster,
welchen Titel verwendest Du und wie sieht Dein Code jetzt aus?
Gruß Tino
AW: Fremde fenster Navigieren .. neu offen
16.09.2008 11:43:54
chris
Hallo Tino,
setze jetzt diesen Beitrag noch einmal auf offen.
Hoffe du oder jemand anderes liest den beitrag noch einmal und kann mir helfen.
Wäre wirklich super.
Hier ist mein Code der auch soweit funktioniert nur bei der letzten Sendkeys anweisung hängt er sich auf.Also damit meine ich verlässt er die schleife nicht obwohl das fenster gestartet wurde.
Er kann es nur nicht aktivieren.
Declare

Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString  _
As String, ByVal cch As Long) As Long
Declare 

Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As  _
Long


Sub Start()
Do While PruefeFenster("Dokumente suchen") = False
'Warten bis angegebenes Fenster aktiv wird bzw. aktiviert werden kann !
Loop
For x = 1 To 20
SendKeys "{DEL}", True
Next
SendKeys (Cells(2, 1)), True
'Tabulator Taste drücken um in Feld  zu gelangen
SendKeys "{TAB}", True
SendKeys (Cells(2, 2)), True
'Tabulator Taste drücken um in Feld zu gelangen
SendKeys "{TAB}", True
SendKeys "{TAB}", True
SendKeys (Cells(2, 3)), True
'F8 Taste drücken um in Nächstes Fenster zu gelangen
SendKeys "{F8}", True
'---------------------------------------  Warten
Do While PruefeFenster("Dokumentliste nach Selektion") = False
'Warten bis angegebenes Fenster aktiv wird bzw. aktiviert werden kann !
Loop
'Mit sendkeys STRG+Umschalt F10
SendKeys "^+{F10}", True
'---------------------------------------  Warten
'Hier hängt sich mein programm auf.
'Er findet das Fenster Dokument ändern nicht obwohl es gestartet wurde.
'In der taskleiste ist das fenster nicht ganz lesbar also der Fenstername.
'Dort sehe ich nur "Dokument ändern: ..."
Do While PruefeFenster("Dokument ändern: Grun...") = False
'Warten bis angegebenes Fenster aktiv wird bzw. aktiviert werden kann !
Loop
msgbox("weiterer code")
End Sub



Function PruefeFenster(Titel As String) As Boolean
On Error GoTo Nichtaktiv:
AppActivate Titel
PruefeFenster = True
Exit Function
Nichtaktiv:
PruefeFenster = False
End Function


Anzeige
AW: Fremde fenster Navigieren .. neu offen
16.09.2008 15:47:06
Tino
Hallo,
ich denke die Pünktchen gehören nicht zum Titel.
Versuch doch mal:

Do While PruefeFenster("Dokument ändern:") = False


Oder finde den Rest des Titels heraus indem Du es Maximierst und in der Titelleiste den Titel mal anschaust, verwend aber nur ganze Wörter und keine Teile davon.
Gruß Tino

AW: Fremde fenster Navigieren .. neu offen
16.09.2008 17:41:00
Chris
Danke dir noch einmal.
Versuche es mal aber jetzt bin ich leider 3 wochen nicht da.
gruß Chris

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige