Avatar billede kipolaks Nybegynder
05. november 2002 - 13:40 Der er 9 kommentarer og
1 løsning

Process Handle??

hejsa!

jeg sidder og roder med noget kode som kan starte og afslutte en process...

jeg bruger denne funktion til at starte min process

function ExecAndWait(Filename, Parameter: string; nCmdShow: integer): longword;
var
    zAppName: array[0..max_path] of char;
    zParameter: array[0..max_path] of char;
    zCurDir: array[0..max_path] of char;
    StartupInfo: TStartupInfo;
    ProcessInfo: TProcessInformation;
begin
  StrPCopy(zAppName,FileName);
  StrPCopy(zParameter,Parameter);
  StrPCopy(zCurDir,GetCurrentDir());
  FillChar(StartupInfo,Sizeof(StartupInfo),#0);
  StartupInfo.cb:=Sizeof(StartupInfo);
  StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow:=nCmdShow;
  if not CreateProcess(zAppName,zParameter,nil,nil,false,CREATE_NEW_CONSOLE or  NORMAL_PRIORITY_CLASS,nil,nil,StartupInfo,ProcessInfo) then
    Result:=0
    else
    begin
    WaitforSingleObjectProcessInfo.hProcess,INFINITE);
    GetExitCodeProcess(ProcessInfo.hProcess,Result);
    end;
end;

Det fungerer også fint på en masse programmer MEN BARE IKKE DET JEG VIL STARTE!!! :(

det er her det går galt(mit program stopper med at svare):
WaitforSingleObjectProcessInfo.hProcess,INFINITE);

min process starter fint op.... hvad er der galt???
kan det have noget at gøre med at processen ligger sig nede i taskbaren??
Avatar billede kipolaks Nybegynder
05. november 2002 - 14:42 #1
er der andre måder at få fat i processen's handle??? så jeg kan nøjes med at bruge WinExec????
Avatar billede martinlind Nybegynder
05. november 2002 - 14:49 #2
Du kan prøve at bruge ShellExecute(); istedet for

/Martin
Avatar billede dkn Nybegynder
05. november 2002 - 14:54 #3
Uses : ShellApi;

Hvis ikke du skal vide hvornår programmet stopper med at køre ville jeg da også bruge shellexecute.

showmessage(inttostr(Shellexecute(0,'open','C:\fil.exe','','',sw_shownormal)));

Den giver handle som result
Avatar billede borrisholt Novice
05. november 2002 - 15:23 #4
dkn>> Lige for en god ordensskyld Shellxecute retunerer IKKE et handle, men en Error code ....

RTFM :-)

Jens B
Avatar billede kipolaks Nybegynder
05. november 2002 - 15:56 #5
men jeg skal jo bruge et handle for at lukke den igen.... hvad gør jeg så???
Avatar billede kipolaks Nybegynder
05. november 2002 - 17:03 #6
hmmm jeg må bruge en anden metode... :( lukker....
Avatar billede dkn Nybegynder
05. november 2002 - 18:44 #7
borrisholt -> nej det kom jeg i tanke om.

RTFM ??

Kender ikke den radio frekvens.
Avatar billede athlon-pascal Juniormester
05. november 2002 - 20:25 #8
dkn -> Mener det betyder "Read The F...... Manual" eller noget i den retning :)

Oversat betyder det i dette tilfælde: "Læs hjælpen"!
Avatar billede borrisholt Novice
06. november 2002 - 08:13 #9
poulseye>> CorrectMeIf im wrong :

Der findes i Windows fire måder at køre et externt program :
1)
  ShellExecute
2)
  ShellExecuteEx
3)
  CreateProcess
4)
  Din egen loader.

Hvilken metode har du brugt ?

Jens B
Avatar billede dkn Nybegynder
06. november 2002 - 14:13 #10
Har er en eksempel med createprocess:

procedure TForm1.CreateNotepad;
var
  startinfo : TStartupInfo;
  processinfo : TProcessInformation;
begin
  FillChar(startinfo,SizeOf(TStartupInfo),0);
  with startinfo do
  begin
    cb := SizeOf(TStartupInfo);
    dwFlags := STARTF_FORCEONFEEDBACK or STARTF_FORCEOFFFEEDBACK
  end;

  CreateProcess('C:\windows\notepad.exe', '', Nil, 0, False,
                      CREATE_DEFAULT_ERROR_MODE  or CREATE_NEW_PROCESS_GROUP or
                      NORMAL_PRIORITY_CLASS, Nil ,'c:\windows\desktop',
                      startinfo,processinfo);
  with processinfo do
  begin
    Label1.Caption := 'Process Handle : ' + IntToHex(hProcess,8);
    Label2.Caption := 'Thred Handle : '  + IntToHex(hThread,8);
    Label3.Caption := 'Process ID : '    + IntToHex(dwProcessId,8);
    Label4.Caption := 'Thred ID : '      + IntToHex(dwThreadId,8);
  end;

end;
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