popenのプロンプト画面非表示 – プログラミング – Home

popenのプロンプト画面非表示
 
通知
すべてクリア

popenのプロンプト画面非表示


ゲンガオ
 ゲンガオ
(@ゲンガオ)
ゲスト
結合: 14年前
投稿: 1
Topic starter  

タイトルどおりpopen関数でのプロンプト画面を非表示にするやりかたを探しています。

しかしコマンドがたたけてコマンドプロンプトが非表示になるならなんでもいいです。
でも、batファイルを作成するのはなしです。

system   →非表示にするやり方がわからない
shellexecute→バッチファイルはダメ(winexecも同様)
popen


引用解決済
トピックタグ
の
 の
(@の)
ゲスト
結合: 16年前
投稿: 7
 

CreateProcessでよいのでは?
他にも
exec系
fork系
ありそうですけど、試す気にはなりません
>でも、batファイルを作成するのはなしです。
#この書き方は微妙に回答減ると思いますよ。


返信引用
solid
 solid
(@solid)
ゲスト
結合: 14年前
投稿: 17
 

popenは使ったことがないのでパスして
CreatePipeとCreateProcessで試してみました

CString Execute(CString strIn)
{
SECURITY_ATTRIBUTES saAttr ;
HANDLE hSaveStdOut ;
HANDLE hSaveStdIn ;
HANDLE hSaveStdError ;
HANDLE hChildStdoutRead;
HANDLE hChildStdoutWrite;
CString strOut ;

strOut = _T(") ;

saAttr.nLength = sizeof(SECURITY_ATTRIBUTES) ;
saAttr.bInheritHandle = true ;
saAttr.lpSecurityDescriptor = NULL ;

hSaveStdOut = GetStdHandle(STD_OUTPUT_HANDLE) ;
hSaveStdIn = GetStdHandle(STD_INPUT_HANDLE) ;
hSaveStdError = GetStdHandle(STD_ERROR_HANDLE) ;

if(!CreatePipe(&hChildStdoutRead, &hChildStdoutWrite,
&saAttr, 4096)) {
return strOut;
}

if(!SetStdHandle(STD_OUTPUT_HANDLE, hChildStdoutWrite)) {
return strOut;
}

PROCESS_INFORMATION Process ;
STARTUPINFO StartInfo ;
memset(&StartInfo, 0, sizeof(STARTUPINFO)) ;
StartInfo.cb = sizeof(STARTUPINFO);
StartInfo.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
StartInfo.wShowWindow = SW_HIDE ;
StartInfo.hStdInput = hSaveStdIn ;
StartInfo.hStdOutput = hChildStdoutWrite ;
StartInfo.hStdError = hSaveStdError ;

if(!CreateProcess(NULL, strIn.GetBuffer(), NULL, &saAttr,
true, CREATE_NEW_CONSOLE, NULL, NULL,
&StartInfo, &Process)) {
return strOut;
}

if(!SetStdHandle(STD_OUTPUT_HANDLE, hSaveStdOut)) {
CloseHandle(hChildStdoutWrite) ;
return strOut;
}
CloseHandle(hChildStdoutWrite) ;

DWORD dwOutRead;
DWORD dwRtn ;
bool bEnd = false ;
CHAR szBuffer[1024] ;
TCHAR* pDst ;
int sizeInput ;

sizeInput = 0 ;
while (1)
{
if(!ReadFile(hChildStdoutRead, szBuffer, 1000,
&dwOutRead, NULL)) {
dwOutRead = 0 ;
}
if(dwOutRead==0 && bEnd == true) {
break ;
}
if(dwOutRead>0) {
szBuffer[dwOutRead] = 0 ;
pDst = ConvertToUnicode(szBuffer) ;
strOut += pDst ;
delete [] pDst ;
}
dwRtn = WaitForSingleObject(Process.hProcess, 0) ;
if(dwRtn == WAIT_ABANDONED || dwRtn ==WAIT_OBJECT_0) {
bEnd = true ;
}
Sleep(10) ;
}

return strOut ;
}


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました