Uruchamianie innych formatow jako plik wykonywalny (EXE)
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;
Skoro jest to gotowiec, więc podaję Procedurę, na uruchomienie pliku wykonywalnego, który może mieć, nawet rozszerzenie JPEG.
W parametrze, trzeba podać tylko ścieżkę do programu.
A to cała procedura
No i to wszystko, to pierwszy mój artykuł na 4p, myślę, że nie ostatni. Pozdrawiam, mgx8
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
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
:)
Łukasze, mylicie sie, tutaj chodzi zupełnie o co innego ;)
Rozwiązanie jest dobre.