AHK v2

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: AHK v2

16 Mar 2016, 06:17

Wie kann ich den Fileread umgehen und das Script im Script hinterlegen?

Hier bekomm ich von der v1 gemeldet das die Funktion unbekannt sei.

Code: [Select all] [Download] GeSHi © Codebox Plus

var:="Hello World!"
DllCall("LoadLibrary","Str",ahkdll:=A_ScriptDir "\AutoHotkey.dll")
DllCall(ahkdll "\ahktextdll","Str","Alias(var," getvar(var) ")`nMsgBox `% var","Str","","Cdecl")
MsgBox end
HotKeyIt
Posts: 1671
Joined: 29 Sep 2013, 18:35
Contact:

Re: AHK v2

16 Mar 2016, 06:37

Welche Funktion? Alias? Das kann nicht sein. Hast du auch die richtigen Versionen heruntergeladen: AutoHotkey_H.

Script im Script geht genauso:

Code: [Select all] [Download] GeSHi © Codebox Plus

Script:="MsgBox Hello World!"
DllCall("LoadLibrary","Str",ahkdll:=A_ScriptDir "\AutoHotkey.dll")
DllCall(ahkdll "\ahktextdll","Str",Script,"Str","","Cdecl")
While DllCall(ahkdll "\ahkReady")
Sleep 100
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: AHK v2

16 Mar 2016, 06:51

Die DLL trägt in der Versionsinfo H019 am Ende.

Das Script meldet, das die Funktion unbekannt sei.

Anscheinend blicke ich nicht wie genau das gehen soll. Bitte zeig mir wie du das folgende als Var im Script an die DLL übergeben würdest mit v1 an v2:

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus

HotKeyIt
Posts: 1671
Joined: 29 Sep 2013, 18:35
Contact:

Re: AHK v2

16 Mar 2016, 07:40

Kannst du hier die Fehlermeldung reinkopieren?
Um Funktionen in den Thread einzubauen kannst du CreateScript verwenden.
Also DllCall(..., "Str", CreateScript("translate_google{}") "`n" DeinScript, "Str", ...)
Oder kopiere die Funktion in eine der Libraries.
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: AHK v2

16 Mar 2016, 07:51

AHK meldet:
Error: Call to nonexistend function
Secifically: getvar(var) ")
MsgBox % var","","Cdecl")

Also ist es eigentlich nicht möglich ein ganzes Script als Variable zu speichern und per DLL zu laden?

Beispielsweise dies:

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus

HotKeyIt
Posts: 1671
Joined: 29 Sep 2013, 18:35
Contact:

Re: AHK v2

16 Mar 2016, 09:01

Du benutzt AutoHotkey_L, für Alias brauchst du Autohotkey_H!
Dein Script ist doch in einer Datei und nicht in einer Variable, wo ist das Problem mit FileRead?
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: AHK v2

16 Mar 2016, 09:09

Okay verstanden.

Ich will das Hauptscript kompilieren. Das Google Translater Tool ist nur ein kleiner Bestandteil. Ich will halt nicht das Script da liegen haben sondern am liebsten alles in der kompilierten EXE. FileInstall würd ich gerne auch umgehen. Es wäre halt schön wenn man es komplett im File speichern könnte.
User avatar
jNizM
Posts: 2318
Joined: 30 Sep 2013, 01:33
GitHub: jNizM
Contact:

Re: AHK v2

16 Mar 2016, 09:17

Warum nicht in verschiedenen Klassen ausgliedern und mit #Include durch Kompilieren zusammenführen?
[AHK] 1.1.29.01 x64 Unicode | [WIN] 10 Pro (Version 1803) x64 | [GitHub] Profile
Donations are appreciated if I could help you
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: AHK v2

16 Mar 2016, 09:18

Weil ich nicht weiß wie das geht :(
HotKeyIt
Posts: 1671
Joined: 29 Sep 2013, 18:35
Contact:

Re: AHK v2

16 Mar 2016, 11:06

Du kannst es einfach mit FileInstall machen, du musst es ja nicht extrahieren.
Du musst aber komplett AutoHotkey_H benutzen und die letzte Version herunterladen, da war ein Problem mit ResGet (Compiler muss auch aktualisiert werden)!
StrGet(&Script+3,"UTF-8") brauchst du nur wenn GoogleScript.ahk als UTF-8 gespeichert wurde, bei ANSI brauchst du nur StrGet(&Script).
Wenn du bei Compiler Compression benutzen willst, brauchen wir auch noch UnZipRawMemory.

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus

User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: AHK v2

17 Mar 2016, 01:57

Mit AutoHotkey_H meinst du v2 oder?

// Edit
Ja meinst du,
das geht aber nicht. Mein Hauptscript das alle Tools umfasst oder zumindest verwaltet ist sehr groß. Massenhaft Libs und sehr viel Code. Das alles auf v2 umzustellen da habe ich weder Lust zu noch bin ich mir sicher, dass ich dies auch hinbekommen würde.

Ich muss nun schauen wie ich das unterbekomme... Entweder per DLL oder halt kompilieren.
Da der Bitdefender die v2 EXE aber als "MIDAS3" erkennt und löscht, wird dies wohl auch mit einer kompilierten Version der Fall sein.
Bei der DLL ist es halt unschön, wenn das Script da liegt und von jedem verändert werden könnte der evtl. gar keine Ahnung von dem hat was er da sieht.

Keine zufriedenstellende Lösung dabei...
HotKeyIt
Posts: 1671
Joined: 29 Sep 2013, 18:35
Contact:

Re: AHK v2

17 Mar 2016, 11:24

fump2000 wrote:Mit AutoHotkey_H meinst du v2 oder?

Nein, es gibt AutoHotkey_H v1 und AutoHotkey_H v2!
Den oberen Script habe ich zum testen mit AutoHotkey_H v1 compiliert und die AutoHotkey.dll von AutoHotkey_H v2 mit FileInstall eingefügt.
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: AHK v2

18 Mar 2016, 02:22

Wenn AHK_H auch in v1 mehr Funktionen hat und ebenfalls aktuell gehalten wird, warum gibts dann AHK_L noch?

Finde ich irgendwie verwirrend...
Anders gefragt, sind alle AHK_L Scripts mit AHK_H v1 ausführbar?

// EDIT

Ein paar Fragen noch zu AHK_H v1

Ich habe nun deinen Code eingefügt:

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus



Was bewirkt If 0?

Ich habe mir das Hilfe File angeschaut und für ahkgetvar, ahkLabel und ahkterminate würde ich so vorgehen:

Code: [Select all] [Download] GeSHi © Codebox Plus

ESC::
hDll.ahkterminate()
Return

F8::
dll_ScriptHwnd:=hDll.ahkgetvar("A_ScriptHwnd")
msgbox % dll_ScriptHwnd
;PostMessage_(dll_ScriptHwnd,0x5555,2,1)
hDll.ahkLabel.Start
Return


Funktioniert aber nicht.
Bei ahkterminate würde ich davon ausgehen, dass der Thread geschlossen wird das Script somit beendet wird.
hDll ist doch korrekt?
In der Hilfe wird es sogar so dargestellt... Oder versteh ich da was falsch?

// Edit2

Das klappt nicht weil es nicht als Thread also nicht per AhkDllThread gestartet wurde, Richtig?
Kann man das trotzdem irgendwie bewerkstelligen?
just me
Posts: 5433
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: AHK v2

18 Mar 2016, 06:10

Moin,

ich habe diesen Thread recht intensiv verfolgt, weil ich das Thema "multi-threading" recht interessant finde. Ich bin auch durchaus geneigt, AHK_H einzusetzen, bisher fehlt mir aber der entscheidende Anlass.

Zur Klarstellung: AHK in seiner aktuellen Form nannte man früher einmal AHK_L. Das war in der Zeit, bevor es zur offiziellen AHK Version gekürt wurde. AHK_H ist eine von HotkeyIt modifizierte Version von AHK und stellt eine Reihe von zusätzlichen, nützlichen Funktionen bereit, u.a. auch Multi-Threading.

Es gibt es sicher gute Gründe, für bestimmte Aufgaben AHK_H zu nutzen oder ganz umzusteigen. Das hier behandelte Beispiel "Google Translate" gehört aber für mich nicht dazu. Ich habe das deshalb auf das handelsübliche AHK 1.1 portiert. Zumindest für den vorgesehenen Zweck scheint es zu funktionieren. arcticirs platzsparenden und performanten Codierungsstil habe ich dabei 'aufgebröselt', weil es in jedem Fall mir und vielleicht auch anderen so leichter fallen mag, dem Code zu folgen. Du kannst die Ergebnisse ja mal vergleichen:

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus

User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: AHK v2

18 Mar 2016, 06:29

Wow da bin ich platt :)
Das ist cool. Nun kann ich das so integrieren ohne es auslagern zu müssen.

Das mit AHK_H ist dennoch sehr interessant. Das Starten mehrere Threads und somit auskoppeln von Funktionen oder oder sonstigen Code ist eine echt geniale Sache.

Ich danke dir für den Code!


@ HotKeyIt:
Es wäre trotzdem schön, wenn du mir das Rätzel noch lösen könntest auf das ich da gestoßen bin.
HotKeyIt
Posts: 1671
Joined: 29 Sep 2013, 18:35
Contact:

Re: AHK v2

18 Mar 2016, 07:41

fump2000 wrote:Anders gefragt, sind alle AHK_L Scripts mit AHK_H v1 ausführbar?
AHK_H ist eine erweiterung zu AHK_L, AutoHotkey.dll war der Auslöser für AutoHotkey_H, Lexikos hat kein Interesse an einer dll variante und die zusätzlichen Funktionen und Features habe ich eingebaut wenn diese gebraucht wurden.

Der einzige was beachtet werden muss, in AHK_H v1 ist #NoEnv default und man muss GetEnv benutzen um die Environment Variablen zu bekommen.
Desweiteren behält VarSetCapacity(var,100) den Speicher Inhalt der vorherigen Variable, das ist nützlich wenn man z.B. ein Struct() array erweitern will.
Sonst sollte alles kompatibel zu AHK_L sein.
Was bewirkt If 0?
Der code wird einfach nie ausgeführt und die Dateien werden zwar von Ahk2Exe ein die Exe eingefügt aber nicht mit FileInstall extrahiert sondern mit ResGet direct in den speicher geladen.

Ich habe mir das Hilfe File angeschaut und für ahkgetvar, ahkLabel und ahkterminate würde ich so vorgehen:

Korrekt, entweder änderst du AhkThread für v2 deine dll zu laden oder du benutzt die Funktionen über DllCall, z.B.: DllCall(MemoryGetProcAddress(hDll,"ahkgetvar"),"Str","var","UInt", 0, "Str").

EDIT:
ahkgetvar return type ist "Str"!
User avatar
fump2000
Posts: 313
Joined: 04 Oct 2013, 17:31

Re: AHK v2

18 Mar 2016, 08:55

Danke dir!

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 5 guests