Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

Перехват значения   Найти похожие ветки 

 
Tanuki   (2004-04-05 12:22) [0]

Существует ли возможность перехватить значение получаемое в результате выполнения внешнего приложения и передать его в Delphi.
Конкретно ситуация следующая: запускаю из delphi программу для подсчета контрольной суммы (КС) файла (fsum.exe), мне необходимо вернуть полученное значение КС в программу delphi.


 
Digitman ©   (2004-04-05 12:29) [1]


> значение получаемое в результате выполнения внешнего приложения


что есть "значение получаемое в результате выполнения внешнего приложения" ?


> передать его в Delphi


зачем оно среде Делфи нужно ?


> полученное значение


кем полученное ? кто его запрашивал ? как выглядит это "полученное значение" ? цифирки что ли на экране ?


 
Tanuki   (2004-04-05 12:32) [2]

После выполнении fsum выводит на экран значение контрольной суммы (набор цифир и букв), мне необходимо это значение вернуть в программы из которой я запускал fsum.


 
Семен Сорокин ©   (2004-04-05 12:38) [3]

Tanuki   (05.04.04 12:32) [2]
SendMessage + обработка


 
Digitman ©   (2004-04-05 12:42) [4]

fsum - твое приложение или чужое ? консольное или GUI ?


 
Tanuki   (2004-04-05 12:59) [5]

Извиняюсь за тупой вопрос, но как конкретно произвести данную операцию?
Я пишу буквально следующее:

procedure TfmMain.Button1Click(Sender: TObject);
var
myh : HWND;
begin
 ShellExecute(myh,
 Pchar(""),Pchar("c:\1\fsum.exe"),
 Pchar("-md5 -jm -dc:\1 1.csv"),
 Pchar(""),SW_SHOWDEFAULT);
end;


Что мне делать дальше?


 
Tanuki   (2004-04-05 13:00) [6]

fsum - консольное досовское приложение.


 
Digitman ©   (2004-04-05 13:03) [7]


> консольное досовское приложение


еще раз - консольное Win32-приложение или ДОС-задача ?


 
Hooch ©   (2004-04-05 13:04) [8]

не проще КС самому в проге посчитать ? :-)


 
Tanuki   (2004-04-05 13:07) [9]

консольное Win32-приложение


 
Tanuki   (2004-04-05 13:08) [10]

не проще КС самому в проге посчитать ? :-)


 
Tanuki   (2004-04-05 13:10) [11]

сорри, сообщение выше это глюк :)

> не проще КС самому в проге посчитать ? :-)

fsum может КС считать используя различные алгоритмы (md5? src32 и т.д.) А я их принципа не знаю, а задача уже поставлена начальством.


 
Digitman ©   (2004-04-05 13:24) [12]

type

TCRC32 = Longword;
PCRC32 = ^TCRC32;

TCRC32Table = array[0..255] of TCRC32;
PCRC32Table = ^TCRC32Table;

const
 CRC32Poly = $EDB88320;
 CRC32InitMask   = $FFFFFFFF;

var
 CRC32Table: PCRC32Table;

...
procedure MakeCRC32Table(CRC32Table: PCRC32Table; const InitCRC: TCRC32);
var
 i,j: Integer;
 r: TCRC32;
begin
 for i:= Low(TCRC32Table) to High(TCRC32Table) do begin
   r:= i;
   for j:= 8 downto 1 do
     if (r and 1) = 1 then
       r:= (r shr 1) xor InitCRC
     else
       r:= r shr 1;
   CRC32Table[i]:= r;
 end;
end;

function GetCRC32(const Buffer; BufSize: DWord; InitCRC: TCRC32; const Inv: Boolean): TCRC32;
var
 BufPtr: PByte;
begin
 BufPtr:= PByte(Buffer);
 while BufSize > 0 do begin
   InitCRC:= CRC32Table[LoByte(InitCRC) xor BufPtr^] xor (InitCRC shr 8);
   Inc(BufPtr);
   Dec(BufSize);
 end;
 Result:= InitCRC;
 if Inv then
   Result:= not Result;
end;

...

var
 fs: TFileStream;
 Buffer: Pointer;
 CRC: TCRC32;
 BytesRead: Integer;
 ..

GetMem(Buffer, 65536);
CRC := CRC32InitMask;

while True do
begin
BytesRead  := fs.ReadBuffer(Buffer^, 65536);
if BytesRead = 0 then Break;
CRC32 := GetCRC32(Buffer^, BytesRead, CRC32, False);
end;
 
initialization
   New(CRC32Table);
   MakeCRC32Table(CRC32Table, CRC32Poly);
finalization
   Dispose(CRC32Table);


 
han_malign ©   (2004-04-05 13:26) [13]

Ну как вариант перенаправление вывода в файл (Pchar("-md5 -jm -dc:\1 1.csv > result.txt")), с анализом файла.
md5 - помоему, в CryptoAPI, в виндах есть(только это хеш, а не контрольная сумма), crc - на http://delphibase.endimus.com/ полно примеров...


 
Tanuki   (2004-04-05 14:14) [14]


> Ну как вариант перенаправление вывода в файл (Pchar("-md5
> -jm -dc:\1 1.csv > result.txt")), с анализом файла.

Весь прикол в том, что файл с КС не создается. Что за глю я не пойму. Если из обычной командной строки запускать, то все работает, а при запуске из программы файл не создается.


 
Anatoly Podgoretsky ©   (2004-04-05 14:18) [15]

Переправить стандартный вывод на свою программу, но от ShellExecute придется отказаться, примеры ищи в местном FAQ


 
Tanuki ©   (2004-04-05 14:41) [16]


> примеры ищи в местном FAQ

Весь FAQ перелапатил по WinIp ничего подобного не нашел. Нельзя ли меня носом ткнуть в пример?



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.026 c
1-1081600823
eX
2004-04-10 16:40
2004.04.25
Как конвертировать String в Char?


7-1077698501
LK
2004-02-25 11:41
2004.04.25
Измерение в микросекундах


1-1081015278
Федя Мегатронов
2004-04-03 22:01
2004.04.25
Ничего не компилиться при повторном открытии ! помогите !


7-1077726910
Phantomaz
2004-02-25 19:35
2004.04.25
Почему SetWindowsHookEx не пашет, если активно Dos-окно ?


11-1063796734
Revolter
2003-09-17 15:05
2004.04.25
VCL: (ssCtrl in shift); KOL: ?