Fenster wechseln WinExist

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Julian
Posts: 10
Joined: 22 Apr 2020, 04:57

Fenster wechseln WinExist

01 May 2020, 09:57

ich möchte von einem Fenster zum nächsten wechseln. Bisher mache ich das so: send, {ALTDOWN}{TAB}{ALTUP} ;
das ist aber nicht sehr zuverlässig.
Vermutlich geht es auch mit WinExist. Aber ich habe die Syntax nicht verstanden. Außerdem braucht man noch den Titel des Fensters. Mit dem Active Window tool sehe ich schon was, weiß aber nicht was da angeben soll.
ZB:
>>>>>>>>>>( Window Title & Class )<<<<<<<<<<<
AutoHotkey Community - Post a new topic - Mozilla Firefox
ahk_class MozillaWindowClass

Mir würde helfen, wenn ich ein konkretes Beispiel bekommen könnte um in ein bestimmtes Fenster wechseln.
So zeigt mir Active Window ein solches Fenster an:

>>>>>>>>>>( Window Title & Class )<<<<<<<<<<<
Z:\Musik\select
ahk_class CabinetWClass

Danke!
Julian
Posts: 10
Joined: 22 Apr 2020, 04:57

Re: Fenster wechseln WinExist

01 May 2020, 12:04

mache ich was falsch? Frage anders formulieren? Hat jemand einen Tipp wie ich hier weiter komme?
Danke!
User avatar
Scr1pter
Posts: 1275
Joined: 06 Aug 2017, 08:21
Location: Germany

Re: Fenster wechseln WinExist

01 May 2020, 13:57

Code: Select all

F1::
WinActivate, ahk_class MozillaWindowClass ; Firefox in den Vordergrund bringen
return
Versuch es mal damit.

Grüße
Please use [code][/code] when posting code!
Keyboard: Logitech G PRO - Mouse: Logitech G502 LS - OS: Windows 10 Pro 64 Bit - AHK version: 1.1.33.09
BNOLI
Posts: 548
Joined: 23 Mar 2020, 03:55

Re: Fenster wechseln WinExist

01 May 2020, 14:12

:arrow: WinGet() (2.Beispiel, bzgl. Ermittlung von Details aller Fenster). :arrow: Array erstellen zum Speichern aller 'Kennungen' (z.B. IDs). Mittels :arrow: Hotkey(s) das Array der Reihe nach abarbeiten um das jeweilige Fenster mit :arrow: WinActivate zu aktivieren. Ein Schnellschuss :)
Remember to use [code]CODE[/code]-tags for your multi-line scripts. Stay safe, stay inside, and remember washing your hands for 20 sec !
Julian
Posts: 10
Joined: 22 Apr 2020, 04:57

Re: Fenster wechseln WinExist

03 May 2020, 04:25

danke, probiere ich aus
Julian
Posts: 10
Joined: 22 Apr 2020, 04:57

Re: Fenster wechseln WinExist

04 May 2020, 12:55

Hat funktioniert. Da stoße ich auf das nächste Problem: Der Cursor steht jetzt irgendwo auf dem Bildschirm, muß aber jetzt ins aktivierte Fenster, um dort was auszulösen. Ich hatte gehofft, dass durch die Fenster-Aktivierung auch der Cursor folgt. Kann mir hier noch jemand helfen? Danke!
BNOLI
Posts: 548
Joined: 23 Mar 2020, 03:55

Re: Fenster wechseln WinExist

04 May 2020, 14:20

Würdest du das "hat funktioniert" mal zeigen? Denke es sollte kein größeres Problem sein den Cursor fensterabhängig zu plazieren.

Hier übrigens noch ein artverwandter Thread mit ein paar interssanten facts: https://www.autohotkey.com/boards/viewtopic.php?f=76&t=69715
Remember to use [code]CODE[/code]-tags for your multi-line scripts. Stay safe, stay inside, and remember washing your hands for 20 sec !
Julian
Posts: 10
Joined: 22 Apr 2020, 04:57

Re: Fenster wechseln WinExist

06 May 2020, 05:30

Fenster wechseln.PNG
Fenster wechseln.PNG (93.77 KiB) Viewed 1953 times
ich will vom linken Fenster in das rechte wechseln und dort die einzige Datei anklicken - linksklick.
F1::
WinActivate, ahk_class Afx:00400000:b:00010003:00000006:00270887
return

der Cursor steht dann aber immer noch im linken Fenster. Innerhalb eines Fensters, also dort wo der Cursor steht, weiß ich wie man die Maus bewegt:
mouseClick, left, 344, 108 ; Feld Dateiname
Aber dazu muss ich erstmal in das Fenster kommen.
just me
Posts: 9481
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Fenster wechseln WinExist

06 May 2020, 05:53

Moin,

welches 'Fenster' genau hat denn die Klasse Afx:00400000...?

Das Mp3tag Fenster sollte man ja auch über den Titel und die Exe-Datei identifizieren können: WinActivate, Mp3tag ahk_exe Mp3tag.exe (oder ähnlich). Wenn es tatsächlich aktiviert wird, sollte es auch den Eingabefokus bekommen. Hilfreich wäre es, wenn Du das Control auf der rechten Seite identifizieren könntest. Aus AHK-Sicht sieht das zunächst einmal wie ein ListView aus.
User avatar
LuckyJoe
Posts: 341
Joined: 02 Oct 2013, 09:52

Re: Fenster wechseln WinExist

06 May 2020, 07:06

Hi,

folgendes Script funktioniert bei mir:

Code: Select all

IfWinExist, ahk_exe Mp3tag.exe
{
	Sleep, 500
	WinActivate, Mp3tag
	Sleep, 500
	ControlFocus, SysListView321, Mp3tag
	Sleep, 500
	Send, {Down}
}
Wichtig ist wohl das Send, {Down}, weil das Listview-Fenster wohl "aktiv" ist, aber noch nicht der Eintrag. Überprüfen kann man das, wenn man mit den Sleep's die Änderungen in dem Fenster beobachtet. Die Sleep's können dann auch entfernt werden. Dass es funktioniert, kann ich dadurchg überprüfen, indem ich nach dem Script die F2-Taste drücke und damit den Listeneintrag editieren kann.
Herzliche Grüße aus dem Rheinland
Lucky Joe
BNOLI
Posts: 548
Joined: 23 Mar 2020, 03:55

Re: Fenster wechseln WinExist

06 May 2020, 07:09

MP3Tag kann aber mehr, und dazu gehört die Verarbeitung per :arrow: Scripting und der Start einzelner Dateien/Ordner über die :arrow: Befehlszeile. Wenn sich so das Turnen durch Fenster weitgehenst vermeiden ließe, wäre das (m)eine bevorzugte Option.
Remember to use [code]CODE[/code]-tags for your multi-line scripts. Stay safe, stay inside, and remember washing your hands for 20 sec !
Julian
Posts: 10
Joined: 22 Apr 2020, 04:57

Re: Fenster wechseln WinExist

06 May 2020, 07:48

danke für die Info's. Das mit dem MP3TAG ist nur ein Beispiel, ich möchte gerne gezielt Fenster wechseln können, für Automatisierungen kommt das häufig bei mir vor. Ich kann noch nicht so recht mit den Informationen aus dem Tool Active Window Info umgehen, dort hatte ich diese kryptische Info her. So sieht die ganze Information aus:
Fenster2.PNG
Fenster2.PNG (18.38 KiB) Viewed 1907 times
User avatar
LuckyJoe
Posts: 341
Joined: 02 Oct 2013, 09:52

Re: Fenster wechseln WinExist

06 May 2020, 10:33

Hi,

lies dir doch mal die Hilfe zu WinActivate und anderen Themen zu "Fenster" durch. Erklärt sich doch recht einfach. Oder stell deine Frage etwas konkreter.
Herzliche Grüße aus dem Rheinland
Lucky Joe
User avatar
Scr1pter
Posts: 1275
Joined: 06 Aug 2017, 08:21
Location: Germany

Re: Fenster wechseln WinExist

06 May 2020, 12:29

Und vergesst nicht, dass WinWaitActive auch hilfreich sein kann ;)

Außerdem schließe ich mich BNOLIs (indirekten) Vorschlag an,
dass man ruhig mal prüfen sollte, ob man auch auf Script-ebene arbeiten kann.
Das hat jetzt auch nichts direkt mit diesem Beispiel zu tun.

Reine Makros, die auf die Benutzeroberfläche (BO) angewendet werden, neigen leider viel schneller zu Fehlern.
Speziell nach Software-Updates kann es oft zu Problemen kommen, wenn z.B. die BO verändert wurde.

Skripten ist (anfangs) schwieriger, aber das Ergebnis wird immer schneller und sicherer sein.

Grüße
Please use [code][/code] when posting code!
Keyboard: Logitech G PRO - Mouse: Logitech G502 LS - OS: Windows 10 Pro 64 Bit - AHK version: 1.1.33.09
BNOLI
Posts: 548
Joined: 23 Mar 2020, 03:55

Re: Fenster wechseln WinExist

06 May 2020, 12:55

Habe bedauerlicherweise bisher keinen Hinweis gefunden, das MP3Tag das Scripten gänzlich über die Kommandozeile unterstützt. Scripten heisst hier "batch'ing" auf der Oberfläche, heisst, über diverse Menüfelder lassen sich Patterns einpflegen, welche dann (durch einen Tastendruck) die entsprechenden Konvertierungen ausführen. Also eine Semi-Automatik.
Remember to use [code]CODE[/code]-tags for your multi-line scripts. Stay safe, stay inside, and remember washing your hands for 20 sec !
just me
Posts: 9481
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Fenster wechseln WinExist

07 May 2020, 05:20

Moin,

hier ist ein Skript, das Dir die notwendigen Informationen liefern sollte. Du startest das Skript, bewegst die Maus über das interessante Fenster (wenn Du willst an die Stelle im Fenster, die Dich besonders interessiert) und drückst Strg+Shift+i.

Die daraufhin angezeigte MsgBox liefert dann folgende Informationen:
  • Mouse Position - die Koordinaten des Mauszeigers relativ zum Fenster
  • Window Title - der Titel des Fensters
  • Window Proc Name - der Name des Prozesses (der EXE), der das Fenster erstellt hat
  • Window Class - der Name der Fensterklasse
  • Control Class - der Name der Controlklasse
  • Control ClassNN - die AHK-interne ClassNN
  • Control Position - die Position des Controls innerhalb des Fensters und die Größe
Diese Angaben sollten genügen, um ein Fenster zu aktivieren (WinActivate), den Mauszeiger an die gewünschte Position zu setzen (MouseMove) und ggf. ein enthaltenes Control direkt anzusprechen (COntrol...). Den Fenstertitel solltest Du auf den eindeutigen Teil reduzieren. Probleme kann es geben, wenn Skript und Fenster über unterschiedliche Rechte verfügen, bei 'modernen' WIndows-Apps (UWP) und bei browserähnlichen Fenstern.

Code: Select all

#NoEnv
CoordMode, Mouse, Window ; just for clarity, it's default
Return
^+i::
   MouseGetPos, XM, YM, WinID, CtlID
   WinGetTitle, WinTitle, ahk_id %WinID%
   WinGetClass, WinClass, ahk_id %WinID%
   WinGet, WinProcName, ProcessName, ahk_id %WinID%
   ControlGetPos, XC, YC, WC, HC, %CtlID%, ahk_id %WinID%
   ControlGet, HCTL, HWND, , %CtlID%, ahk_id %WinID%
   WinGetClass, CtlClass, ahk_id %HCTL%
   Msg := "Mouse Position:`n"
        . "X = " . XM . "  - Y = " . YM . "`n"
        . "`n"
        . "Window Title:`n"
        . WinTitle . "`n"
        . "Window Proc Name:`n"
        . WinProcName . "`n"
        . "Window Class:`n"
        . WinClass . "`n"
        . "`n"
        . "Control Class:`n"
        . CtlClass . "`n"
        . "Control ClassNN:`n"
        . CtlID . "`n"
        . "Control Position:`n"
        . "X: " . XC . " - Y: " . YC . " - W: " . WC . " - H: " . HC
   MsgBox, 0, Currently under Mouse, %Msg%
Return

Esc::ExitApp

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 19 guests