Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

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: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by just me » 08 Mar 2016, 03:17

Der Zugriff gestaltet sich relativ einfach, wenn man sich das o.a. Beispiel von lexikos anschaut. Man braucht dafür nur den im Kommando FileInstall als Parameter Quelle verwendeten Namen, der Ressourcentyp ist immer RCDATA.

(siehe)

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by Peter2 » 07 Mar 2016, 16:39

Peter2 wrote:- der ganze Pfad wird als Struktur in die Exe hineinkompiliert -


haichen wrote:...Die eingebundene Datei findet sich dann immer an derselben Stelle in der kompilierten Exe. Das kannst Du mit dem ResHacker überprüfen...

Ich habe nochmals nachgesehen ...
a) Der Pfad wird nicht als "Struktur" eingebaut; diese wurde mir nur im TotalCommander mit dem MultiArc-Plugin so angezeigt. Aber der Pfad ist drinnen.

b) Ja, er liegt in RcData immer an der gleichen Stelle, aber gemäss der Angabe eben mit oder ohne Pfad.

Damit scheint das nicht unmöglich, aber es ist zu beachten.

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by haichen » 07 Mar 2016, 11:45

Wenn Du programmlogo.png als ressource verwenden willst, ist der Klammerausdruck überflüssig. Fileinstall muss nur da stehen wo du sonst auch deine Funktionen hinschreibst. Es soll gar nicht "korrekt" ausgeführt werden. Der Kompiler bindet dann die Datei in exe ein, extrahiert sie aber nicht wenn die exe ausgeführt wird. Die eingebundene Datei findet sich dann immer an derselben Stelle in der kompilierten Exe. Das kannst Du mit dem ResHacker überprüfen.

Willst Du Fileinstall wie vorgesehen nutzen ist der If-Block ebenso unsinnig. Der Befehl sollte dann dort stehen wo FileInstall automatisch augeführt wird (vor dem ersten return im skript). Fileinstall verpackt beim kompilieren das Bild in die Exe. Beim Ausführen der exe wird das Bild dann in das Verzeichnis extrahiert, das du angegeben hast. In diesem Fall das Arbeitsverzeichnis.

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by Peter2 » 07 Mar 2016, 09:40

Bis jetzt habe ich die einzubindenden Dateien im Scriptverzeichnis gehabt und daher ohne Pfad eingebunden:

Code: [Select all]GeSHi © Codebox Plus

If !(A_IsCompiled)
{
FileInstall, programmlogo.png, programmlogo.png, 0
}

Alles bestens, aber wenn dem Esel zu Wohl ist dann versucht er absolute Pfade:

Code: [Select all]GeSHi © Codebox Plus

If !(A_IsCompiled)
{
FileInstall, x:\Daten\Projekte\Switch\programmlogo.png, programmlogo.png, 0
}

Und jetzt ist der Spass vorbei - der ganze Pfad wird als Struktur in die Exe hineinkompiliert, und das AHK zum Auslesen findet das nicht mehr.
Hat schon jemand absolute Pfade erfolgreich verwendet?

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by haichen » 13 Dec 2015, 08:35

Manche tollen Beiträge findet man immer etwas später. :D
Ganz langsam beginne ich das mit den pointern und dllCall zu begreifen...

Da ich gerade den Text aus Textresourcen wie htm js und css files brauchte, habe ich mir das ganze mühsam zusammengepusselt. Und dann finde ich das hier!!

Da habe ich hier auch gleich die Funktionen zur Textextraktion und zum Soundabspielen angepasst:

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

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by just me » 05 Oct 2015, 15:42

Ich verstehe Dich nicht so ganz. Du kannst doch die DLL per FileInstall in A_AppData oder einem eigenen Unterverzeichnis ablegen, wenn sie noch nicht da ist. Das ist dann nur 1 FileInstall. Außerdem könntest Du für die Installation beider Teile auch ein SetUp-Programm basteln, das natürlich mit erhöhten Rechten ausgestattet sein müsste.

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by highend » 05 Oct 2015, 07:24

Wenn es nur um ein Programm geht würde sich die einmalige Arbeit vielleicht auszahlen - alle Bilder aus der DLL holen und dann per Fileinstall dazupacken

Das wäre gar nicht nötig, ich hab alle .ico Dateien auch einzeln da, ich verpacke sie lediglich in eine .dll (automatisiert). 300 FileInstalls kommen trotzdem nicht in Frage, dann löse ich das Problem lieber anders.

Oder sich das "extract" und "add" von resourehacker anschauen - dass kann man mit Batch dann automatisch beim Kompilieren auslösen.


Funktioniert mit der aktuellen Fassung hier nicht. Das log sagt, er hätte die aufsteigend nummerierten ICONGROUP's hinzugefügt, öffnet man die .dll danach wieder mit dem Resource Hacker, sieht man... weder Icon noch Icongroup Einträge, wobei die Ziel-DLL lustigerweise um die hinzugefügten Icons größer geworden ist. Spielt aber keine Rolle, es gibt ja u.a. Resource Tuner Console...

.

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by Peter2 » 05 Oct 2015, 07:04

highend wrote:... Fragen hielt ich hier aber für die sinnvollere Alternative.

Natürlich. Ich bin hier im Forum auch vor allem ein Fragender ...

Wenn es nur um ein Programm geht würde sich die einmalige Arbeit vielleicht auszahlen - alle Bilder aus der DLL holen und dann per Fileinstall dazupacken. Oder sich das "extract" und "add" von resourehacker anschauen - dass kann man mit Batch dann automatisch beim Kompilieren auslösen.

Code: [Select all]GeSHi © Codebox Plus

@echo off
rem ResHacker.exe command command_parameters
rem -add ExeFile, SaveAsFile, ResourceFile, ResourceMask
rem -addskip ExeFile, SaveAsFile, ResourceFile, ResourceMask
rem -addoverwrite ExeFile, SaveAsFile, ResourceFile, ResourceMask
rem -modify ExeFile, SaveAsFile, ResourceFile, ResourceMask
rem -extract ExeFile, ResourceFile, ResourceMask
rem -delete ExeFile, SaveAsFile, ResourceMask
rem ResHacker.exe -addoverwrite MyProg.exe, MyProgNew.exe, NewImage.bmp , bitmap,128,

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by highend » 05 Oct 2015, 06:36

Und was spricht dagegen, die Bilder aus der DLL zu nehmen und in die EXE zu packen und dann wie beschrieben zu verwenden?

Etwa 300 FileInstall Aufrufe (~300 icons)...

Oder du verwendest ausser dem Programmverzeichnis noch ein Verzeichnis unter "Appdata", wo das Programm sein Zeugs hinlegen kann.

Sicher, das wäre das möglich. Aber bei mehreren hundert FileInstalls auch nicht gerade "super elegant" und es schränkt dann eben auch die Portabilität ein
(da das Data Verzeichnis dann getrennt im %TEMP% oder im %USERPROFILE% liegen müsste) :)

Wenn's nicht geht, dann geht's nicht. Fragen hielt ich hier aber für die sinnvollere Alternative.

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by Peter2 » 05 Oct 2015, 06:05

Und was spricht dagegen, die Bilder aus der DLL zu nehmen und in die EXE zu packen und dann wie beschrieben zu verwenden?
Oder du verwendest ausser dem Programmverzeichnis noch ein Verzeichnis unter "Appdata", wo das Programm sein Zeugs hinlegen kann.

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by highend » 05 Oct 2015, 05:57

Sicher geht das auch anders, aber nur wenn man wiederum per FileInstall die .dll auch wirklich auf dem Rechner ablegen will. Da meine momentane Applikation allerdings zwar in einem administrativ geschütztem Ordner abgelegt werden darf, selber aber nicht mit höheren Rechten laufen soll wäre eure hier vorgestellte Lösung optimal...

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by just me » 05 Oct 2015, 02:24

Um Icons aus einer DLL zu laden, brauchst Du das hier gar nicht (siehe).

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by highend » 05 Oct 2015, 02:09

Wäre es auch möglich, das Ganze mit einer .dll (die dann die zugehörigen icons enthält) Datei zu benutzen, statt mit einer Liste von Grafikdateien?

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by just me » 29 Sep 2015, 01:40

Moin,

so, wie das hier vorgestellt wurde, muss man die Größe des Controls (w... und h...) festlegen. Das sollte ja aber bei Bildern, die man selbst per FileInstall eingebunden hat, kein Problem sein. Angaben wie w-1 oder h-1 bringen hier nichts, weil die Bilder nicht per Gui... Anweisung von AHK geladen werden, und AHK deshalb die Größe der Bilder nicht kennt.

Außerdem muss man den Stil SS_BITMAP (0x0E) (bzw. SS_ICON (0x03)) setzen, der die Art des Bildes festlegt, das das Control später anzeigen soll. Wenn die Göße des Bildes nicht mit der des Controls übereinstimmt muss dem Control auch der Stil SS_REALSIZECONTROL (0x40) zugewiesen werden, allerdings mit der Option +, weil sonst der im Beispiel davor einzeln zugewiesene Stil SS_BITMAP (0x0E) sofort wieder entfernt wird. Zusammengefasst kann man auch die Kombination 0x4E (auch ohne +) zuweisen.

Alternativ (und von mir bevorzugt, weil man die volle Kontrolle über das Ergebnis hat) kann man die Bildgröße mit einem Bildeditor auf die gewünschte Größe anpassen und dann die angepassten Bilder einbinden. Dann braucht es SS_REALSIZECONTROL nicht.

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by jNizM » 28 Sep 2015, 06:14

Also soweit ich weiß nimmt man entweder
Gui, Add, Picture, w200 h200 +0xE hwndHPIC (+0x40 Passt die Bitmap auf die Größe des Steuerelements an)
oder
Gui, Add, Picture, w200 h-1 +0xE hwndHPIC

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by Peter2 » 28 Sep 2015, 05:47

Das heisst, diverse Varianten wie h-1 klappen hier nicht?

BTW: Ich habe auch in der Hilfe und im Forum gesucht, was +0xE im Code heisst - war nicht erfolgreich ...

Code: [Select all]GeSHi © Codebox Plus

Gui, Add, Picture, w200 h200 hwndHPIC Border AltSubmit +0xE +%SS_REALSIZECONTROL%

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by jNizM » 28 Sep 2015, 05:31

Du musst die größe definieren (w & h)
Gui, Add, Picture, x** y** w*** h***, ...

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressourcen

by Peter2 » 28 Sep 2015, 05:19

Vielen Dank - habe es jetzt (fast) hingekriegt mit #Include und zwei verschiedenen Bildtypen.

Aber: die Grössenanpassung habe ich nicht im Griff. Die Bilder sind gross - und bleiben gross, obwohl ich sie anpassen will. Wahrscheinlich habe ich irgendeinen Grundbefehl verbockt ...

Die relevanten Fragmente sind:

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


Die Bilder (1 EMF, 1 PNG) erscheinen zwar im GUI, aber riesig in der Originalgrösse. Ich hatte es auch schon mit h-1 bzw. dem Wert 0x40 (statt Variable) versucht - das Bild bleibt riesig ....

Ich danke für einen Hinweis zu meinem Fehler.

Re: Zugriff auf mit 'FileInstall' eingebundene Skriptressour

by ruespe » 26 Feb 2014, 14:02

Bravo. Gut und verständlich beschrieben. Und dann auch noch ein lauffähiges Beispiel.

Top