Uruchamianie innych formatow jako plik wykonywalny (EXE)

mgx8

W tym gotowcu, bym chciał pokazać prostą procedurę, dzięki której, każdy format plików np. bin, można uruchomić jako plik wykonywalny (EXE)


Do wykonania takiego wystarczy, tylko znajomość rejestru Windows, oraz obsługa rejestru w Delphi no i oczywiście, trzeba jeszcze umieć uruchamiać program w Delphi ;)

Najpierw, do sekcji Uses, trzeba dopisać Registry;

uses Registry;

Skoro jest to gotowiec, więc podaję Procedurę, na uruchomienie pliku wykonywalnego, który może mieć, nawet rozszerzenie JPEG.

Procedure OpenApplication(Filename : String);

W parametrze, trzeba podać tylko ścieżkę do programu.

A to cała procedura

Procedure OpenApplication(Filename : String);
var
  Reg: TRegistry; // Zmienna rejestru
  OldValue: String; // Zmienna w której będziemy przechowywać starą metodę, otwierania danego pliku
begin
  Reg:= TRegistry.Create; // Stworzenie zmiennej
  Reg.RootKey := HKEY_CLASSES_ROOT; // Otwieranie gałęzi
  Reg.OpenKey(ExtractFileExt(Filename), True); // Otwieranie klucza, z rozszerzeniem uruchamianego programu
  OldValue:=Reg.ReadString(''); // Odczytywanie metody otwierania tego pliku
  Reg.WriteString('', 'exefile'); // Zapisywanie metody, uruchamiania plików EXE
  CreateProcess(nil, pchar(Filename), nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo); // Tworzenie procesu
  ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID); // Otwieranie procesu
  SetPriorityClass(ProcessInfo.hProcess, NORMAL_PRIORITY_CLASS); // Ustalenie priorytetu
  TerminateProcess(ProcessHandle,0); // Zakończenie, procesu uruchamiania
  CloseHandle(ProcessHandle); // Zamykanie uchwytu
  Reg.WriteString('', OldValue); // Przywrócenie, starej metody, uruchamiania pliku
  Reg.Free; // Zwolnienie z pamięć
end;

No i to wszystko, to pierwszy mój artykuł na 4p, myślę, że nie ostatni. Pozdrawiam, mgx8

4 komentarzy

Łukasze, mylicie sie, tutaj chodzi zupełnie o co innego ;)
Rozwiązanie jest dobre.

a jeszcze prościej bedzie tak:
ShellExecute(0, 'open', SCIEZKADOPLIKUZDOWOLNYMROZSZERZENIEM, , , SW_SHOW);
Ja tym uruchamialem pliki z rozszerzeniem .tmp :D

a po co? :D, tyle, że taką procedurą, nawet w menedżerze zadań, będzie pisało, że program ma rozszerzenie np. jpg :D

Można zrobić tak:

  1. Do zmiennej wczytać nazwę pliku.
  2. Zamienić rozszerzenie na exe
  3. Uruchomić plik (normalnie - ShellExecute)
  4. Przywrócić nazwę pliku
    :)