| Цитата(zhefran @ 1.9.2010, 15:03) | Цитата(cat512 @ 30.8.2010, 14:14 ) | Да возьми заюзай Net.exe в дочернем процессе, а консольный вывод перенаправь в родительский процесс. И будет у тебя Net.exe завраплен в гуи |
Никогда такого не делал. Можешь скинуть пример или обьяснить как это делается? |
примерно так:
| Код |
uses
unit Unit1;
interface
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) Panel1: TPanel; Button1: TButton; Memo1: TMemo; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure ExecConsoleApp( const ProcessName: string; const CommandLine: AnsiString; Errors: TStrings ); var sa: TSECURITYATTRIBUTES; si: TSTARTUPINFO; pi: TPROCESSINFORMATION; hPipeErrorsRead: THANDLE; hPipeErrorsWrite: THANDLE; Res, bTest: Boolean; szBuffer: array[0..256] of Char; dwNumberOfBytesRead: DWORD; Stream: TMemoryStream; begin sa.nLength := sizeof(sa); sa.bInheritHandle := True; sa.lpSecurityDescriptor := nil; CreatePipe(hPipeErrorsRead, hPipeErrorsWrite, @sa, 0); ZeroMemory(@si, SizeOf(si)); ZeroMemory(@pi, SizeOf(pi)); si.cb := SizeOf(si); si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; si.wShowWindow := SW_HIDE; si.hStdInput := 0; si.hStdOutput := hPipeErrorsWrite; si.hStdError := 0;
Res := CreateProcess(PChar(ProcessName), pchar(CommandLine), nil, nil, true, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, si, pi);
if not Res then begin CloseHandle(hPipeErrorsRead); CloseHandle(hPipeErrorsWrite); Exit; end; CloseHandle(hPipeErrorsWrite);
Stream := TMemoryStream.Create; try while true do begin bTest := ReadFile(hPipeErrorsRead, szBuffer, 256, dwNumberOfBytesRead, nil); if not bTest then begin break; end; Stream.Write(szBuffer, dwNumberOfBytesRead); end; Stream.Position := 0; Errors.LoadFromStream(Stream); finally Stream.Free; end;
WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(hPipeErrorsRead); end;
procedure TForm1.Button1Click(Sender: TObject); var ServerName: string; RootDir: string; Password: string; User: string;
const AppName = 'C:\windows\system32\net.exe'; begin ExecConsoleApp( AppName, //Собственно команды которые должны использ. Edit1.Text, Memo1.Lines );
end;
end.
|
Только надо строку сконвертить из Dos-овской кодировки в Win-довую |