Delphi ile cmd komutu çalıştırmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
fox
Üye
Mesajlar: 78
Kayıt: 24 Nis 2006 08:28

Delphi ile cmd komutu çalıştırmak

Mesaj gönderen fox »

Delphi ile cmd komutu çalıştırmak isitiyorum Arkadaşlar şimdi forumu araştır filan demeyin çünkü araştırdım verilen bilgiler şunlar

Kod: Tümünü seç

WinExec('command.com /c dir',sw_ShowNormal);

Kod: Tümünü seç

ShellExecute(Handle, 'open', PChar('command.com'), PChar('/k cd\'), nil, SW_SHOW);
bunları buldum ama benim istediğim şey mesela ben cd.. komutunu yolladım sonrada dir komutunu onun içine yollıyıcam art arda ekleyince

Kod: Tümünü seç

ShellExecute(Handle, 'open', PChar('command.com'), PChar('/k cd..'), nil, SW_SHOW);

Kod: Tümünü seç

ShellExecute(Handle, 'open', PChar('command.com'), PChar('/k dir'), nil, SW_SHOW);
iki farklı ekran açılıyor bunu nasıl halledebilirim
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

SW_HIDE
DeveloperToolKit

..::|YeşilMavi|::..
fox
Üye
Mesajlar: 78
Kayıt: 24 Nis 2006 08:28

Mesaj gönderen fox »

neden işe yaramadığını sanırım anlamadın cd .. komutu işletiliyor ve o sayfa geri kapatılıyor. Daha sonra yeniden bir komut işlettiğinde yine programın başlangıç pathinden devam ediyor bunu halletmem lazım
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Her Command işlemi başlattığında default başlangıç dizininden başlar herşey.

Bunun için işlemlerini yapmak için bir batch file hazılar ve bir kerede ne yapmak istiyorsan yap. Ya da sanal olarak dizinleri bir yerde tut, şuan burdayım şimdi buraya geçtim diye.
fox
Üye
Mesajlar: 78
Kayıt: 24 Nis 2006 08:28

Mesaj gönderen fox »

ben biraz araştırdım Pipe diye api varmış detaylı bilgisi olan arkadaş varmı
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Pipe dediğin command satırında kullandığımız ( | ) gibi bişi olmasın..

Kod: Tümünü seç

dir \windows | grep dll
gibi kullanımı vardır..
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

pipe api'den haberim yok ama, istediğin şey, console çıktısı ise, ya da kullanıcıya dos komutları çalıştırmaya izin vermek istiyorsan, console capturing ile halledebilirsin. Yok istediğin şey, dizinler arasında gezmek ise SWBrowse ile yapabilirsin. ilk seçenek için şu örneği bir incele derim:
http://delphi.about.com/cs/adptips2001/ ... 0201_2.htm

kolay gele
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

bu tür bir işlem için bir bat dosyası yazsan, komutlarını da onun içine yazsan. delphiden sadece bat dosyasını çalıştırsan daha iyi olmaz mı?
fox
Üye
Mesajlar: 78
Kayıt: 24 Nis 2006 08:28

Mesaj gönderen fox »

nitrokonat yazdı:bu tür bir işlem için bir bat dosyası yazsan, komutlarını da onun içine yazsan. delphiden sadece bat dosyasını çalıştırsan daha iyi olmaz mı?
komutlar sabit değil yani msela ben bazen copy diyecem bazen cd.. bazen c: gibi komutlar vericem problem orada
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

komutları düzenleyim savetofile ile uzantısı bat olarak kaydedebirisin. böylece dinamik bat dosyaları ile işini halledersin.
Kullanıcı avatarı
bluekid
Kıdemli Üye
Mesajlar: 541
Kayıt: 11 Haz 2004 10:45
İletişim:

Mesaj gönderen bluekid »

Kod: Tümünü seç

 Memo1->Clear();
 //create pipe for the console stdout
  SECURITY_ATTRIBUTES sa; 
  ZeroMemory(&sa,sizeof(SECURITY_ATTRIBUTES)); 
  sa.nLength=sizeof(SECURITY_ATTRIBUTES); 
  sa.bInheritHandle=true; 
  sa.lpSecurityDescriptor=NULL; 
  HANDLE ReadPipeHandle; 
  HANDLE WritePipeHandle;       // not used here 
  if(!CreatePipe(&ReadPipeHandle,&WritePipeHandle,&sa,0)) 
        RaiseLastWin32Error(); 

  //Create a Console 
  STARTUPINFO si; 
  ZeroMemory(&si,sizeof(STARTUPINFO)); 
  si.cb=sizeof(STARTUPINFO); 
  si.dwFlags=STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES; 
  si.wShowWindow=SW_HIDE; 
  si.hStdOutput=WritePipeHandle; 
  si.hStdError=WritePipeHandle; 

  PROCESS_INFORMATION pi; 
  ZeroMemory(&pi,sizeof(PROCESS_INFORMATION));
  if(!CreateProcess(CBox1->Text.c_str(),CBox2->Text.c_str(),NULL,NULL,true,0,NULL,NULL,&si,&pi))
      RaiseLastWin32Error();

  //Read from pipe
  char Data[1024];
  for (;;)
  {
    DWORD BytesRead;
    DWORD TotalBytes;
    DWORD BytesLeft;

    //Check for the presence of data in the pipe
    if(!PeekNamedPipe(ReadPipeHandle,Data,sizeof(Data),&BytesRead,
        &TotalBytes,&BytesLeft))RaiseLastWin32Error();
    //If there is bytes, read them
    if(BytesRead)
    {
      if(!ReadFile(ReadPipeHandle,Data,sizeof(Data)-1,&BytesRead,NULL))
          RaiseLastWin32Error();
      Data[BytesRead]='\0';
      Memo1->Lines->Add(AnsiString(Data));

    }
    else
    {
      //Is the console app terminated?
      if(WaitForSingleObject(pi.hProcess,0)==WAIT_OBJECT_0)break;

    }
  }
  CloseHandle(pi.hThread);
  CloseHandle(pi.hProcess);
  CloseHandle(ReadPipeHandle);
  CloseHandle(WritePipeHandle);

pipe kullanımı hakkında kod CBuilder ile yazıldı b azı değişiklikler gerekebilir

komut satırından program çalıştırıyor ve çalışan programın çıktısı stdout'a yapmışsa onu okuyup -pipe ile - memoya yazıyor
Cevapla