0
コンソールウィンドウにシンボルを書くか、を入力してと入力する必要があります。私はいくつかの変更とthis answer からのコードを使用しています:CreateProcessによって開始されたcmd.exeにシンボルまたは 'Enter'を送信する方法
procedure Console_Std_Input_Test;
var
sa: TSecurityAttributes;
si: TStartupInfo;
pi: TProcessInformation;
BytesWritten: LongWord;
hInRead, hInWrite: THandle;
begin
// Initialize security information
sa.nLength := SizeOf(sa);
sa.lpSecurityDescriptor := nil;
sa.bInheritHandle := True;
CreatePipe(hInRead, hInWrite, @sa, 0);
// Initialize startup info
ZeroMemory(@si, SizeOf(si));
si.cb := SizeOf(si);
si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
si.wShowWindow := SW_SHOWNORMAL;
si.hStdInput := hInRead;
si.hStdOutput := GetStdHandle(STD_OUTPUT_HANDLE);
si.hStdError := GetStdHandle(STD_ERROR_HANDLE);
// Start process
ZeroMemory(@pi, SizeOf(pi));
CreateProcess(nil, 'cmd /k ', nil, nil, True,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, si, pi);
CloseHandle(pi.hThread);
CloseHandle(hInRead);
// Write '<enter>'
WriteFile(hInWrite, #13#10, 2, BytesWritten, nil);// nothing happens!!
//WriteFile(hInWrite, #48#49#50, 3, BytesWritten, nil);//write "012"-nothing appears too!
CloseHandle(hInWrite);
// Wait for process to exit
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
end;
私はこの問題を解決しようとするすべての一日を過ごしてきたが、私はコンソールにや一部の記号を入力し送信する方法を理解することはできません。私はMSDNとMicrosoft Supportのサンプルを見てきましたが、上のコードと異なるものは見つけられず、実際に私の誤りがどこにあるのか分かりません。
私は 'pause'のようなより単純なコマンドで動作するかどうか試してみます。 –
@ Jean-FrançoisFabre、はい、CreateProcess(nil、 'cmd/k pause' ...)を作成しましたが、何も起こりません。コンソールが入力キーを待っています – George
私はちょうど 'ポーズ'を意味します。まあ、それは同じことをすると思います。あまりにも#13#10シーケンスをいくつか追加してみてください。 –