Entwickler-Ecke
Dateizugriff - WinExec auf Ressource (.res) anwenden
_Dominik_ - Mi 16.02.11 18:02
Titel: WinExec auf Ressource (.res) anwenden
Hallo, liebe Community!
Ich hab mich grad frisch angemeldet, und würd euch in diesem Zuge direkt mit einem Problem konfrontieren... ich hoffe, niemand nimmt's mir krumm ;)
Also, folgendes hab ich vor:
Da ich aktuell überlege, einen Launcher für ein eigenes Spiel (das noch lang nicht fertig ist) zu schreiben, der unter anderem eine Serial-Nr. Abfrage wie diverse andere Sachen integriert haben soll, arbeite ich mit Delphi 7 und hab mich grade frisch in die Sache mit den Ressourcen eingearbeitet.
Hier ist das Problem:
Ich möchte eine externe, nicht in Delphi geschriebene .exe als Ressource in mein Programm einfügen, und diese dementsprechend aufrufen können. Das Einbinden als Ressource (ich hab probeweise mal lala.res genommen) klappt prima, aber ich finde den Befehl nicht, um darauf jetzt zuzugreifen, beispielsweise mit Winexec.
Hier ist mein aktueller Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShellApi;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm} {$R lala.res}
procedure TForm1.Button1Click(Sender: TObject); begin WinExec ('MyGame.exe',0); end;
end. |
Die Datei MyGame.exe sollte halt in der Delphi-Anwendung integriert sein, und auch nur von ihr aus ausgeführt werden (ich möchte sie also nicht extern mitliefern müssen).
Hoffe, jemand kann mir helfen, und kennt den Befehl, um jetzt noch auf die in lala eingebundene Datei zuzugreifen ;)
Freundlichen Gruß,
- Dominik
Moderiert von
Narses: Color- durch Delphi-Tags ersetzt.
jaenicke - Mi 16.02.11 18:05
Hallo und :welcome:
Erstens musst (*) du die Datei zuerst aus deiner Exe auspacken (z.B. mit TResourceStream, am besten ins Tempverzeichnis).
Zweitens nimm niemals WinExec, das ist 20 Jahre alt und sollte nicht mehr verwendet werden. Nimm lieber ShellExecute oder CreateProcess.
(*) Ja, ich weiß, dass es auch anders geht, aber nicht sinnvoll und nicht einfach...
_Dominik_ - Mi 16.02.11 18:17
Herzlichen Dank, jaenicke! :)
:zustimm:
Puh, ich wusste, dass ich mir da ganz schön was vorgenommen hab, aber es überrollt mich doch ganz schön...
~EDIT~
Ich hab jetzt folgenden Code aus einem Tutorial, das ich einigermaßen einfach fand, zusammengeschraubt (lila = neu hinzugefügt)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShellApi;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm} {$R lala.res}
procedure TForm1.Button1Click(Sender: TObject); var trs:TResourceStream; S: String; begin trs := TResourceStream.Create(HInstance,'lala','RCDATA'); try TRS.SaveToFile(S); finally TRS.Free;end; end;
end. |
Ich bekomme jetzt folgende Fehlermeldung, wenn ich auf den Button klicke im laufenden Test-Programm:
Zitat: |
Project Project1.exe raised exception class EResNotFound with message 'Resource lala not found'. Process stopped. Use Step or Run to continue. |
Ich hab schon lala.res, MyGame.exe statt dem lala versucht, aber es klappt nicht. :(
Moderiert von
Martok: Delphi-Tags & Zitat gesetzt
jaenicke - Mi 16.02.11 19:50
Dann hast du einen anderen Namen oder Typ als du hier hingeschrieben hast. Nach deinem Code müsste dein Ressourcenskript so aussehen:
Quelltext
1:
| lala RCDATA MyGame.exe |
Wie sieht es denn aus?
Martok - Mi 16.02.11 19:54
Hallo!
Bitte verwende für Quellcode die entsprechenden [delphi
]-Tags, dann wird er "schöner" dargestellt als im Fließtext. Beispiel:
Quelltext
1:
| <span class="inlineSyntax"><span class="codecomment">{PROTECTTAGbb7f0ea1bc888f796f67ea871e6bbcc1}</span></span> |
Wird:
Viele Grüße,
Martok
_Dominik_ - Mi 16.02.11 21:39
@Martok
Alles klar, pardon - musste mich jetzt erst mal hier zurechtfinden, und hab das System mit dem Ausklappen der Funktionen jetzt erst so ganz geschnallt. Werd ich ab jetzt machen :)
@jaenicke
Der Typ stimmt nicht, das war's - ich hab rc_data in der .res, aber im Code rcdata. Dass das jetzt so viel ausmacht, find ich ja fast schon etwas albern... wie auch immer, Danke für deine Geduld und hilfreichen Tipps!
Super, jetzt kann's weitergehen! Klasse :dance2:
Eine Frage hätte ich noch:
Ist es denn wirklich unmöglich, das Programm MyGame.exe quasi von 'innerhalb' der Delphi-Anwendung zu starten? Wär schade... :o
jaenicke - Mi 16.02.11 21:49
_Dominik_ hat folgendes geschrieben : |
Ist es denn wirklich unmöglich, das Programm MyGame.exe quasi von 'innerhalb' der Delphi-Anwendung zu starten? Wär schade... :o |
Unmöglich nicht, aber nur mit relativ hässlichen Tricks. Und die führen dann oft dazu, dass Virenscanner Verdacht schöpfen und das Programm als Virus erkennen. Zudem ist es relativ kompliziert.
Ein Beispiel findest du hier:
http://www.michael-puff.de/Programmierung/Delphi/Importe/Nico/ (inmemexe.zip)
Aber ich verstehe ohnehin nicht was das ganze bringen soll. Ich meine, wozu ein Launcher, wenn das Programm doch ohnehin auch von dir ist? Da reicht schließlich eine Exe, dann hast du das ganze Problem nicht. :gruebel:
Und wegen der Seriennummerabfrage:
Das ist ohnehin Blödsinn. Entweder ist das Programm es wert, dann findet sich auch jemand, der es (meistens in Minuten) knackt, oder es ist das nicht wert, dann kannst du dir die Seriennummer auch sparen...
_Dominik_ - Do 17.02.11 00:21
Hmmm... na schön, so wichtig ist es dann nicht. Da scheint diese Lösung wohl wirklich die beste zu sein!
Danke nochmals!
Zitat: |
Aber ich verstehe ohnehin nicht was das ganze bringen soll. Ich meine, wozu ein Launcher, wenn das Programm doch ohnehin auch von dir ist? |
Mein Spiel mache ich mit einem Creator, also keiner wirklichen Programmiersprache. Da diese Teile nun oft sehr limitiert sind, möchte ich mit einem Launcher etwas Komfort hinzufügen, also etwa Grafikoptionen etc. - und nebenher würd ich halt gern diese Seriennummer wenigstens einmal vorher abfragen, und entsprechend der Eingabe entweder die Demo oder die Vollversion entpacken und dann starten
(so ungefäähr! ;) )
Zitat: |
Und wegen der Seriennummerabfrage:
Das ist ohnehin Blödsinn. Entweder ist das Programm es wert, dann findet sich auch jemand, der es (meistens in Minuten) knackt, oder es ist das nicht wert, dann kannst du dir die Seriennummer auch sparen... |
Nichts für ungut, da mag was dran sein, aber - unter diesem Gesichtspunkt kannst du eigentlich nicht mal mehr deine Haustür schließen, wenn du raus gehst ;)
Jedenfalls: Problem gelöst! Danke :beer:
jaenicke - Do 17.02.11 00:25
_Dominik_ hat folgendes geschrieben : |
Nichts für ungut, da mag was dran sein, aber - unter diesem Gesichtspunkt kannst du eigentlich nicht mal mehr deine Haustür schließen, wenn du raus gehst ;) |
Das war jetzt nur eine kurze Zusammenfassung längerer Threads in diesem und anderen Foren. ;-)
Oft gängelt man nur diejenigen, die bezahlen, während die pöhsen Raubkopierer viel weniger Mühe haben, weil es einfach so geht, ohne Freischaltung usw. ;-) Das sollte man immer im Hinterkopf haben, wenn man einen solchen Schutz entwickelt, wenn man es denn tut. (Und dementsprechend versuchen es zumindest einfach für den User zu halten.)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!