exeファイルの起動について教えてください
はじめまして。
現在c言語を勉強しているのですが、プログラム内で別のプログラムのexeファイルを呼び出し起動させたいのですが、サイトをいろいろ回ったのですが上手くいきませんでした。
環境は、Microsoft Visual C++ 2005 Express Edition
現在の呼び出し方法は、
case IDC_AI:
/* 表示の次へボタン有効化 */
// SendMessage( hwnd, WM_SETREDRAW, TRUE, 0);
/* 表示 */
// ShowWindow( IAhwnd, SW_SHOW);
// CGMain(IAhwnd, message, wParam, IParam, nCmdShow2);
// ShellExecute(hwnd, "open", "C:\\Documents and Settings\\c319-1037\\デスクトップ\\卒業研究\\プログラム\\11-12\\SQL組と合わせるよう\\Debug\\D3DFWSample2005.exe", NULL, NULL, SW_SHOW);
path=(char*)calloc(MAX_PATH+1,sizeof(char));
if(0!=GetModuleFileName( NULL, buf, MAX_PATH )){// 実行ファイルの完全パスを取得
char drive[MAX_PATH+1]
,dir [MAX_PATH+1]
,fname[MAX_PATH+1]
,ext [MAX_PATH+1];
_splitpath(buf,drive,dir,fname,ext);//パス名を構成要素に分解します
// file = '"';
// file += "\\";
// file += '"';
file = drive;
file += dir;
file += "SQL組と合わせるよう\\Debug\\D3DFWSample2005.exe";
// file += '"';
// file += '"';
MessageBox( hwnd, file.c_str(), "完全パス", MB_OK);
// MessageBox( hwnd, drive, "ドライブ", MB_OK);
// MessageBox( hwnd, dir, "ディレクトリ パス", MB_OK);
// MessageBox( hwnd, fname, "ベース ファイル名 (拡張子なし)", MB_OK);
}
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
MessageBox( hwnd, "秀丸を起動します", "完全パス", MB_OK);
// 秀丸を起動する
if( !CreateProcess( NULL, // No module name (use command line).
(LPSTR)file.c_str(), // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure.
)
{
MessageBox( hwnd, "CreateProcess failed.", "実行エラー", MB_OK);
iRtn = -1;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
MessageBox( hwnd, "秀丸を終了しました", "完全パス", MB_OK);
return iRtn;
です。
よろしくお願いします。
お礼
MoveWindowやSetWindowPosを使った方法で考えてみようと思います。 ありがとうございました。
補足
早速アドバイスありがとうございます。 si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESIZE; ではやはりうまくいきませんでした。 呼び出したアプリのほうで起動してからサイズと位置を調整しているのかなと思ったりもします。 FindWindowでウィンドウハンドルを取得してSetWindowPosをする方法も考えてみます。