Programowanie w języku Delphi » Gotowce

Uruchamianie innych formatow jako plik wykonywalny (EXE)

  • 2008-06-04 20:02
  • 4 komentarze
  • 1277 odsłon
  • Oceń ten tekst jako pierwszy
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 komentarze

jakubkrol 2010-10-03 11:34

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

lukaszguzik 2008-09-29 12:46

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

mgx8 2008-06-07 12:14

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

lukasz1235 2008-06-05 12:31

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
:)