Tastenbefehle senden

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: Tastenbefehle senden

Re: Tastenbefehle senden

Post by Jules » 05 Jul 2019, 05:40

Hi gregster,

ich habe das grade probiert und es funktioniert :superhappy:

Mir fällt ein Stein vom Herzen...

Ich werd mich auf jeden Fall noch registrieren, wird wohl nicht das einzige Mal sein, dass ich Hilfe brauche.

Vielen vielen Dank für deine Mühe.

Re: Tastenbefehle senden

Post by gregster » 05 Jul 2019, 04:54

Hi Jules, ich hab mal die Arduino Desktop IDE 1.8.9 runtergeladen. Ich nehme an, das ist das Programm - jedenfalls gibt es hier den Shortcut Strg+u für 'Hochladen'.

Ich hatte offenbar Erfolg, sowohl mit Send als auch mit ControlSend (allerdings in Kombination mit ControlFocus). Dieser Test funktioniert bei mir:

Code: Select all

a::Send ^u		; drücke 'a', wenn Window aktiv

b::					; drücke 'b', auch wenn Window inaktiv (aber nicht minimiert)
ControlFocus, , ahk_exe javaw.exe
Controlsend, , ^u, ahk_exe javaw.exe
return
arduino.jpg
arduino.jpg (46.8 KiB) Viewed 2593 times
Wie so häufig funktioniert ControlSend, wenn das Fenster inaktiv ist. Allerdings nicht, wenn das Fenster minimiert ist.

Warum scheitert's also bei Dir? Vielleicht fehlt doch das richtige Timing bei deinem Send und das richtige Fenster ist nicht aktiv.
Und bei ControlSend? Nunja, ohne ControlFocus funktioniert es bei mir auch nicht... vielleicht hast du aber auch mehrere Fenster offen, die auf die Bedingung ahk_exe javaw.exe passen. Dann müsste man es mit einer anderen Variante für WinTitle probieren.

Aber probier doch erstmal die beiden Hotkeys a und b im Code oben... falls Du das noch liest (Registrieren im Forum hätte seine Vorteile ;) )

Re: Tastenbefehle senden

Post by Jules » 04 Jul 2019, 09:37

Ich hab das jetzt alles ausprobiert bzw. jede mögliche Zusammenstellung des Skripts, als auch das Starten als Administrator.
Leider alles erfolglos. Ich vermute jetzt mal stark, dass du mit deiner Annahme zwecks der Java Steuerelemente richtig liegst.
Danke noch für die Aufklärung bezüglich des Syntaxfehlers.

Ja das Porgramm ist frei erhältlich unter: www.arduino.cc
Mit der dazu gehörigen "NeoPixel" Bibliothek welche man aus dem Programm selbst laden kann.

Es handelt sich um ein Programm mit welchem man LEDs ansteuern kann.

Vielleicht bringt mir die von dir angesprochene "Java Access Bridge" ja den gewünschten Erfolg.
Ist auf jeden Fall einen Versuch wert.
Vielen Dank nochmal

Re: Tastenbefehle senden

Post by gregster » 04 Jul 2019, 03:25

Im Zweifel und wenn ControlSend nicht funktioniert (was leider vorkommt) würde ich es erst einmal mit Send und aktiviertem Fenster probieren... Edit: Hmm, wenn ich dich richtig verstehe, funktioniert Send auch nicht. Läuft das Zielprogramm zufällig mit erweiterten Rechten? Dann starte dein Skript 'als Administrator'.

Ich sehe allerdings einen Syntaxfehler in dieser Zeile:

Code: Select all

ControlSend, ^u, ahk_exe javaw.exe
Der erste Parameter bezeichnet das Steuerelement, an das man senden will (kann unter Umständen auch leer bleiben, siehe Doku) - die zu sendenden Zeichen gehören dagegen in den zweiten Parameter (bei ControlSend! Achtung: Send ist da anders, da wäre es der erste Parameter). Syntax:
https://www.autohotkey.com/docs/commands/ControlSend.htm wrote:ControlSend [, Control, Keys, WinTitle, WinText, ExcludeTitle, ExcludeText]
Nun sind Steuerelemente in Java, soweit ich weiß, nicht dem Windows-Standard entsprechend und daher vermutlich nicht durch AHK's Window Spy identifizierbar oder durch ControlSend unmittelbar ansprechbar...

Aber vielleicht funktioniert schon das:

Code: Select all

ControlSend, , ^u, ahk_exe javaw.exe
Beachte dabei das zusätzliche Komma.

Java-Programme sind allerdings nicht ideal für die AHK-Automatisierung und meine Erfahrung damit liegt länger zurück. Es gibt allerdings noch ein "Java Access Bridge" genanntes Interface, wenn ich mich richtig erinnere, das manchmal helfen konnte bei der Automatisierung von Java-Programmmen... ich weiß allerdings nicht, ob das in diesem Fall relevant, hilfreich oder notwendig ist.

Ist das Java-Programm, das Du nutzt, frei bzw. zum Testen erhältlich?

Re: Tastenbefehle senden

Post by Jules » 04 Jul 2019, 02:54

Morgen,
vielen Dank erstmal an dich "gregster". Die Tipps sind auf jeden Fall sehr wichtig. Habe das Skript jetzt dementsprechend umgeschrieben.
Aber es scheint so, als ob der Tastenbefehl immer noch nicht an das Fenster gesendet wird.
Hast du zufällig noch eine Ahnung woran das liegen könnte?

^g::
Run, \\Work\avee\Software\Arduino\New1\New1.ino
WinWait, ahk_exe javaw.exe
ControlSend, ^u, ahk_exe javaw.exe
return

Habe natürlich auch die andere Version ausprobiert und auch WinActivate.

Re: Tastenbefehle senden

Post by gregster » 03 Jul 2019, 11:33

Eine Hotkey-Definition mit mehr als einer Anweisungszeile darf keine Anweisungen in der ersten Zeile aufweisen, da der AHK-Parser sonst denkt, es würde sich um einen Einzeiler handeln und der folgende Code wird ignoriert/ist unerreichbar. Daher eher so:

Code: Select all

^g::
Run, \\etc.... (Programm Pfad funktioniert)
Sleep, 10000
Send, ^u
return
Du könntest außerdem darüber nachdenken, Sleep durch andere Kommandos wie Winwait/WinActivate/etc. zu ersetzen oder zu ergänzen - und dann ggf noch ControlSend... ungefähr so:

Code: Select all

^g::
Run notepad.exe
WinWait, ahk_exe NOTEPAD.EXE
ControlSend, Edit1, This is a line of text in the notepad window., ahk_exe NOTEPAD.EXE
return

Tastenbefehle senden

Post by Jules » 03 Jul 2019, 04:34

Hallo zusammen,

ich will ein Programm mit AHK öffnen und anschließend den Befehl Ctrl+u (Tastenkürzel für Upload des Programms - Arduino) an das geöffnete Fenster senden.
Mit meinem Skript funktioniert zwar das Öffnen, aber nicht das Senden des Befehls.
Ich habe mittlerweile alle Methoden von Send und auch ControlSend ausprobiert, jetzt bin ich ratlos.

Hier das Skript:

^g::Run, \\etc.... (Programm Pfad funktioniert)
Sleep, 10000
Send, ^u
return

Wäre sehr dankbar, wenn mir jemand helfen könnte.
Ich bin leider nicht wirklich erfahren mit der AHK Nutzung.

Top