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;
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.
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?
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;
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.
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.
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.
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}
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.