Mehrere Objekte mit der Maus markieren

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

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

Re: Mehrere Objekte mit der Maus markieren

14 Mar 2018, 09:03

Mein Fehler, sorry!

Code: Select all

SendInput, +{LButton}
Das dein Code überhaupt etwas tut, liegt höchstwahrscheinlich daran, dass AHK wegen des führenden + 'Operators' die ersten zwei Zeilen verbindet. Aus

Code: Select all

#Lbutton::
	+LButton
wird wieder

Code: Select all

#Lbutton::+LButton
Das ist dann eine einzeilige Neubelegung/Umbelegung einerTastenkombination und der folgende Code wird nicht ausgeführt.
User avatar
Meister Lampe
Posts: 66
Joined: 06 Apr 2014, 13:28

Re: Mehrere Objekte mit der Maus markieren

04 Apr 2018, 17:01

Hallo!

Also das mit dem Aufrufen durch den Mausbutton klappt jetzt einwandfrei.
Ich bräuchte nun immernoch einen Trick, damit der Zeiger wieder zur ersten markierten Datei zurückspringt. Das ist ja eigentlich immer diejenige, die man auch zuerst angeklickt (wenn man die Bilder nicht rückwärts markiert). Könnte man also vor dem Befehl +LButton noch diese Datei (bzw. deren Adresse) abspeichern, um dann später zu ihr zurückzuspringen? Und wie realisiert man das?

Viele Grüße von Meister Lampe
just me
Posts: 5515
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Mehrere Objekte mit der Maus markieren

05 Apr 2018, 04:37

Moin,

ich hätte da noch eine recht simple Idee. Wenn Du immer 'von oben nach unten' markierst, könntest Du Dir den Namen der zuerst markierten Datei über einen Hotkey holen. Die könntest Du dann immer als erste Datei umbenennen und anschließend in der Liste übergehen.
User avatar
Meister Lampe
Posts: 66
Joined: 06 Apr 2014, 13:28

Re: Mehrere Objekte mit der Maus markieren

28 Jul 2018, 16:14

Hallo just me!

Ich muß jetzt nochmals nachhaken, wegen einem anderen Problem im Zusammenhang mit Euren Empfehlungen. Ich hatte das Script hingekriegt - zwar noch nicht so perfekt, wie ich es mir vorgestellt habe, aber es funktionierte. Dazu habe ich die von Dir empfohlene Fumktion

Code: Select all

StrReplace(DateienAuswahl , "`n", "`n", DateienAnzahl) ; <<<<<< zählt die Anzahl der Zeilenvorschübe in der Variablen DateienAnzahl
verwendet. Das ging auch alles ganz gut. Bis ich den Code auf einem anderen PC öffnen und laufen lasssen wollte. Dann kam die Fehlermeldung des Editors:

Code: Select all

==> Call to nonexistent function.
     Specifically: StrReplace(DateienAuswahl , "
", "
", DateienAnzahl)
>Exit code: 2    Time: 0.6663
Ich arbeite mit einer relativ neuen AHK-Version (1.1.28.00). Daran kann es doch wohl nicht liegen.
Hast Du eine Idee?

Viele Grüße von Meister Lampe
just me
Posts: 5515
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Mehrere Objekte mit der Maus markieren

29 Jul 2018, 06:00

Moin,

wie man in der Doku nachlesen kann, ist die Funktion StrReplace() mit 1.1.21.00 eingebaut worden. Das war immerhin Ende März 2015, ist also schon etwas her.
User avatar
Meister Lampe
Posts: 66
Joined: 06 Apr 2014, 13:28

Re: Mehrere Objekte mit der Maus markieren

02 Oct 2018, 12:23

Hallo!

Da bin ich wieder.
Mir ist ein anderer Gedanke gekommen. Ich habe mich daran erinnert, daß Ihr mir zu einem anderen Zweck der Verarbeitung mehrerer Dateien bereits einmal die Verwendung von FileMove empfohlen habt. Den damaligen Code habe ich jetzt soweit verändern können, daß er annähernd das tut, was ich mit dem bisherigen vornehmen wollte.
Ich habe die Parse-Schleife folgendermaßen umgeschrieben:

Code: Select all

 Loop, Parse, BilderAuswahl, `n, `r
   {
	  SplitPath, A_LoopField, , Verzeichnis, Erweiterung, LetzteNummer
	  LetzterIndex := SubStr("000" . LetzterIndex, -2)  ; Setzt Index auf 1 in 2 Ziffern
	  LetzteNummer = %AktSign%_%LetzteSign%-%LetzterIndex%
	  LetzterIndex := ++LetzterIndex
	  FileMove, %A_LoopField%, %Verzeichnis%\%LetzteNummer%.%Erweiterung%
   }
return
Das klappt eigentlich ganz gut, sogar mit dem Vorzug, daß es unabhängig davon läuft, ob die Dateinamenserweiterungen ausgeblendet sind oder nicht.
Es gibt jetzt nur noch eine Schwierigkeit und die ähnelt der bei der letzten Methode:
Wenn die Schleife fertig und die Umbennenung abgeschlossen ist, dann bleiben alle bearbeiteten Dateien markiert. Bei dem anderen Script hatte ich es mit Send{Tab} so einrichten können, daß dann gleich die nächste Datei markiert wird - und nur die.
Gibt es eine Möglichkeit, das hier auch hinzubekommen?

Viele Grüße von Meister Lampe
User avatar
Meister Lampe
Posts: 66
Joined: 06 Apr 2014, 13:28

Re: Mehrere Objekte mit der Maus markieren

05 Oct 2018, 12:03

Hallo!
just me wrote: ich hätte da noch eine recht simple Idee. Wenn Du immer 'von oben nach unten' markierst, könntest Du Dir den Namen der zuerst markierten Datei über einen Hotkey holen. Die könntest Du dann immer als erste Datei umbenennen und anschließend in der Liste übergehen.
Das wäre auch Möglichkeit für das in meinem letzten Post beschriebene Problem.
Aber wie erkenne ich den Namen einer Datei um ihn abzuspeichern und wie steuere ich sie später wieder damit an - insbesondere, nachdem sie umbenannt worden ist?
Im Tutorial finde ich zwar einige Keys, um Fenster per ID zu erkennen und zu aktivieren, aber wie man das mit einzelnen Dateien - bei mir sind es Bilder - macht, steht dort nicht.
Das Kniflige dabei wird wohl sein, daß ich nicht nur die Adresse/ID des angeklickten Bildes abspeichern muß, sondern daß auch gleichzeitig alle anderen dadurch markierten Dateien zum Umbenennen in die Variable "BilderAuswahl" abgespeichert werden müssen.

Viele Grüße von Meister Lampe
User avatar
Meister Lampe
Posts: 66
Joined: 06 Apr 2014, 13:28

Re: Mehrere Objekte mit der Maus markieren

10 Oct 2018, 04:16

Hallo!

Hätte doch jemand von Euch noch eine Idee?
Es wäre schön, wenn ich dieses Projekt mal endlich fertig bekäme.
Und ich habe halt nur dieses Forum, mit dem ich mich darüber austauschen kann. Keiner meiner bekannten hat schon was von AHK gehört... :(

Viele Grüße von Meister Lampe
just me
Posts: 5515
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Mehrere Objekte mit der Maus markieren

10 Oct 2018, 04:39

Moin,

ich würde Dir schon helfen wollen. Ich verstehe aber nicht ganz, wohin Du willst. Oben finden sich meiner Meinung nach mehrere offene Enden. Also bitte noch einmal ganz konkret und detaillert: Welches Problem soll nun mit welcher Lösung behoben werden?
User avatar
Meister Lampe
Posts: 66
Joined: 06 Apr 2014, 13:28

Re: Mehrere Objekte mit der Maus markieren

10 Oct 2018, 13:14

Hallo just me!

Also das war's. Es ging hier ein bißchen durcheinander, insbesondere, weil ich nicht mehr an den älteren Thread gedacht hatte, der sich mit der ähnlichen Frage beschäftigte und ich auch ohne es zu wollen ganz ähnlich benannt hatte Mehrere markierte Dateien behandeln.
Meine weiterführenden Fragen hier im Thread ab dem 13.März 2018 (s.u.) würden eigentlich da herein gehören, aber ich hatte zu diesem Zeitpunkt eben dort schon damit begonnen und dachte auch nicht, daß sich daraus noch weiteres ergeben würde. Die eigentliche, sich auf den Titel beziehende Frage war da schon geklärt.
Meister Lampe wrote:
just me wrote:Moin,

Du meinst wohl Mehrere markierte Dateien behandeln.
Ich verstehe immer noch nicht, wie Du das Problem mit der Reihenfolge über die Bestimmung der Anzahl lösen willst. Markierst Du die Dateien in einem Explorerfenster?
Ja, genau. Diese Bilder stammen aus einem Scanvorgang und sind dort in einem Standardschema benannt worden (z.B. img001, img002, ...). Aber die Reihenfolge ist schon so, wie ich sie benötige.
Wenn ich sie umbenne, dann müssen sie zu einzelnen Einheiten zusammengefaßt werden: Z.B. Nr.001_01..Nr.001_10, Nr.002_01..Nr.002_07, ...
Zu diesem Zweck habe ich mir bereits ein für meine Bedürfnisse ganz zufriedenstellendes AHK-Script entworfen. Wenn ich im Umbennenmodus statt den neuen Namen einer Datei den ersten Zählparameter x, dan Komma und dann den zweiten y eingebe, so werden alle darauffolgenden nach dem Schema Nr. x_1 - Nr.x_y benannt. Nur dazu muß ich auch den Parameter y wissen. Statt immer abzuzählen oder zu makieren und Eigenschaften aufzurufen, möchte ich diesen Arbeitsgang mit einbauen.

Viele Grüße von Meister Lampe
Das Umbenennen-Tool hatte ich seitdem immer wieder etwas verbessert, insbesondere durch Deinen Tip mit dem StrReplace. Was aber allen diesen Versuchen gemeinsam ist, ist die Vorgehensweise beim Umbenennen: Angefangen von der ersten Datei, die dazu erst einzeln (!) angesteuert und markiert werden muß, nachdem zuvor alle zusammen markiert wurden, werden alle weiteren nacheinander durch eine Schleife abgearbeitet, wobei der Zeiger mit Tab jeweils zur nächsten springt und die Schleife bei der durch die mit StrReplace herausgefundene Dateienzahl abschließt. Danach springt der Zeiger nochmals einen Schritt weiter, damit man gleich bei der nächsten Datei weitermachen kann.

Jetzt hatte ich mich aber der anderen Möglichkeit entsonnen, stattdessen mit einem Array zu arbeiten, das dann in einer Schleife mit FileMove durchgearbeitet wird. Sowas Ähnliches hattest Du mir ja bereits schonmal in dem anderen Thread vorgeschlagen. Ich habe das jetzt auch versucht und schon ganz gut hinbekommen, wie ich am 2.Oktober berichtete. Damit gibt es aber noch Schwierigkeiten:
- Die Dateien bleiben nach Durchgang der Schleife markiert. Ich würde aber gerne wie bei der anderen Lösung danach gleich den Zeiger auf die nächste Datei setzen.
- Meine Idee dazu: die Adresse der letzten Datei merken und nachher wieder aufrufen, dann Tab. Man könnte das vielleicht über die Array-Nummer machen.
- Aber wie spreche ich eine Datei an und aktiviere sie?

Soweit ist im Augenblick der aktuelle Stand.

Viele Grüße von Meister Lampe
User avatar
Meister Lampe
Posts: 66
Joined: 06 Apr 2014, 13:28

Re: Mehrere Objekte mit der Maus markieren

19 Oct 2018, 17:50

Hallo just me!

Es wäre schön, wenn ich wenigstens das eine Problem, das sich schon seit langem durch diesen und den anderen Thread zieht, gelöst bekäme:

Wie kann ich die Adresse, den Namen, die ID sonst eine eindeutige Angabe von einer Datei, die ich in einem Ordner innerhalb des Windows Explorer anklicke oder markiere, erhalten und wie kann ich diese Datei nach später wieder mithilfe dieser Angabe ansteuern?
Letztlich hatte ich nur deshalb verschiedene Methoden ausprobiert, weil ich bisher keine Lösung für dieses Problem gefunden hatte, du mir aber schon länger auf eine Lösung Hoffnung gemacht hast:
just me wrote:
ich hätte da noch eine recht simple Idee. Wenn Du immer 'von oben nach unten' markierst, könntest Du Dir den Namen der zuerst markierten Datei über einen Hotkey holen. Die könntest Du dann immer als erste Datei umbenennen und anschließend in der Liste übergehen.
Eigentlich ist der Rest des Programms ja fertig und soweit möglich auch getestet.

Viele Grüße von Meister Lampe
just me
Posts: 5515
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Mehrere Objekte mit der Maus markieren

Yesterday, 02:51

Moin Meister,

mein Problem ist immer noch, dass ich Deins vielleicht nicht verstehe.

Das Skript soll ja wohl für den Hausgebrauch oder zumindest für einen eng begrenzten Personenkreis sein. In diesem Fall hat man meiner Meinung nach immer die Möglichkeit, Mausaktionen wie hier den 'Markierungsklick in ein Explorerfenster' auf einen Hotkey umzubiegen. Das liefert dann die Möglichkeit, den kompletten Pfad der markierten Datei einzulesen, am einfachsten über Strg+c und die Zwischenablage.
User avatar
nnnik
Posts: 3356
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Mehrere Objekte mit der Maus markieren

Yesterday, 03:34

Es gibt glaube ich die Möglichkeit den Windows Explorer per COM zu steuern.
Ich habe aber keine Details und weiß nicht mehr wo und ob ich diese Info aus der AHK Hilfe habe.
Recommends AHK Studio
just me
Posts: 5515
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Mehrere Objekte mit der Maus markieren

Yesterday, 12:13

Hi nnnik,

zum Thema COM. ;)
User avatar
Meister Lampe
Posts: 66
Joined: 06 Apr 2014, 13:28

Re: Mehrere Objekte mit der Maus markieren

Yesterday, 13:05

Hallo just me!

Das Script ist nicht für den Hausgebrauch (vielleicht auch verwertbar), sondern für meine Arbeit beim Signieren von Scans, die ich von Originalen im Rahmen der Digitalisierung von Akten u.a. in unserem Archiv erstelle. Dabei haben wir unsere eigene Ordnungsschemen, deshalb auch die für außerhalb stehende Leute etwas merkwürdige Nummerierung. Vorgegeben ist dabei der Name des Bestandes, danach kommt die Nummer der Akte darin und dann die Seite innerhalb der Akte. Weil ich Variablen leider nicht dauerhaft speichern kann, um sie dann je nach Bestand zu ändern, muß diese dazu im Code vorgegeben werden. Das hatte ich wohl vergessen, Dir ebenfalls mitzuteilen. Es steht im Script oben z.B. die Zeile

Code: Select all

AktSign := "X 12--3"
um nachher in der die Signaturen für den Bestand X 12/3 generieren zu können.
Im Allgemeinen liegen die Scans schön nacheinander, sowohl die Akten, als auch die Seiten darin. Die Idee ist deshalb die, daß zuerst alle umzubenennenden Scans ein und derselben Akte markiert werden und diese dann automatisch mit der nächsthöheren Nummer von 0 an aufwärts durchgezählt werden. Aber es gibt natürlich immer mal wieder Ausnahmen, wo etwas fehlt oder anders signiert werden muß. Deshalb öffnet sich dabei eine InputBox zur Bestätigung, die die vorhergesehene Signatur %LetzteSign% anzeigt und in die man auch direkt einen anderen Vorschlag geben kann. Soll die Zählung mit einem anderen Index als Null beginnen, so gibt man diesen mit einem Komma davor ein. Beides läßt sich auch kombinieren. Das ist der erste Teil des eigentlichen Codes:

Code: Select all

!LButton::
	SendInput, +{LButton} 
	
	Clipboard := ""	
	SendInput, ^c
	Clipwait, 1
	If ErrorLevel 										; abbrechen, wenn keine Dateien im Clipboard
	{
		MsgBox, Sie müssen mindestens eine Datei markieren!
		return
	}
	else
	
	BilderAuswahl := Clipboard
	StrReplace(BilderAuswahl , "`n", "`n", BilderAnzahl) ; zählt die Anzahl der Zeilenvorschübe in der Variablen BilderAnzahl
	VorschauAnzahl := BilderAnzahl +1
	LetzteSign := SubStr("0000" . ++LetzteSign, -3)		 ; Erhöht die letzte Signatur um 1 und setzt sie auf 4 Ziffern
	InputBox, BoxSign, Vorschau, "Es werden %VorschauAnzahl% Bilder umsigniert", , 225, 125, , , , ,%LetzteSign%
	If ErrorLevel
	{
		LetzteSign := LetzteSign -1
		return
	}
	else
		
	IfNotInString, BoxSign, ,							; Prüft, ob ein anderer Startidex durch Komma getrennt eingegeben wurde
	{
		LetzteSign := SubStr("0000" . BoxSign, -3)		; Setzt eine neu gewählte Signatur auf 4 Ziffern
		LetzterIndex := 0  								; Setzt Index auf 0
	}	
	else
	{	
		StringSplit, BoxArray, BoxSign, `,
	
		If (BoxArray1 = "")
		{
			LetzteSign := SubStr("0000" . ++LetzteSign, -3)	; Erhöht die letzte Signatur um 1 und setzt sie auf 4 Ziffern
		}
		else
			LetzteSign := SubStr("0000" . BoxArray1, -3)	; Setzt neue Signatur auf 4 Ziffern
		
		LetzterIndex := BoxArray2
	}
	
return
Jetzt fehlt nur noch der eigentliche Umbenennenvorgang. Mit der InputBox wurden bereits alle Parmeter dazu generiert. Mit Enter auf OK wurde sie geschlossen. Jetzt könnte eigentlich die Sache sofort beginnen, wenn die erste Datei der umzubenennenden Dateien angesteuert, aktiviert bzw. markiert wäre. Stattdessen sind immernoch alle Dateien markiert und ich muß noch immer manuell die erste Datei ansteuern und dann ein zweites Script starten (mit NumpadAdd):

Code: Select all

NumpadAdd::
	Send, {F2}
	ParamIndex := VorschauAnzahl
	
	Clipboard := ""	
	SendInput, ^c
	Clipwait, 1
	GanzerName := Clipboard
	SplitPath, GanzerName, , , Erweiterung
	
Loop , %ParamIndex%
		{
			LetzterIndex := SubStr("000" . LetzterIndex, -2)  ; Setzt Index auf 1 in 2 Ziffern
			LetzteNummer = %AktSign%_%LetzteSign%-%LetzterIndex%%Erweiterung%
			Send, %LetzteNummer%
			LetzterIndex := ++LetzterIndex
			Send, {Tab}{F2}
		}
return
Das ist jetzt im Prinzip die Version, mit der ich als erste ins Rennen gegangen bin (also nicht die mit dem FileMove), nur etwas optimiert, damit die Signierung unabhängig von der Einstellung der Dateinamenerweiterung (ein-/ausgeblendet) funktioniert.
Mein Traum ist jetzt, die beiden Module endlich zusammen zu fügen, damit ich sie nicht immer separat starten muß.
Ich hoffe, Dir ist jetzt klar, wohin ich will.

Viele Grüße von Meister Lampe

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 2 guests