Avatar billede the_party_dog Nybegynder
10. november 2004 - 11:29 Der er 12 kommentarer og
2 løsninger

Start af exe fil

Jeg ønsker at starte en simpel exe fil, med et argument, fra Delphi.

Hvordan gør jeg? Har brug for vejledning, da jeg ikke lige er den store haj til Delphi.

programmet hedder makereadable, og skal startes med en string. F.eks

MakeReadable.exe DagsDato

hvor DagsDato er en variabel som jeg har oprettet tidligere i min kode.
Avatar billede kalp Novice
10. november 2004 - 11:31 #1
Avatar billede jpvj Nybegynder
10. november 2004 - 11:31 #2
Avatar billede kalp Novice
10. november 2004 - 11:32 #3
skulle ikke have været i svar.. men inspiration
Avatar billede hreiff Nybegynder
10. november 2004 - 14:02 #4
procedure TForm1.Button1Click(Sender: TObject);
var
  wnd: Hwnd;
  st: string;
  pc: pchar;
begin
  st := 'DagsDato';

  st := st+#0;    {tilføjer chr(0) til slut af streng (indikerer slut for en pchar)}
  pc := @st[1];    {pchar med samme indhold som st}
  Shellexecute(wnd,'open','makereadable.exe',pc,'c:\temp\',SW_SHOWNORMAL);
end;
Avatar billede the_party_dog Nybegynder
11. november 2004 - 09:32 #5
Skal shellExecute ikke bruge noget i uses?
Avatar billede hreiff Nybegynder
11. november 2004 - 09:34 #6
Jo, den bruger SHELLAPI
Avatar billede the_party_dog Nybegynder
11. november 2004 - 09:38 #7
Det fandt jeg lige ud af i dette sekund... Damn det var nemmere end jeg havde regnet med... :)

Mange tak for hjælpen hreiff!

Kan du ikke lige hjælpe mig igang med noget, når du alligevel er her? Jeg vil gerne have lagt mit kald, den som du lige har givet mig, over i en anden fil. Pas fil tror jeg nok det er.

Kan du ikke sende mig et link, eller en simpel måde at gøre det på? Jeg vil gerne ligge flere points hvis du vil have det.
Avatar billede the_party_dog Nybegynder
11. november 2004 - 09:41 #8
Venter min delphi app, på at det åbne program bliver færdig? Det er derfor jeg gerne vil over i en anden pas fil, så jeg kan vente på at den bliver færdig.

Makereadable er en console fil, den må jo returner noget, når den er færdig, kan man ikke "nemt" samle det op, og vente på at gøre noget, før man har modtaget beskeden om at den er færdig?
Avatar billede hreiff Nybegynder
11. november 2004 - 10:31 #9
Så er det straks lidt mere bøvlet. Se her:

procedure TForm1.Button1Click(Sender: TObject);
var
  proc_info: TProcessInformation;
  startinfo: TStartupInfo;
  ExitCode: longword;
  prog,DagsDato: string;
  pc: pAnsichar;
  begin
  // Initialize the structures
  FillChar(proc_info, sizeof(TProcessInformation), 0);
  FillChar(startinfo, sizeof(TStartupInfo), 0);
  startinfo.cb := sizeof(TStartupInfo);

  Prog := 'c:\temp\MakeReadable.exe';
  DagsDato := '11-11-2005';
  pc := pAnsiChar(Prog+' '+dagsdato);

  // Attempts to create the process
  if CreateProcess(nil, pc , nil,
      nil, false, NORMAL_PRIORITY_CLASS, nil, nil,
      startinfo, proc_info) <> False then begin
    // The process has been successfully created
    // No let's wait till it ends...
    WaitForSingleObject(proc_info.hProcess, INFINITE);
    // Process has finished. Now we should close it.
    GetExitCodeProcess(proc_info.hProcess, ExitCode);  // Optional
    CloseHandle(proc_info.hThread);
    CloseHandle(proc_info.hProcess);
    Application.MessageBox(
      PChar(Format('MakeReadable finished! (Exit code=%d)', [ExitCode])),
      'Info', MB_ICONINFORMATION);
  end else begin
    // Failure creating the process
    Application.MessageBox('Couldn''t execute the '
      + 'application', 'Error', MB_ICONEXCLAMATION);
  end;//if
end;
Avatar billede the_party_dog Nybegynder
11. november 2004 - 10:38 #10
Du er min nye gud, jeg tilbeder dig.

Hvordan kan jeg ligge koden over en pas fil, så jeg har det skilt af? Vil gerne smide 100 mere hvis du vil hjælpe mig med det problem... Du fortjener allerede 100 mere....

Håber du har tid og overskud til at hjælpe mig, bare et link som forklarer godt, hvordan jeg ligger det over i en anden fil.
Avatar billede hreiff Nybegynder
11. november 2004 - 10:45 #11
Hvis det f.eks skal køres når du trykker på en knap;
  Sæt en knap på formen i det program den skal sættes ind i.
  Dobbeltklik på knappen - så går du over i knap-proceduren.
  Klip ovenstående med ctrl-c (Undtagen procedure hovedet)
  Indsæt det i stedet for Begin-End i knap-proceduren.

Er det det du mener ?
Avatar billede the_party_dog Nybegynder
11. november 2004 - 10:49 #12
Nej, det har jeg skam længe regnet ud, lidt delphi har jeg lært :)

Det jeg tænker på, er en selvstændig fil, som man kunne bruge i flere projekter, som man kunne sende til folk, som manglede samme funktionalitet som jeg lige har opnået.

Lige som en class fil i andre udviklings sprog.
Avatar billede hreiff Nybegynder
11. november 2004 - 11:20 #13
Så opretter du en ekstra unit (unit2)
Den skal se således ud:

unit Unit2;

interface

uses
  Windows;

function RunProgram(s,t: string):integer;

implementation

function RunProgram(s,t: string):integer;
var
  proc_info: TProcessInformation;
  startinfo: TStartupInfo;
  ExitCode: longword;
  prog,dagsdato: string;
  pc: pAnsichar;
  begin
  // Initialize the structures
  FillChar(proc_info, sizeof(TProcessInformation), 0);
  FillChar(startinfo, sizeof(TStartupInfo), 0);
  startinfo.cb := sizeof(TStartupInfo);

  pc := pAnsiChar(s+' '+t);

  // Attempts to create the process
  if CreateProcess(nil, pc , nil,
      nil, false, NORMAL_PRIORITY_CLASS, nil, nil,
      startinfo, proc_info) <> False then begin
    // The process has been successfully created
    // No let's wait till it ends...
    WaitForSingleObject(proc_info.hProcess, INFINITE);
    // Process has finished. Now we should close it.
    GetExitCodeProcess(proc_info.hProcess, ExitCode);  // Optional
    CloseHandle(proc_info.hThread);
    CloseHandle(proc_info.hProcess);
    result := Exitcode;
  end else begin
    // Failure creating the process
    result := -1;
  end;//if
end;

end.


I programmet der skal bruge funktionen skriver du:

Uses
  unit2

og

var
  ecode: integer;

  ecode := RunProgram('c:\temp\MakeReadable.exe','11-11-2005');
{  showmessage(inttostr(ecode)); }{hvis du vil se hvordan det gik}
Avatar billede hreiff Nybegynder
24. november 2004 - 08:06 #14
Fik du det du skulle bruge ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester