2010. február 2., kedd
Adding a EXE file into yours and running it
Problem/Question/Abstract:
How can I put an EXE file into my application and run it?
Answer:
1) Create file "hearts.rc"
2) Insert following text in that file:
"TESTFILE EXEFILE \Mshearts.exe"
Mshearts.exe -> Mshearts from Windows
3) Compile this file with brcc32.exe, which is located in your
"\Borland\Delphi\Bin" directory by writing
following command: "brcc32 -32 \hearts.rc"
Now you should have file "hearts.RES". How to add it to your application:
1) Copy "hearts.RES" to your project directory
2) Add ShellApi to USES
To global vars add "Hearts:String";
Next add to project:
{$R HEARTS.RES}
function GetTempDir: string;
var
Buffer: array[0..MAX_PATH] of Char;
begin
GetTempPath(Sizeof(Buffer) - 1, Buffer);
result := StrPas(Buffer);
end;
procedure ExtractRes(ResType, ResName, ResNewName: string);
var
Res: TResourceStream;
begin
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
try
Res.SavetoFile(ResNewName);
finally
Res.Free;
end;
end;
procedure ShellExecute_AndWait(FileName: string);
var
exInfo: TShellExecuteInfo;
Ph: DWORD;
begin
FillChar(exInfo, Sizeof(exInfo), 0);
with exInfo do
begin
cbSize := Sizeof(exInfo);
fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
Wnd := GetActiveWindow();
ExInfo.lpVerb := 'open';
lpFile := PChar(FileName);
nShow := SW_SHOWNORMAL;
end;
if ShellExecuteEx(@exInfo) then
begin
Ph := exInfo.HProcess;
end
else
begin
ShowMessage(SysErrorMessage(GetLastError));
exit;
end;
while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do
Application.ProcessMessages;
CloseHandle(Ph);
end;
3) Add a Button on the form and to its OnClick event put this:
procedure TForm1.Button1Click(Sender: TObject);
begin
ExtractRes('EXEFILE', 'TESTFILE', Hearts);
if FileExists(Hearts) then
begin
ShellExecute_AndWait(Hearts);
ShowMessage('Hearts finished');
DeleteFile(Hearts);
end;
end;
4) To OnCreate event of form put this:
procedure TForm1.FormCreate(Sender: TObject);
begin
Hearts := GetTempDir + 'Hearts_FROM_RES.EXE';
end;
5) Run program and click the button
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése