Programm steuern

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Programm steuern

Re: Programm steuern

Post by just me » 06 May 2019, 05:50

Moin,

ich hätte noch einen Vorschlag.

Du nimmst Dein funktionierendes Login-Skript. Alles nach der ControlClick Anweisung wird wie folgt ersetzt:

Code: Select all

#NoEnv
run C:\ELS_V55R6_DE\ELS5.exe

WinWaitActive, ahk_class WindowsForms10.Window.8.app.0.378734a		; ahk_class des Login Fensters
Sleep 8000
ControlSend, WindowsForms10.EDIT.app.0.378734a1 ,4711, ahk_class WindowsForms10.Window.8.app.0.378734a ; das tut es
Sleep 1000
ControlClick, &Login, ahk_class WindowsForms10.Window.8.app.0.378734a

Start := A_TickCount
SetTimer, CheckWindows, -1000
Return

Esc:: ; Ausgang
ExitApp

CheckWindows:
Zeit := A_TickCount - Start
Fenster := "Fensterliste: (Titel - Klasse - X/Y/W/H)`n"
WinGet, WinList, List, ahk_exe ELS5.exe
Loop, %WinList%
{
	WinExist("ahk_id " . WinList%A_Index%) ; setzt das Zuletzt-Gefundene-Fenster
	WinGetClass, Klasse
	WinGetTitle, Titel
	WinGetPos, X, Y, W, H
	Fenster .= "`n" . A_Index . ":`t" . Titel . " - " . Klasse . " - " . X . "/" . Y . "/" . W . "/" . H
}
MsgBox, 0, Nach %Zeit% Millisekunden, %Fenster%
SetTimer, CheckWindows, -1000
Return
Nun schaust Du Dir die Meldungen an und prüfst, ob das 'richtige' Fenster dabei ist.

Re: Programm steuern

Post by muemmi » 05 May 2019, 14:03

BOHHHHHH

Ich könnte ko..Ich sollte eine Rechnung schreiben....

Ich bin immer noch am basteln

Code: Select all

EnvSet, Titel, ELS5 - ODBC - AKZO [DOM] ; Versuch mit Titel setzen bei GOTO was auch geht

MsgBox, Das aktive Fenster ist "%Titel%"

IfWinActive, %Titel%
{
    WinMaximize  ; Maximiert das oben gefundene Fenster.
   
}
;MsgBox, Das aktive Fenster ist "%Titel%"

;WinMenuSelectItem, %Titel%, , 1&, 2&

MsgBox, Das aktive Fenster vor der Steuerung ist "%Titel%"

Sleep 1000
ControlSend, ,{Down}, %Titel%
Sleep 1000
ControlSend, ,{Down}, %Titel%
Sleep 1000
ControlSend, ,{Down}, %Titel%
Sleep 1000
SetKeyDelay, 10, 10
ControlSend, ,{Alt down}L{Alt up}, %Titel%
Sleep 1000
ControlSend, ,{Alt down}S{Alt up}, %Titel%
Sleep 1000
;ControlSend, ,!L, %Titel%
Sleep 1000
;ControlSend, ,!S, %Titel%
Sleep 1000

ControlGetFocus, AusgabeVar, %Titel%
if ErrorLevel
    MsgBox, Das Zielfenster existiert nicht oder hat keine Steuerelemente mit Eingabefokus.
else
    MsgBox, Steuerelement mit Eingabefokus = %AusgabeVar%
Man kann es kaum glauben... aber der script redet mit dem Fenster (wenn aktiv)
Er maximiert es sogar!
Er wandert im Linken Fenster nach Unten... nur das verdammte "Alt" nimmer er in keiner Form an

GRRR

Re: Programm steuern

Post by muemmi » 05 May 2019, 07:40

So erst mal ein paar Erklärungen:

Runtergeklappt meine ich Nicht aktiv und unten in der Zeile.

Ich hab mal mit Goto probiert. Das geht im ertsenschritt nicht weil er ja keine Fokus hat weil das Programm natürlich dabei nicht gestartet wird.
Wenn ich dei Variable "Titel" befülle kann man sehen, das die Schritte ausgeführt werden aber man sieht das das Fenster nicht aktiv is da die Menu Punkte nicht blau sind sondern leicht hellgrau.
Den Effekt das die "Underlines" kommen ensteht auch nicht weil das Fenster nicht aktiv ist.

Gibt es einen Befehl "Fenster Fokus zuteilen" oder so ?

Gesamt Code mit Experimenten und Kommentaren:

Code: Select all

;Goto, weiter

run C:\ELS_V55R6_DE\ELS5.exe

WinWaitActive, ahk_class WindowsForms10.Window.8.app.0.378734a		; ahk_class des Login Fensters 
Sleep 8000
ControlSend, WindowsForms10.EDIT.app.0.378734a1 ,4711, ahk_class WindowsForms10.Window.8.app.0.378734a ; das tut es 
Sleep 1000
ControlClick, &Login, ahk_class WindowsForms10.Window.8.app.0.378734a	

Sleep 4000

WinGetActiveTitle, Titel
;MsgBox, Das aktive Fenster ist "%Titel%"

weiter:
;EnvSet, Titel, ELS5 - ODBC - AKZO [DOM] ; Versuch mit Titel setzen bei GOTO was auch geht
;MsgBox, Das aktive Fenster ist "%Titel%"
 
Sleep 2000

ControlSend, ,{Down}, %Titel%
;ControlSend, ,{Down}, ELS5 - ODBC - AKZO [DOM] ; Versuch mit Titel direkt bei GOTO

;ControlSend, ,{Down} , ahk_class WindowsForms10.Window.8.app.0.378734a ; Versuch mit ahk_class direkt bei GOTO

Sleep 2000

ControlSend, ,{Down}, %Titel%
;ControlSend, ,{Down}, ELS5 - ODBC - AKZO [DOM] ;Versuch mit Titel direkt bei GOTO

;ControlSend, ,{Down} , ahk_class WindowsForms10.Window.8.app.0.378734a ; Versuch mit ahk_class direkt bei GOTO

Sleep 2000

;WinGetActiveTitle, Titel ; Mal gucken ob er den Fokus hat bei Goto

;MsgBox, Das aktive Fenster ist "%Titel%" ;Mal gucken ob er den Fokus hat bei Goto

ControlSend, ,{Down}, %Titel%

Sleep 2000

ControlSend, , !L, %Titel%

Sleep 1000

ControlSend, ,!S, %Titel%

Sleep 1000

MsgBox, Das aktive Fenster ist "%Titel%"

Re: Programm steuern

Post by just me » 05 May 2019, 06:03

Moin,

kannst Du bitte immer das vollständige Skript einstellen, das Du für Deine Tests benutzt?

Was bitte bedeutet: "Das Programm ist gestartet, aber runter geklappt. also nicht aktiv."

Re: Programm steuern

Post by muemmi » 05 May 2019, 03:21

Ich hab mal folgendes gemacht!

Code: Select all

;ControlSend, ,{Down}, %Titel%
ControlSend, ,{Down}, ELS5 - ODBC - AKZO [DOM]

Sleep 2000

;ControlSend, ,{Down}, %Titel%
ControlSend, ,{Down}, ELS5 - ODBC - AKZO [DOM]

Sleep 2000

WinGetActiveTitle, Titel

MsgBox, Das aktive Fenster ist "%Titel%"

Ich habe den ganzen Anfang mal mit dem Goto umgangen. Das Programm ist gestartet, aber runter geklappt. also nicht aktiv.
Normalerweise hätte ich erwartet das nun das Fenster den Fokus bekommt, er die zwei Befehle ausführt und dann sogar den Titel ausließt.

Tut er nicht. De Titel ist dann "Programm Manager"

Die Software ist wohl uralt und wahrscheinlich immer nur auf das aktuelle OS angepasst worden

Re: Programm steuern

Post by muemmi » 05 May 2019, 02:54

morgen..

gute Frage.. ich gug mal wo ich das finde

AutoHotkey_1.1.30.03_setup.exe heißt die Setup Datei

Re: Programm steuern

Post by just me » 04 May 2019, 06:49

muemmi wrote:Soooooo ganz langsam nähern wir uns!
Das sehe ich eher nicht so. Wenn der Window Spy den Titel ausliest und WinGetActiveTitle denselben Titel liefert, sollten auch die Anweisungen WinWait bzw. WinWaitActive mit diesem Titel funktionieren.

Welche AHK-Version (U/A) läuft bei DIr?

Re: Programm steuern

Post by muemmi » 04 May 2019, 05:05

Soooooo ganz langsam nähern wir uns!

Code: Select all

Sleep 2000

ControlSend, ,{Down}, %Titel%

Sleep 2000

ControlSend, ,{Down}, %Titel%

Sleep 2000

ControlSend, ,{Down}, %Titel%

Sleep 2000

ControlSend, ,!L, %Titel%

Sleep 2000

ControlSend, ,!S, %Titel%

Sleep 2000

MsgBox, Das aktive Fenster ist "%Titel%"
Also: Ich hab mal am Ende die Message Box ausgegeben. Nach wie vor der richtige Titel. Glaub auch nicht wirklich das es daran liegt.

Dann hab ich mal mit den "Alt" gebastelt und einen kleinen Fortschritt erziehlt.

Gib ich an:

Code: Select all

ControlSend, ,!, %Titel%
passiert nichts

Gib ich an:

Code: Select all

ControlSend, ,!L, %Titel%
Dann werden oben die "Undelines" aktiv

Den Buchstaben jedoch interpretiert er dann aber nicht sondern er springt in dem linken Fenster zu dem passenden Unterpunkt. Als Beispiel bei dem "!S" zur "Sommerzeit"
Ich hatte mal dann das "L" gegen ein A getauscht und dann sprang er erst zu "Aussenstellen", dann zu "Sommerzeit"
Die Underlines in der Menuzeilen bleiben dann auch schön aktiv.

"Alt" festhalten wäre vlt eine Option und dann das "L" senden, bzw Das "ALT" eine Zeitlang drücken

gibt es sowas wie eine Goto ? dann könnte ich den Anfang mal überspringen

Re: Programm steuern

Post by just me » 04 May 2019, 03:56

Ich dachte mir, dass Du die MsgBox einfach wieder 'entkommentierst':

Code: Select all

WinGetActiveTitle, Titel
;MsgBox, Das aktive Fenster ist "%Titel%" ; <<<<<

Sleep 2000
ControlSend, ,{Down}, %Titel%
...

Code: Select all

ControlSend, !l, %Titel%
Genau!

Re: Programm steuern

Post by muemmi » 04 May 2019, 03:48

hmmm

Du meinst ich soll mal eine Message Box nach dem letzten :

Code: Select all

Sleep 2000
ControlSend, ,{!l}, %Titel%
ausgeben!

Mach ich gleich! Bin gerade erst auf !

Das mit den den geschweiften Klammern hab ich nicht verstanden.

Code: Select all

ControlSend, ,{!l}, %Titel%
sollte besser so sein

Code: Select all

ControlSend, !l, %Titel%
LG

PS: An dieser Stelle mal eine großes Danke für deine Geduld und Mühe

Re: Programm steuern

Post by just me » 04 May 2019, 03:09

Moin,

auf beiden Bildschirmfotos sieht die Titelleiste des ELS5-Fensters so aus, als ob das Fenter nicht aktiv ist. Welchen Titel gibt denn Dein letzter Versuch aus?

Die {..} in

Code: Select all

ControlSend, ,{!l}, %Titel%
sind übrigens eher kontraproduktiv. Man braucht sie nur, wenn die Angaben zu einer Taste mehr als einen Buchstaben brauchen ({Tab}) oder eine Sondertaste normal gesendet werden soll. Z.B. sendet {!} das Ausrufezeichen anstatt des Alt-Modifikators.

Re: Programm steuern

Post by muemmi » 03 May 2019, 09:52

Klar hab ich noch Nerven.. mach seit 30 Jahren IT...

Ist wohl total verrückt!

Ich hab das mal ausprobiert:

Code: Select all

WinGetActiveTitle, Titel
;MsgBox, Das aktive Fenster ist "%Titel%"

Sleep 2000
ControlSend, ,{Down}, %Titel%
Sleep 2000
ControlSend, ,{Down}, %Titel%
Sleep 2000
ControlSend, ,{Down}, %Titel%
Sleep 2000
ControlSend, ,{!l}, %Titel%
Nachdem das Login durch ist landet der Fokus links in der Übersicht neben der kleinen Sonne auf "DOM ELS5"
diese WinGet.. findet den Titel und die MessageBox zeit es sogar wenn aktiv

dir drei "Down" mach er indem er Stück für Stück runterklettert
Meine Annahme war natürlich das er dann auf "Alt" reagiert

Wenn ich jetzt manuell "Alt" drücke (und halte) kommen die Underlines und den Menupunkten. Drücke ich jetzt l oder L dann geht das Untermenu auf und dann Alt + s und die Line startet

Ich habe so den Eindruck das autohotkey den ganzen oberen Block nicht erreicht! würde erklären warum auch die Menuefunktion nicht geht

LG

Re: Programm steuern

Post by just me » 03 May 2019, 09:24

Alt+l ist bei Send-Anweisungen !l.

Wenn Du noch Nerven hast, kannst Du Folgendes probieren:

Stelle sicher, dass Dein Skript keine Anweisung SetTitleMatchMode enthält.
Nimm im Fenstertitel von hinten Stück für Stück die Einzelteile weg, also:

Code: Select all

FensterTitel := "ELS5 - ODBC - AKZO [DOM]"
; dann
FensterTitel := "ELS5 - ODBC - AKZO"
; dann
FensterTitel := "ELS5 - ODBC"
;dann
FensterTitel := "ELS5 "
Wenn jetzt das richtige Fenster gefunden wird, können wir weitermachen. Wenn nicht, spendierst Du dem Skript die Anweisung:

Code: Select all

SetTitleMatchMode, Slow
und wiederholst das Spiel. Wenn das auch nichts bringt, ist der Weg über den Fenstertitel wohl nicht gangbar.

Re: Programm steuern

Post by muemmi » 03 May 2019, 09:10

Ich hab schon auf einem anderen Weg Erfolg

Ein kurzer Tipp bitte

die Kombi Alt+L wie sende ich die ? {Alt L} ?

LG

Re: Programm steuern

Post by muemmi » 03 May 2019, 07:30

Zuerst kommt natürlich das "Login Fenster"

Dann macht das Programm ja den Login.. der ja klappt

und dann sofort das ELS Fenster.. ich glaub ja das liegt an den eckigen Klammern

hier mal ein Bild unmittelbar nach dem Login
FO2.PNG
FO2.PNG (38.29 KiB) Viewed 1172 times

Re: Programm steuern

Post by just me » 03 May 2019, 06:22

ELS5 - ODBC - AKZO [DOM]ist das wirklich exakt der Fenstertitel, der zu sehen ist, wenn das Fenster erstmalig erscheint?

Re: Programm steuern

Post by muemmi » 03 May 2019, 03:00

Das bringt er jetzt

Das ELS5 Fenster >%FensterTitel%< wurde nicht erstellt!

Die Variable hat er natürlich durch den Fentertitel ersetzt

Ich habe gerade nochmal versucht nur das Fenster (angemeldet) mit diesem Befehl (mehr steht nicht drin im Programme)

Code: Select all

ControlSend, , {Alt}, ahk_class WindowsForms10.Window.8.app.0.378734a 
Sleep 1000
zu versorgen. Sprich er soll sich das aktive Fenster schnappen dann ein Alt senden. Dann sollte im Prinzip ja oben "Datei" blau also aktiv sein

Tut es natürlich nicht

Aus irgendeinen Grund scheint man das Fenster nicht zu packen zu bekommen

LG

Re: Programm steuern

Post by just me » 03 May 2019, 02:16

OK, fassen wir das für mich noch einmal zusammen:

Nach dem ControlClick öffnet sich ein neues Fenster mit dem sichtbaren Titel ELS5 - ODBC - AKZO [DOM]. Einige Sekunden später erscheint eine MsgBox mit der Meldung, dass dieses Fenster nicht gefunden wurde.

Ich schlage folgenden Test vor:

Code: Select all

#NoEnv
Run C:\ELS_V55R6_DE\ELS5.exe

WinWaitActive, ahk_class WindowsForms10.Window.8.app.0.378734a		; ahk_class des Login Fensters
Sleep 8000
ControlSend, WindowsForms10.EDIT.app.0.378734a1 ,12345, ahk_class WindowsForms10.Window.8.app.0.378734a ; das tut es
Sleep 1000
ControlClick, &Login, ahk_class WindowsForms10.Window.8.app.0.378734a

; Sleep 2000
; WinMenuSelectItem, ELS5 - ODBC - AKZO [DOM] , , 8& ,1&
FensterTitel := "ELS5 - ODBC - AKZO [DOM]"

WinWait, %FensterTitel%, , 8 ; Max. 8 Sekunden auf das Fenster warten.
If (ErrorLevel) ; Timeout
{
   MsgBox, 16, Fehler!, Das ELS5 Fenster >%FensterTitel%< wurde nicht erstellt!
}
Else
{
   WinWaitActive, %FensterTitel%, , 8 ; Max. 8 Sekunden auf die Aktivierung des Fensters warten.
   If (ErrorLevel) ; Timeout
   {
      MsgBox, 16, Fehler!, Das ELS5 Fenster >%FensterTitel%< wurde nicht aktiviert!
   }
   Else
   {
      HWND := WinExist() ; WinWaitActive hat das 'Zuletzt Gefundene Fenster' gesetzt.
      HMENU := DllCall("GetMenu", "Ptr", HWND,"UPtr")
      If (HMENU = 0)
         MsgBox, 16, Fehler!, Auf das Fenstermenü kann nicht zugegriffen werden!
      Else
         MsgBox, 0, OK!, Das Fenstermenü wurde erkannt: %HMENU%.
   }
}
ExitApp
Schau Dir ggf. den in den Meldungen enthaltenen Fenstertitel genau an. Ich habe das wieder nicht getestet.

P.S.:
ControlSend, WindowsForms10.SysListView32.app.0.378734a1 ,{Alt}, ahk_class WindowsForms10.Window.8.app.0.378734a sendet die Alt Taste an ein ListView Control
Du solltest den ersten Parameter (STeuerelement) leer lassen oder ahk_parent verwenden ( :arrow: ControlSend

Re: Programm steuern

Post by muemmi » 02 May 2019, 12:57

hmmm

Nicht Wirklich!

Ist ja schon verflixt! Kann die Zeichen Kombi des Fensternamens vlt ein Problem sein?
Ich hatte was von Fenstertitel temp umzubenennen was gelesen!

Code: Select all

ControlSend, WindowsForms10.SysListView32.app.0.378734a1 ,{Alt}, ahk_class WindowsForms10.Window.8.app.0.378734a 
Sleep 1000
ControlSend, WindowsForms10.SysListView32.app.0.378734a1 ,{Tab}, ahk_class WindowsForms10.Window.8.app.0.378734a
Sleep 1000
ControlSend, WindowsForms10.SysListView32.app.0.378734a1 ,{Tab}, ahk_class WindowsForms10.Window.8.app.0.378734a
Sleep 1000
Was ich nicht verstehe ist warum er nicht hierauf reagiert!
Wenn ich im Fenster das nämlich per Hand mache geht das!

Kann man rausbekommen woran sich das Tool stört ?

LG

Re: Programm steuern

Post by just me » 02 May 2019, 10:01

Dann ist entweder der Fenstertitel ELS5 - ODBC - AKZO [DOM] falsch oder dioie Wartezeit ist zu kurz. Wenn das Fenster sichtbar und aktiv wird, bevor die MsgBox erscheint, ist es wahrscheinlich der Titel. Du kannst aber trotzdem mal mit

Code: Select all

WinWaitActive, ELS5 - ODBC - AKZO [DOM], , 10 ; Max. 10 Sekunden auf das Fenster warten.
versuchen und schauen, ob das mehr Erfolg hat.

Top