|
Вопрос # 4 825/ вопрос открыт / |
|
Здравствуйте, товарищи эксперты!
Собственно ищу эффективный способ взаимодействия с GNU PGP. это консолькое приложение с открытыми исходниками, используется повсеметно для надежного шифрования. проблема в том, что у меня не получаетсяя корректно непрерывно читать/писать в консоль. нашел в сети вот такую функцию, пытаюсь с ней работать:
хелп выводиться нормально, все ок.
но как только доходит дело до генерации ключей, где нужно отвечать на вопросы, вводить пароли и т.п. - тут ничего не получается:(
подскажите как быть?
Приложение: Переключить в обычный режим- {{code}}
- procedure RunDosInMemo(CmdLine: string; AMemo: TMemo);
- const
- ReadBuffer = 2400;
- var
- Security: TSecurityAttributes;
- ReadPipe, WritePipe: THandle;
- start: TStartUpInfo;
- ProcessInfo: TProcessInformation;
- Buffer: Pchar;
- BytesRead: DWord;
- Apprunning: DWord;
- begin
- Screen.Cursor := CrHourGlass;
- Form1.Button1.Enabled := False;
- with Security do
- begin
- nlength := SizeOf(TSecurityAttributes);
- binherithandle := true;
- lpsecuritydescriptor := nil;
- end;
- if Createpipe(ReadPipe, WritePipe,
- @Security, 0) then
- begin
- Buffer := AllocMem(ReadBuffer + 1);
- FillChar(Start, Sizeof(Start), #0);
- start.cb := SizeOf(start);
- start.hStdOutput := WritePipe;
- start.hStdInput := ReadPipe;
- start.dwFlags := STARTF_USESTDHANDLES +
- STARTF_USESHOWWINDOW;
- start.wShowWindow := SW_HIDE;
-
- if CreateProcess(nil,
- PChar(CmdLine),
- @Security,
- @Security,
- true,
- NORMAL_PRIORITY_CLASS,
- nil,
- nil,
- start,
- ProcessInfo) then
- begin
- repeat
- Apprunning := WaitForSingleObject
- (ProcessInfo.hProcess, 100);
- ReadFile(ReadPipe, Buffer[0],
- ReadBuffer, BytesRead, nil);
- Buffer[BytesRead] := #0;
- OemToAnsi(Buffer, Buffer);
- AMemo.Text := AMemo.text + string(Buffer);
-
- Application.ProcessMessages;
- until (Apprunning <> WAIT_TIMEOUT);
- end;
- FreeMem(Buffer);
- CloseHandle(ProcessInfo.hProcess);
- CloseHandle(ProcessInfo.hThread);
- CloseHandle(ReadPipe);
- CloseHandle(WritePipe);
- end;
- Screen.Cursor := CrDefault;
- Form1.Button1.Enabled := True;
- end;
-
- procedure TForm1.Button1Click(Sender: TObject);
- var
- s: string;
- begin
- Memo1.Clear;
- //s := ExtractFilePath(Application.ExeName)+'gpg.exe --help';
- //ShowMessage (s);
- //RunDosInMemo(s, Memo1);
- s := ExtractFilePath(Application.ExeName)+'gpg.exe --gen-key';
- RunDosInMemo(s, Memo1);
- end;
- {{/code}}
 |
Вопрос задал: mirt.steelwater (статус: Посетитель)
Вопрос отправлен: 16 декабря 2010, 12:49
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 17 декабря 2010, 17:35; участников в обсуждении: 2.
|
mirt.steelwater (статус: Посетитель), 17 декабря 2010, 17:10 [#1]:
нет никакого готового класса может быть для чтения и записи в чужую консоль? возможно есть dll, написанные на с++ для этих целей?
Ⓐ свобода сопротивление солидарность
|
|
Вадим К (статус: Академик), 17 декабря 2010, 17:35 [#2]:
в некоторых случаях можно обойтись пайпами.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|