Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.034 c
14-1080994553
Romario
2004-04-03 16:15
2004.04.25
Двоично-десятичное представление числа.


14-1080801502
pasha_golub
2004-04-01 10:38
2004.04.25
философия


14-1080993978
Undert
2004-04-03 16:06
2004.04.25
Проект сети и сетевой безопасности


11-1064995894
chuckloon
2003-10-01 12:11
2004.04.25
OLEAutomation server + KOL клиент


6-1077881008
4ward
2004-02-27 14:23
2004.04.25
работа с TClient/TServerSocket





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский