Anasayfa Bilgisayar Programlama DELPHI - 7

-

Dos Programını Çalıştırıp, İnput Ve Output'unu Yonlendirmek

Sosyal Ağ Paylaşımı :                                


Dos Programini calistirip, input ve output'unu yonlendirmek ve bitene kadar beklemek
{InputFile '' ise Dos programi klavyeden okuma yapar}

function CreateDOSProcessRedirected(const CommandLine, InputFile, OutputFile,
   ErrMsg :string): boolean;
const
ROUTINE_ID = '[function: CreateDOSProcessRedirected]';
var
OldCursor     : TCursor;
pCommandLine : array[0..MAX_PATH] of char;
pInputFile,
pOutPutFile   : array[0..MAX_PATH] of char;
StartupInfo   : TStartupInfo;
ProcessInfo   : TProcessInformation;
SecAtrrs      : TSecurityAttributes;
hAppProcess,
hAppThread,
hInputFile,
hOutputFile   : THandle;
begin
Result := FALSE;

if (InputFile <> '') and (not FileExists(InputFile)) then
    raise Exception.CreateFmt(ROUTINE_ID + #10#10 +
       '* %s *' + #10 + 'does not exist' + #10#10 +
       ErrMsg, [InputFile]);

hAppProcess := 0;
hAppThread := 0;
hInputFile := 0;
hOutputFile := 0;

OldCursor     := Screen.Cursor;
Screen.Cursor := crHourglass;

try
    StrPCopy(pCommandLine, CommandLine);
    StrPCopy(pInputFile, InputFile);
    StrPCopy(pOutPutFile, OutputFile);

    FillChar(SecAtrrs, SizeOf(SecAtrrs), #0);
    SecAtrrs.nLength              := SizeOf(SecAtrrs);
    SecAtrrs.lpSecurityDescriptor := nil;
    SecAtrrs.bInheritHandle       := TRUE;

    if InputFile <> '' then
    begin
       hInputFile := CreateFile(
       pInputFile,                          
       GENERIC_READ or GENERIC_WRITE,       
       FILE_SHARE_READ or FILE_SHARE_WRITE,
       @SecAtrrs,                          
       OPEN_ALWAYS,                         
       FILE_ATTRIBUTE_NORMAL
       or FILE_FLAG_WRITE_THROUGH,          
       0);                                 


      if hInputFile = INVALID_HANDLE_VALUE then
        raise Exception.CreateFmt(ROUTINE_ID + #10 + #10 +
        'WinApi function returned an invalid handle value' +
        #10 +'for the input file * %s *' + #10 + #10 +
        ErrMsg, [InputFile]);
    end else
      hInputFile := 0;

    hOutputFile := CreateFile(
       pOutPutFile,
       GENERIC_READ or GENERIC_WRITE,
       FILE_SHARE_READ or FILE_SHARE_WRITE,
       @SecAtrrs,
       CREATE_ALWAYS,
       FILE_ATTRIBUTE_NORMAL
       or FILE_FLAG_WRITE_THROUGH,
       0 );

    if hOutputFile = INVALID_HANDLE_VALUE then
      raise Exception.CreateFmt(ROUTINE_ID + #10 + #10 +
        'WinApi function returned an invalid handle value'
        + #10 + 'for the output file * %s *' +
        #10 + #10 + ErrMsg, [OutputFile]);

    FillChar(StartupInfo, SizeOf(StartupInfo), #0);
    StartupInfo.cb          := SizeOf(StartupInfo);
    StartupInfo.dwFlags     := STARTF_USESHOWWINDOW or
                               STARTF_USESTDHANDLES;
    StartupInfo.wShowWindow := SW_HIDE;
    StartupInfo.hStdOutput := hOutputFile;
    StartupInfo.hStdInput   := hInputFile;

    Result := CreateProcess(
       nil,
       pCommandLine,
       nil,
       nil,
       TRUE,
       HIGH_PRIORITY_CLASS,
       nil,
       nil,
       StartupInfo,
       ProcessInfo);

    if Result then
    begin
      WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
      hAppProcess := ProcessInfo.hProcess;
      hAppThread   := ProcessInfo.hThread;
    end else
      raise Exception.Create(ROUTINE_ID + #10 + #10 +
        'Function failure' + #10 + #10 + ErrMsg);

finally
    if hOutputFile <> 0 then
      CloseHandle(hOutputFile);
    if hInputFile <> 0 then
      CloseHandle(hInputFile);
    if hAppThread <> 0 then
      CloseHandle(hAppThread);
    if hAppProcess <> 0 then
      CloseHandle(hAppProcess);
    Screen.Cursor:= OldCursor;
end;
end;

// Kullanimi:
procedure TForm1.Button2Click(Sender: TObject);
begin
CreateDOSProcessRedirected('chkdsk c:\', '', 'C:\sil.txt', '');
Memo1.Lines.LoadFromFile('C:\sil.txt');
end;

Konuya Ait Yorumlar

Şu an yorum yazılmamış!..

Yorum Gönder




Güvenlik Kodu

IP Adresiniz : 38.107.179.210

İlginizi Çekebilecek Konular
Başlık
Ekleyen

Son Eklenen Yorumlar

ersin şimşek - 1 Yorum

üstat süpersin, proje hazırlıyorum ve bir türlü paneldeki sı...

Admin - 1 Yorum

Tabiki yazarsanız gerekli güncellemeyi yaparız. İlginize Teş...

yusuf dinçer - 1 Yorum

öncelikle teşekkür ederim işime yaradı ama basit hatalar var...

Gökhan - 1 Yorum

paylaşımın için saol , gördüğüm kadarı ile Sorun var , bir b...

Bölümün En İyi Üyeleri

ogniela
40 yaşında, Akrep burcu.
Puanı: 24600

deryadeniz79
45 yaşında, Aslan burcu.
Puanı: 16680

cicceekk
39 yaşında, Aslan burcu.
Puanı: 11800

afflicted_
38 yaşında, YENGEÇ burcu.
Puanı: 7760

safir
38 yaşında, Kova burcu.
Puanı: 4920

Mail Listemize Katılın

E-Posta listemize katılarak Samanalevi Netkafe gelişmelerinden haberdar edilin.

*bilgilerinizin gizli tutulacağından emin olabilirsiniz.


rockstar
Reklam Alanı

Sizde Paylaşın

Şiirlerinizi, duygularınızı, anılarınızı, hobi ilgi alanı yada yemek tariflerinizi paylaşın.

writte

Edebiyat, düşünce ve duyguların, söz ya da yazı halinde güzel ve etkili bir şekilde anlatılması sanatıdır. Samanalevi Netkafe'de anlatmak istemezmisiniz?

Benide Ekle

Samanalevi Netkafe Hakkında

aboutTürkiye'nin samimi paylaşım ortamıdır Samanalevi Netkafe. Sitemize üye olarak kendinize/şairlerimize ait şiirleri, sosyal bilimler kategorilerinde konuları, yemek tariflerini, kaliteli slayt gösterileri, resimler ve videolar gibi her kategoride paylaşımda bulunabilirsiniz.
YAZIM KURALLARI
Şiirler Teknoloji Yemek

Sponsor Linkler