Avatar billede hr__hallandsen Nybegynder
30. november 2005 - 11:45 Der er 10 kommentarer og
1 løsning

Shellexecute hva?

Hej, jeg bruger delphi 7 men ka ik få "shellexecute" og "winexec" til at virke. Ka heller ikke finde noget i hjælpefilen. Ved i hvad jeg skal gøre. Jeg vil osse gerne ha et eksempel på brugen.
Hilsen hallandsen
Avatar billede pjotre Novice
30. november 2005 - 12:07 #1
Hejsa
Prøv med denne, som starter åbner filen c:test.txt i notebook.exe:

procedure TFrmVandLet.cmdFejllogClick(Sender: TObject);
var cmdbuffer: array[0..80] of Char;
begin
  strpcopy(cmdbuffer, 'notepad.exe c:text.txt');
  WinExec(cmdbuffer, SW_Show);

end;
Mvh Pjotre
Avatar billede hmann Nybegynder
30. november 2005 - 12:25 #2
du kan læse mere i hjælpefilen: Win32 Programmer's Reference

hvis du har en normal delphi7 installation ligger hjælpefilen under:
start -> alle programmer -> borland delphi 7 -> help -> MS SDK Help Files ->

og så skal du vist have "shellapi" med under "uses", for at den kan genkende shellexecute
Avatar billede hmann Nybegynder
30. november 2005 - 12:33 #3
har før kaldt et andet program fra mit delphi program således:

-----
Procedure KaldProgram(Program:String;ParamStr:String);
var
  SEInfo    : TShellExecuteInfo;
  ExitCode  : DWORD;
  ExecuteFile: string;
begin
  ExecuteFile := Program;
  ParamStr    := Paramstr + #0;

  FillChar(SEInfo, SizeOf(SEInfo), 0);
  SEInfo.cbSize := SizeOf(TShellExecuteInfo);

  with SEInfo do begin
    fMask := SEE_MASK_NOCLOSEPROCESS;
    Wnd := Application.Handle;
    lpFile := PChar(ExecuteFile);
    lpParameters := PChar(ParamString);
    nShow := SW_SHOWNORMAL;
  end;
  if ShellExecuteEx(@SEInfo) then begin
    repeat
      Application.HandleMessage;
      GetExitCodeProcess(SEInfo.hProcess, ExitCode);
    until (ExitCode <> STILL_ACTIVE) or Application.Terminated;

    // her kan du evt indsætte kode som skal eksekveres efter du har afsluttet
    // det kaldte program og er vendt tilbage til dit delphiprogram..
   
  end
  else
  begin
    Messagedlg('Kan ikke finde '+Program,mterror,[mbOk],0);
  end;
end;

-----

Nu kan du så et sted i dit program skrive sådan her
hvis du vil kalde notepad og åbne text.txt:

KaldProgram('notepad.exe', 'text.txt');



eller sådan hvis du bar vil starte lommeregneren:
KaldProgram('calc.exe', '');
Avatar billede janbb Juniormester
30. november 2005 - 13:49 #4
Du skal huske at have olectrs i din uses-sætn.: fx

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  OleCtrls, SHDocVw, StdCtrls;
Avatar billede hmann Nybegynder
30. november 2005 - 13:53 #5
janbb> det er "shellapi" der skal være i uses-sætningen..

funktionen ShellExecute ligger i filen:
c:\Programmer\Borland\Delphi7\Source\RTL\Win\ShellAPI.pas

så det må være shellapi der skal "uses"
Avatar billede janbb Juniormester
30. november 2005 - 14:16 #6
Nå Ja :)
Avatar billede janbb Juniormester
01. december 2005 - 16:17 #7
Det handler vistnok osse om at shellexecute ikke kan dirigeres til bestemt bibl.
Derfor skal man sikre sig at bibbet er stillet til der hvor det ønskede progr. ligger..

Har selv fået anbefalet denne rutine engang, som stadig er funktionel:

procedure ChaDir(S: string);
begin
S:='C:\Programmer\Borland\Database Desktop\PrivDir';
ChDir('C:\Programmer\Borland\Database Desktop\PrivDir');
if IOResult <> 0 then
Messagedlg('dir eksisterer ikke',mtWarning, [mbOk],0);
end;

procedure buttonclick(sender:Tobject);
begin
ChaDir('C:\Programmer\Borland\Database Desktop\PrivDir');




Shellexecute(handle,'open',PChar(dbedit2.text),nil,nil,sw_show);
end;
Avatar billede hr__hallandsen Nybegynder
02. december 2005 - 09:33 #8
hmann >> har ik lige en maskine med delphi til rådighed nu, men skal nok gi point, når jeg har undersøgt sagen =}

Hallandsen
Avatar billede hmann Nybegynder
02. december 2005 - 09:37 #9
okay ;)

bare vend tilbage, så skal vi nok få det til at virke..
Avatar billede hr__hallandsen Nybegynder
03. december 2005 - 13:36 #10
Tak hmann

Det virker

Har lige rettet "program" til "programmet", da "program" er et reserveret ord og "ParamString"-stavefejlen til "ParamStr".

Du får dine point.

Hilsen Hallandsen, korrupt bagmand
Avatar billede hmann Nybegynder
05. december 2005 - 08:31 #11
undskyld småfejlene - det var ikke kopieret direkte fra min egen kode - noget af det var fra fri hukommelse og selvfølgelig er "program" et reserveret ord :)

takker for points..
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