Hotstring() Inhalt Clipboard einfügen

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Milchmann
Posts: 112
Joined: 05 Nov 2016, 08:50

Hotstring() Inhalt Clipboard einfügen

Post by Milchmann » 16 Jan 2023, 07:12

Hallo,

wie kann ich mit einem Hotstring(Zkette , Ersatz) auch Inhalte ( Clipboard oder Zeilenwechsel `r) einbringen.
Aktuell wird bei mir nur der komplette Ersatztext eingefügt , ohne diese zu ersetzen, bzw. bringt Hotstring dann Fehler. Mit einer Funktion habe ich es nicht hinbekommen.



Hintergrund: Ich lese einen Liste mit Hotstrings aus und starte dann.

----Liste----
:*:p#::Debug.Print
:*:i#::Inhalt ist %clipboard% `r und wird weiterbearbeitet.

Code: Select all

Loop, read, %pfadinidatei%hotstrings.txt
{
    Loop, parse, A_LoopReadLine, `r`n
    {
			;~ MsgBox % A_LoopReadLine
			if % A_LoopReadLine
			{
				FundPos := RegExMatch(A_LoopReadLine, "O)(.*)::(.*)", HotMust)
				Hotkey, IfWinActive
				Hotstring(HotMust.Value(1), HotMust.Value(2))
			}
Danke Bert

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Hotstring() Inhalt Clipboard einfügen

Post by BoBo » 17 Jan 2023, 03:46

Moin,
falls es sich um A2 handelt (?), stellt sich mir die Frage ob deine Pfadübergabe in den Loop funktioniert?
A2 erwartet (AFAICS) expression-Schreibweise, demnach sollte IMHO %pfad%Dateiname.txt nur bedingt (wenn überhaupt) einen verwertbaren Inhalt liefern? :think:
Ähnliches gilt für die (ungenutzte) MsgBox bzw das If, auch hier wäre das %-Zeichen (zur Erzwingung einer expression) wohl überflüssig.

Code: Select all

Loop read pfadinidatei . "\hotstrings.txt"
   MsgBox A_LoopReadLine
HTH

Milchmann
Posts: 112
Joined: 05 Nov 2016, 08:50

Re: Hotstring() Inhalt Clipboard einfügen

Post by Milchmann » 17 Jan 2023, 04:23

Hallo @BoBo
nein ist Autohotkey 1.1.

Der Import klappt ja und die Hotstringsfunktionieren, ausser welche, wo ich auh wirklich einen Zeilenwechsel oder auch den Inhalt des Clipboards einfügen möchte.

Hast du dazu eine Idee.

Danke

bert

Milchmann
Posts: 112
Joined: 05 Nov 2016, 08:50

Re: Hotstring() Inhalt Clipboard einfügen

Post by Milchmann » 18 Jan 2023, 04:08

Ich verstehe es nicht mehr,

Code: Select all

Test := ":*:i#::Inhalt ist  `r und wird `rweiterbearbeitet."
msgbox % test
aber

Code: Select all

Loop, read, C:\Temp\hotstrings.txt
{
    Loop, parse, A_LoopReadLine
    {
    	Test := A_LoopReadLine
    	msgbox % Test
Beim ersten wird der Zeilenumbruch umgesetzt, lese ich den gleichen String aus der Datei dann nicht? Wo liegt der Fehler?

Bert

Milchmann
Posts: 112
Joined: 05 Nov 2016, 08:50

Re: Hotstring() Inhalt Clipboard einfügen

Post by Milchmann » 23 Jan 2023, 11:51

Jemand eine Idee?

gero
Posts: 159
Joined: 02 Oct 2013, 05:36

Re: Hotstring() Inhalt Clipboard einfügen

Post by gero » 24 Jan 2023, 00:58

Bin mir nicht ganz sicher ob ich dich richtig verstehe ... denke aber, dass du folgendes haben willst:

Code: Select all

Loop,read,C:\Temp\hotstrings.txt
    {
    StringReplace, STRING , A_LoopReadLine , ``r , @ , all
    Loop , parse , STRING , @ 
    	{
        msgbox, % A_LoopField
        ;... hier kannst du mit dem LoopField / Teilstring machen
        ;... was immer du willst
    }
gruss
gero

Milchmann
Posts: 112
Joined: 05 Nov 2016, 08:50

Re: Hotstring() Inhalt Clipboard einfügen

Post by Milchmann » 24 Jan 2023, 05:41

Ok, dann versuche ich es genauer:

Dieser Hotstring:

Code: Select all

Hotkey, IfWinActive
:*:w#::
Test := "wird mit" clipboard "`r`r`rweiterbearbeitet."
Sendinput % Test
return
übernimmt den Inhalt des Zwischenspeichers und gibt dann mit Zeilenumbruch den Text so aus, wie ich das möchte.
Ich schaffe es nicht dies mit

Code: Select all

Hotstring(":*:w#"," ......") 
darzustellen.

Anderes Beispiel:

Code: Select all

Hotkey, IfWinActive
Hotstring(":*:je#",Zeit())
Zeit()
{
Formattime, jetzt, , dd.MM.yyyy HH:mm
return jetzt
}
klappt zwar, aber liest einmal die Zeit ein beim Start, aber aktualisiert diese nicht, wenn ich diese 10 Minuten später mit der Abkürzung abfrage.

Danke

Bert

gero
Posts: 159
Joined: 02 Oct 2013, 05:36

Re: Hotstring() Inhalt Clipboard einfügen

Post by gero » 24 Jan 2023, 09:06

Ich glaube das ist ein Syntax-Problem.
Kannst du damit etwas anfangen ... analog zu deinem Problem ?

Code: Select all

:*:ttt::
FormatTime, AZ,, d.M.yyyy HH:mm
STRING:= % "Jetzt" . "`n" . AZ . "`n" . "machen wir" . "`n" . "das mal so " . "`n" . "____________"
SendInput % STRING
return

just me
Posts: 9406
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Hotstring() Inhalt Clipboard einfügen

Post by just me » 24 Jan 2023, 09:57

Moin,

das Theme Zeilenwechsel hatten wir vor nicht allzu langer Zeit. Die Sequenzen `r, `n und `r`n interpretiert AHK nur dann als CR (0x0D) bzw. LF (0x0A), wenn sie beim Einlesen des Skripts im Text des Quellcodes gefunden werden. Später musst Du die Sequenzen selbst umsetzen, z.B. Text := StrReplace(Text, "``r" , "`r")

Milchmann
Posts: 112
Joined: 05 Nov 2016, 08:50

Re: Hotstring() Inhalt Clipboard einfügen

Post by Milchmann » 25 Jan 2023, 02:19

Danke, hilft mir aber nicht wirklich weiter😎

Mittlerweile geht folgendes:

Code: Select all

Hotkey, IfWinActive
Hotstring(":*:is#", "Inhalt ist  `r und wird `rweiterbearbeitet`r" Clipboard )

Hotkey, IfWinActive
:*:w#::
Test := "Inhalt ist  `r und wird `rweiterbearbeitet`r" Clipboard
Sendinput % Test
return
Was ich hier aber nicht verstehe ist: Beim 2. Hotkey wird jedesmal der Inhalt des Zwischenspeichers neu eingelesen und dann richtig ausgegeben,

Beim 1. wird einmal der Zwischenspeicher ausgelesen und dann immer dieser ausgegeben , egal ob ich den Inhalt des Zwischenspeichers verändere oder nicht.

Was mache ich da falsch?

Danke

just me
Posts: 9406
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Hotstring() Inhalt Clipboard einfügen

Post by just me » 25 Jan 2023, 04:51

Moin,

ich muss zugeben, dass ich bisher kaum Hotstrings benutzt und deshalb auch kaum eigene praktische Erfahrung damit habe. Sei's drum!

Mit der Hotstring() Funktion werden im Normalfall die 'sogenannten automatisch-ersetzenden' Hotstrings erzeugt, die sonst im Script in einer Zeile stehen. Wenn stattdessen eine Subroutine (Label) oder eine Funktion aufgerufen werden sollen, muss in den Hotstring-Optionen ein X (execute/ausführen) stehen. Eine Funktion muss als Funktionsobjekt Func("MeineFunktion") angegeben werden. Der Rückgabewert der Funktion wird dabei nicht beachtet. Wenn ein Text ausgegeben werden soll, muss er wie in einer Subroutine mit einer der Send... Anweisungen abgeschickt werden. Die folgenden zwei Hotstring-Definitionen sind deshalb im Kern identisch:

Code: Select all

; 1:
:*:is#::Inhalt ist  `r und wird `rweiterbearbeitet`r%Clipboard%
; 2:
Hotstring(":*:is#", "Inhalt ist  `r und wird `rweiterbearbeitet`r" Clipboard)
  1. Die 'statische' Definition wird bereits beim Einlesen des Skripts verarbeitet, alles rechts vom Hotstring wird als 'einfacher Text' betrachtet.
  2. Die 'dynamische' Definition wird erst während der Ausführung des Skripts abgearbeitet. Wie alle Funktionsparameter wird auch der Parameter Ersatz/Replacement als Ausdruck behandelt. Enthaltene Variablen oder Funktionsaufrufe werden dabei direkt aufgelöst und landen auch direkt in dem während der Ausführung der Hotstring() Funktion einmalig dynamisch generierten Ersetzungstext.
D.h., die Variable Clipboard wird in Deinem Hotstring() Beispiel genau dann ausgelesen, wenn die Funktion im Scriptablauf erreicht wird.

Milchmann
Posts: 112
Joined: 05 Nov 2016, 08:50

Re: Hotstring() Inhalt Clipboard einfügen

Post by Milchmann » 25 Jan 2023, 05:36

D.h., die Variable Clipboard wird in Deinem Hotstring() Beispiel genau dann ausgelesen, wenn die Funktion im Scriptablauf erreicht wird.
Würde aber ja nach meinem Verständnis bedeuten, rufe ich den Hotstring auf, müsste doch der neue Inhalt des Zwischenspeichers ausgelesen werden. Macht er aber nicht.

Genau so wenig , wie die zeit angepasst wird wenn ich den Hotsring unten neu aufrufe

Code: Select all

Hotkey, IfWinActive
Hotstring(":*:je#",Zeit())
Zeit()
{
Formattime, jetzt, , dd.MM.yyyy HH:mm
return jetzt
}
Bert

just me
Posts: 9406
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Hotstring() Inhalt Clipboard einfügen

Post by just me » 26 Jan 2023, 06:11

D.h., die Variable Clipboard wird in Deinem Hotstring() Beispiel genau dann ausgelesen, wenn die Funktion im Scriptablauf erreicht wird.
Heißt nach meinem Verständnis, dass beim Ausführen der Hotstring() Funktion ein neuer Hotstring erstellt wird und dabei im Ersetzungstext der aktuelle Inhalt der Variablen Clipboard abgelegt wird. Die Hotstring() Funktion wird nicht aufgerufen, sondern ausgeführt, und das in der Regel genau ein Mal.

Und nochmal zum Thema Funktionen:

Code: Select all

#Persistent
Hotkey, IfWinActive
Hotstring(":*X:je#", Func("Zeit"))
Zeit() {
Formattime, jetzt, , dd.MM.yyyy HH:mm
SendInput %jetzt%
}

Milchmann
Posts: 112
Joined: 05 Nov 2016, 08:50

Re: Hotstring() Inhalt Clipboard einfügen

Post by Milchmann » 30 Jan 2023, 04:49

Danke, manchmal kann es ganz einfach sein. :bravo:

Post Reply

Return to “Ich brauche Hilfe”