Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 825

/ вопрос открыт /

Здравствуйте, товарищи эксперты!
Собственно ищу эффективный способ взаимодействия с GNU PGP. это консолькое приложение с открытыми исходниками, используется повсеметно для надежного шифрования. проблема в том, что у меня не получаетсяя корректно непрерывно читать/писать в консоль. нашел в сети вот такую функцию, пытаюсь с ней работать:
хелп выводиться нормально, все ок.
но как только доходит дело до генерации ключей, где нужно отвечать на вопросы, вводить пароли и т.п. - тут ничего не получается:(
подскажите как быть?

Приложение:
  1. {{code}}
  2. procedure RunDosInMemo(CmdLine: string; AMemo: TMemo);
  3. const
  4. ReadBuffer = 2400;
  5. var
  6. Security: TSecurityAttributes;
  7. ReadPipe, WritePipe: THandle;
  8. start: TStartUpInfo;
  9. ProcessInfo: TProcessInformation;
  10. Buffer: Pchar;
  11. BytesRead: DWord;
  12. Apprunning: DWord;
  13. begin
  14. Screen.Cursor := CrHourGlass;
  15. Form1.Button1.Enabled := False;
  16. with Security do
  17. begin
  18. nlength := SizeOf(TSecurityAttributes);
  19. binherithandle := true;
  20. lpsecuritydescriptor := nil;
  21. end;
  22. if Createpipe(ReadPipe, WritePipe,
  23. @Security, 0) then
  24. begin
  25. Buffer := AllocMem(ReadBuffer + 1);
  26. FillChar(Start, Sizeof(Start), #0);
  27. start.cb := SizeOf(start);
  28. start.hStdOutput := WritePipe;
  29. start.hStdInput := ReadPipe;
  30. start.dwFlags := STARTF_USESTDHANDLES +
  31. STARTF_USESHOWWINDOW;
  32. start.wShowWindow := SW_HIDE;
  33.  
  34. if CreateProcess(nil,
  35. PChar(CmdLine),
  36. @Security,
  37. @Security,
  38. true,
  39. NORMAL_PRIORITY_CLASS,
  40. nil,
  41. nil,
  42. start,
  43. ProcessInfo) then
  44. begin
  45. repeat
  46. Apprunning := WaitForSingleObject
  47. (ProcessInfo.hProcess, 100);
  48. ReadFile(ReadPipe, Buffer[0],
  49. ReadBuffer, BytesRead, nil);
  50. Buffer[BytesRead] := #0;
  51. OemToAnsi(Buffer, Buffer);
  52. AMemo.Text := AMemo.text + string(Buffer);
  53.  
  54. Application.ProcessMessages;
  55. until (Apprunning <> WAIT_TIMEOUT);
  56. end;
  57. FreeMem(Buffer);
  58. CloseHandle(ProcessInfo.hProcess);
  59. CloseHandle(ProcessInfo.hThread);
  60. CloseHandle(ReadPipe);
  61. CloseHandle(WritePipe);
  62. end;
  63. Screen.Cursor := CrDefault;
  64. Form1.Button1.Enabled := True;
  65. end;
  66.  
  67. procedure TForm1.Button1Click(Sender: TObject);
  68. var
  69. s: string;
  70. begin
  71. Memo1.Clear;
  72. //s := ExtractFilePath(Application.ExeName)+'gpg.exe --help';
  73. //ShowMessage (s);
  74. //RunDosInMemo(s, Memo1);
  75. s := ExtractFilePath(Application.ExeName)+'gpg.exe --gen-key';
  76. RunDosInMemo(s, Memo1);
  77. end;
  78. {{/code}}


mirt.steelwater Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: mirt.steelwater (статус: Посетитель)
Вопрос отправлен: 16 декабря 2010, 12:49
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 17 декабря 2010, 17:35; участников в обсуждении: 2.
mirt.steelwater

mirt.steelwater (статус: Посетитель), 17 декабря 2010, 17:10 [#1]:

нет никакого готового класса может быть для чтения и записи в чужую консоль? возможно есть dll, написанные на с++ для этих целей?
Ⓐ свобода сопротивление солидарность
Вадим К

Вадим К (статус: Академик), 17 декабря 2010, 17:35 [#2]:

в некоторых случаях можно обойтись пайпами.
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:47
Выполнено за 0.03 сек.