Avatar billede galleon Nybegynder
01. september 2002 - 14:19 Der er 9 kommentarer og
1 løsning

lav en lille kode om

jeg har koden (i en button)

Memo1.Lines.SaveToFile('tmp.bat');
ShellExecute(0, 'open', 'tmp.bat', nil, nil, SW_SHOWNORMAL);
DeleteFile('tmp.bat');

men når den skal køre koden laver den filen tmp.bat og sletter den for hurtigt så jeg skal have

DeleteFile('tmp.bat');

på en knap for sig selv hvis den skal virke så dne ikke sletter for hurtigt så hvordan får jeg lavet så at jeg kun skal bruge en button så at den først lukker når den har brugt tmp.bat
Avatar billede yousif Nybegynder
01. september 2002 - 15:06 #1
hmm.. kan du ikke bruge sleep?

Memo1.Lines.SaveToFile('tmp.bat');
ShellExecute(0, 'open', 'tmp.bat', nil, nil, SW_SHOWNORMAL);
Sleep(5000);
DeleteFile('tmp.bat');
Avatar billede galleon Nybegynder
01. september 2002 - 15:20 #2
kan ikke bruge den da det er foreskelligt hvorlang tid filen er i brug
Avatar billede stone Forsker
01. september 2002 - 15:47 #3
OnClick: Memo1.Lines.SaveToFile('tmp.bat');
ShellExecute(0, 'open', 'tmp.bat', nil, nil, SW_SHOWNORMAL);

OnExit:DeleteFile('tmp.bat');

når focus forlades fra knappen, slettes tmp.bat
Avatar billede loke-liscom Nybegynder
01. september 2002 - 15:59 #4
retunere ShellExecute ikke et WindowHandle??
hvis den gør det skal du jo bare vente med at slette filen til dette handle er væk...
Avatar billede loke-liscom Nybegynder
01. september 2002 - 16:00 #5
du kan jo også lede efter handlet hvis den ikke retunere et
Avatar billede nico26 Nybegynder
01. september 2002 - 17:04 #6
hvorfor ikke bare slette filen når programmet afsluttes?
Avatar billede galleon Nybegynder
01. september 2002 - 18:12 #7
stone> onexit vil ikke virke
Avatar billede galleon Nybegynder
01. september 2002 - 18:16 #8
var ikke noget jeg kunne bruge
Avatar billede stone Forsker
01. september 2002 - 18:22 #9
den virker hos mig...nå men hvorfor ikke sætte koden ind i oncreate
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.SaveToFile('tmp.bat');
ShellExecute(0, 'open', 'tmp.bat', nil, nil, SW_SHOWNORMAL);
end;

og bruge knappen til at slette den bagefter.
Avatar billede cms Nybegynder
02. september 2002 - 19:24 #10
procedure ExecWait(AppName, CmdLine: string);
var
  zAppName: array[0..512] of char;
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  try
    StrPCopy(zAppName, AppName);

    FillChar(StartupInfo, Sizeof(StartupInfo), #0);
    StartupInfo.cb := Sizeof(StartupInfo);
    StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
    StartupInfo.wShowWindow := SW_HIDE;

    Win32Check(CreateProcess(zAppName,
      PChar(CmdLine),
      nil,
      nil,
      False,
      CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
      nil,
      nil,
      StartupInfo,
      ProcessInfo));

    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    TerminateProcess(ProcessInfo.hProcess, 0);
    CloseHandle(ProcessInfo.hProcess);
    CloseHandle(ProcessInfo.hThread);
  except
    on E: EWin32Error do
      ShowMessage(E.Message);
  end;
end;

var
  TempName: String;
begin
  TempName := ExcludeTrailingBackSlash(ExtractFilePath(Application.ExeName))+'\tmp.bat';
  Memo1.Lines.SaveToFile(TempName);
  ExecWait('tmp.bat', TempName);
  DeleteFile(TempName);
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