Verwendung von Dateiinhalten

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
jNizM
Posts: 2665
Joined: 30 Sep 2013, 01:33
GitHub: jNizM
Contact:

Re: Verwendung von Dateiinhalten

25 Feb 2015, 10:27

haha :D
sorry strobo.. wohl überlesen ;)
[AHK] 1.1.32.00 x64 Unicode | [WIN] 10 Pro (Version 2004) x64 | [GitHub] Profile
Donations are appreciated if I could help you
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: Verwendung von Dateiinhalten

25 Feb 2015, 10:31

Ich hab danach gesucht aber nichts gefunden :( per Google sowas zu suchen ist auch nicht so leicht. An TF.ahk hab ich auch so gar nicht gedacht...
strobo
Posts: 125
Joined: 30 Sep 2013, 15:24

Re: Verwendung von Dateiinhalten

25 Feb 2015, 12:39

@jNizM: Alles cool, ich wunderte mich auch tatsächlich nur über den OP.
@fump2000: "TF autohotkey" erster treffer bei einer bekannten suchmaschine. Das mit den Ausreden müssen wir noch üben. :) und nwm und zurück on-topic.
just me
Posts: 7408
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Verwendung von Dateiinhalten

25 Feb 2015, 16:10

@strobo: Meiner Meinung nach ist TF ein ineffektives Monster, das man nur dann nutzen sollte, wenn man nicht die Möglichkeit hat, sein konkretes Problem selbst oder mit Hilfezu lösen.
strobo
Posts: 125
Joined: 30 Sep 2013, 15:24

Re: Verwendung von Dateiinhalten

25 Feb 2015, 20:33

@just me: Da magst du recht haben. TF kann aber wahrscheinlich Zeilen ersetzen/einfügen usw (danach fragte der OP 'damals') und dann könnte man sich bei Interesse auch den source code der entsprechenden Funktionen da angucken (oder bei string-things). Die Lösung der topic-Frage erreicht man (IMHO besser) ohne TF oder Zeilen ersetzen/einfügen, hierfür wollte ich es nicht empfohlen haben.
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: Verwendung von Dateiinhalten

26 Feb 2015, 03:50

Ich habe wirklich nach TF und ahk gesucht ich muss meine Suchmethode überdenken aber ich habe gesucht das ist keine ausrede :) das andere hab ich ja auch gefunden.

Hab mir das TF angeschaut und es ist wirklich ein riesen Monster. Da stell ich lieber um auf INI und parte mir die Werte so zurecht wie ich es brauche.
User avatar
jNizM
Posts: 2665
Joined: 30 Sep 2013, 01:33
GitHub: jNizM
Contact:

Re: Verwendung von Dateiinhalten

26 Feb 2015, 04:13

Hab dir ja ein Beispiel gegeben wie das Ganze mit .ini aussehen 'könnte'. ;)
[AHK] 1.1.32.00 x64 Unicode | [WIN] 10 Pro (Version 2004) x64 | [GitHub] Profile
Donations are appreciated if I could help you
strobo
Posts: 125
Joined: 30 Sep 2013, 15:24

Re: Verwendung von Dateiinhalten

26 Feb 2015, 07:47

@fump2000: Ich fands nur _sehr leicht_ zu finden und wollte dir auch gar nichts unterstellen.
Wenn man jetzt .ini(s) einsetzen will, ist es IMHO nicht optimal window-title als section-header zu nehmen, da zwei fenster einer session den gleichen Titel haben können (?zwei gleiche section-header?), btw numerical-window-id hätte das problem nicht.
just me
Posts: 7408
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Verwendung von Dateiinhalten

26 Feb 2015, 11:31

strobo wrote:... , btw numerical-window-id hätte das problem nicht.
Du meinst aber hoffentlich nicht das von AHK unter der Bezeichnung ID gelieferte Handle?
strobo
Posts: 125
Joined: 30 Sep 2013, 15:24

Re: Verwendung von Dateiinhalten

26 Feb 2015, 13:29

Doch (also z.b. id = winexist("A")), wo liegt das problem?
just me
Posts: 7408
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Verwendung von Dateiinhalten

26 Feb 2015, 15:34

Darin, dass das Handle jedesmal mehr oder weniger zufällig neu vergeben wird, wenn das Fenster erzeugt wird. Es ist sehr unwahrscheinlich, dass es nach einem Neustart identisch ist.
strobo
Posts: 125
Joined: 30 Sep 2013, 15:24

Re: Verwendung von Dateiinhalten

26 Feb 2015, 18:41

Richtig, der section-header enthält diesbezüglich dann keine verwertbare information, die steht einzig in der section (über sections kann man einigermassen bequem iterieren). Die section-header sind dann wenigstens session-mässig eindeutig (im gegensatz zu window-title).
Ich werde den .ini-Ansatz aber nicht fit machen (fit ist er für mein Verständnis immer noch nicht), es war nur eine neutrale Anmerkung dazu.
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: Verwendung von Dateiinhalten

27 Feb 2015, 06:26

Ich hab es nun auch INI umgestellt, ich muss sagen das geht einfacher als gedacht. Ich habe die eigentlichen Funktionen des Originalcodes gar nicht groß angepasst sondern eigentlich nur Code hinzugefügt der aus der INI das nötige rausholt und so in eine VAR schreibt das der Rest vom Script damit umgehen kann.
Beim Speichern war es schon etwas aufwendiger, dazu habe ich einen Code erstellt der jeden Fenstertitel mit den vorhandenen vergleicht. Es ist sicherlich etwas verzögerter verhindert aber doppelte Einträge. Ein vorhandener Eintrag wird lediglich aktualisiert. Nicht vorhandene werden hinzugefügt.

Ich wüsste nicht wie man etwas anderes als die Fenstertitel verwenden sollte. Alles andere ist ja von Session zu Session oder sogar von Programstart zu Programstart anders.

Code kommt sobald ich fertig bin. Möchte noch ein paar Dinge hinzufügen.
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: Verwendung von Dateiinhalten

03 Mar 2015, 16:51

Hallo erstmal :)

Ich steh grad auf dem Schlauch...
Im Code vom DockWin gibt es diesen Teil zum wiederherstellen der Fenster:

Code: Select all

Loop, Parse, SECTION_TEXT,`n
	{
		SectionFound:=1
		Win_Title:="", Win_x:=0	, Win_y:=0, Win_width:=0, Win_height:=0, Win_maximized:=0
		;Parse the elements in the CSV to extract recorded data
		Loop, Parse, A_LoopField, CSV 
			{
				EqualPos:=InStr(A_LoopField,"=")
				Var:=SubStr(A_LoopField,1,EqualPos-1)
				Val:=SubStr(A_LoopField,EqualPos+1)
				IfInString, ParmVals, %Var%
					{
						;Remove any surrounding double quotes (")
						If (SubStr(Val,1,1)=Chr(34)) 
							{
								StringMid, Val, Val, 2, StrLen(Val)-2
							}
							Win_%Var%:=Val
					}
			}
		;Seems to be an iteration problem...
		if (Win_Title = "")
			continue
		;Make sure we're matching something new each time we move a window
		WinGet, matches, list, %Win_Title%,,,
		
		m_id := ""
		Loop, %matches%
			{
				cid := matches%A_Index% 
				Loop, %handle_list%
					{
						h := handle_list%A_Index%
						if (h = cid)
							{
								m_id := cid
								WinGet, MainState, MinMax, ahk_id %m_id%
								msgbox % "Win_maximized=" Win_maximized " - MainState=" MainState " - m_id=" m_id
								handle_list%A_Index% := 0
								break 2
							}
					}
			}
		if (Win_maximized=1)
			msgbox buh
			
		If ((Win_maximized = 1) and (m_id not = ""))
			{ 
				if (MainState=0 || MainState=-1)
					msgbox
				WinRestore, ahk_id %m_id%
				WinActivate, ahk_id %m_id%
				WinMaximize, ahk_id %m_id%
				PostMessage, 0x112, 0xF030,,, ahk_id %m_id% ; 0x112 = WM_SYSCOMMAND, 0xF030 = SC_MAXIMIZE
				WinGetTitle, t, ahk_id %m_id%
				msgbox
			} Else If ( (StrLen(Win_Title) > 0) and (m_id not = "") )
				{ 
					WinRestore, ahk_id %m_id%
					WinActivate, ahk_id %m_id%
					WinGetTitle, t, ahk_id %m_id%
					WinMove, A,,%Win_x%,%Win_y%,%Win_width%,%Win_height%
				}
	}
Die Sache ist die, die Variable Win_maximized wird zwar erstellt und hat auch den aus der INI ausgelesenen Wert bzw. der eingelesene String wird geparst und so kommt der Wert 1 oder 0 in die Variable.
Lese ich den Teil aus mit msgbox % "Win_maximized=" Win_maximized " - MainState=" MainState " - m_id=" m_id erhalte ich auch die Werte.
Jedoch wird die Variable Win_maximized in der anschließenden if Prüfung einfach übergangen... Ich kappier nicht warum. Baue ich eine weitere Var ein und befülle sie mit einem Wert kann ich diesen auch normal per if prüfen aber bei dieser Var geht es nicht.

Kann mir irgendwer sagen warum das so sein kann? Ich verzweifel hier noch. Ich erhalte kurz vor her per msgbox noch genau die Werte die in der Bedingung geprüft werden und dennoch wird sie übergangen?! Ist für mich völlig unlogisch...

Hilfe :)

// EDIT:

Komisch... Ich verstehe es einfach nicht. Ändere ich die if Prüfung von If ((Win_maximized = 1) and (m_id not = "")) in If ((Win_maximized > 0) and (m_id not = "")) ab dann funktioniert es. In der msgbox ist der Wert für Win_maximized aber immer 1 nicht mehr und auch nicht weniger.

Was läuft da schief???
just me
Posts: 7408
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Verwendung von Dateiinhalten

04 Mar 2015, 03:42

Ich denke, dass in Win_maximized mehr als nur eine einsame 1 steht. Wenn maximized die letzte Option in einer Zeile ist, folgt darauf normalerweise der Zeilenwechsel `r`n. Loop, Parse, SECTION_TEXT,`n entfernt nur das `n. Es gibt aber auch die Option, andere unerwünschte Zeichen entfernen zu lassen.
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: Verwendung von Dateiinhalten

04 Mar 2015, 04:51

Klar... Du hast recht. Darauf bin ich nicht gekommen.
just me wrote:Es gibt aber auch die Option, andere unerwünschte Zeichen entfernen zu lassen.
Meinst du während des parsen oder hinterher?
just me
Posts: 7408
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Verwendung von Dateiinhalten

04 Mar 2015, 05:41

Oh, fump. Was glaubst Du? Wofür macht sich Ragnar die Mühe, eine deutsche Version der Hilfe zu erstellen und dabei auch noch die Beispiele zu übersetzen?

Wenn ich in einer Variablen nach Zeilen parsen würde, würde ich die Behandlung des Zeilenwechsels genau dort unterbringen.
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: Verwendung von Dateiinhalten

04 Mar 2015, 05:51

Ja.... man... hab das mit ZuEntfernendeZeichen immer überlesen weil noch nie gebraucht.
Hatte es aber eben gesehen nachdem ich gefragt habe, warst jetzt nur mit deiner Antwort schneller.

Entschuldigung.

//EDIT:

Nun hab ich es so angepasst Loop, Parse, SECTION_TEXT,`n,`r dennoch wird die 1 nicht als 1 wahrgenommen...

//EDIT2:

man man man... ich sollte echt nochmal zur Schule... komm mir vor wie so ein nörgelndes Kleinkind... Naja. Es geht nun. Im Script wird CrLf als Var gebildet mit `r`n nun habe ich dies umgestellt auf `n`r und jetzt läuft natürlich auch das parsen vernünftig.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: Bing [Bot] and 4 guests