Arkadaşlar WinExec yada ShellExecute İle Dosya Yolunu Girerek Dosyayı Çağırabiliyorum. Ama Herkesin Bilgisayarında Aynı Olmadığı İçin Şöyle Yapmak İstiyorum.Exe nin Yanında Bulunan Dosyanın İçindekini Çağırmak İstiyorum.
Yani Diyelim ki Dosya Yolu Bu; C:\Users\Nomercy\Desktop\Program\Data\x86.exe
Exe de C:\Users\Nomercy\Desktop\Program Klasörünün İçinde Çalışıyor.
Ben sadece Data\x86.exe Olarak Çağırırsam Her Zaman Diğer Bilgisayarlarda Sorun Yaşamadan Çalışır.
Umarım Anlatabilmişimdir.
Winexec yada ShellExecute İle Klasör İçindeki Dosyayı Çağırma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- greenegitim
- Üye
- Mesajlar: 713
- Kayıt: 28 Nis 2011 10:33
- Konum: İstanbul
Re: Winexec yada ShellExecute İle Klasör İçindeki Dosyayı Çağırma
ExtractFilePath işinizi görecektir.
http://docwiki.embarcadero.com/Librarie ... ctFilePath
http://docwiki.embarcadero.com/Librarie ... ctFilePath
Mücadele güzelleştirir!
Re: Winexec yada ShellExecute İle Klasör İçindeki Dosyayı Çağırma
Merhaba,
Kullandığınız Delphi sürümünü belirtmemişsiniz. Aşağıdaki örnek kod yeni sürüm Delphi ile çalışacak şekilde verilmiştir.
Öncelikle sorunuz çok net değil.
(1) Çalışma dizinini öğrenmek istiyor iseniz örnek kod aşağıdaki gibi olabilir:
(2) Ancak zaten sürekli EXE çalışma dizini altındaki "Data\x86.exe" çalıştırılacak ise bunun için bir sabit tanımlayıp direk kendisini kullanabilirsiniz.
Bunun dışında farklı birşey sormak istedi iseniz biraz daha detaylı şekilde ve kod paylaşarak yapmanızda fayda var.
Kullandığınız Delphi sürümünü belirtmemişsiniz. Aşağıdaki örnek kod yeni sürüm Delphi ile çalışacak şekilde verilmiştir.
Öncelikle sorunuz çok net değil.
(1) Çalışma dizinini öğrenmek istiyor iseniz örnek kod aşağıdaki gibi olabilir:
Kod: Tümünü seç
uses
System.IOUtils;
procedure TForm1.Button1Click(Sender: TObject);
var
ExeNameToRun: string;
begin
ExeNameToRun := ExtractFileName(ExcludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)));
ExeNameToRun := ExeNameToRun + TPath.DirectorySeparatorChar + ExtractFileName(Application.ExeName);
ShowMessage(ExeNameToRun);
end;
Kod: Tümünü seç
uses
Shellapi,
System.IOUtils;
procedure TForm1.Button2Click(Sender: TObject);
const
ExeDirectoryName = 'data\';
ExeNameToRun = 'x86.exe';
var
Directory: string;
Parameters: string;
begin
Directory := TPath.GetLibraryPath() + TPath.DirectorySeparatorChar + 'data';
Parameters := EmptyStr;
{$I-}
// Önlem için çalışma dizinine geçilsin.
// Bazı uygulamalar çalışma dizini parametresini gözardı edebiliyor
ChDir(Directory);
{$I+}
if IOResult <> 0 then
begin
ShowMessage('Dizine ulaşılamıyor: ' + AnsiQuotedStr(Directory, '"'));
Exit();
end;
// Çalıştırılan uygulamanın pencere durumu ile ilgili kullanılabilecek parametreler
// SW_HIDE
// SW_SHOWNORMAL
// SW_SHOWMINIMIZED
// SW_SHOWMAXIMIZED
ShellExecute(Application.Handle, 'open', PWideChar(ExeDirectoryName + ExeNameToRun), PWideChar(Parameters), PWideChar(Directory), SW_SHOWNORMAL);
{$I-}
// Kendi uygulama dizinimize geri dönelim
ChDir(TPath.GetLibraryPath());
{$I+}
if IOResult <> 0 then
begin
ShowMessage('Uygulama dizinine geri dönülemiyor: ' + AnsiQuotedStr(TPath.GetLibraryPath(), '"'));
Exit();
end;
end;