|
|
// ******************************************************************************
// メッセージ ハンドラ
// ******************************************************************************
LRESULT CALLBACK MyDialog( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
int id;
switch( message )
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
id = LOWORD(wParam);
switch( id ) {
case IDOK:
PostMessage( GetParent( hDlg ),WM_CLOSE, 0, 0 );
break;
case IDC_EXECMEMO:
ExecuteProgram( "notepad.exe" );
break;
}
break;
}
return FALSE;
}
// ******************************************************************************
// 外部プログラムの実行
// ******************************************************************************
void ExecuteProgram( char *Program )
{
int ret;
PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory( &pi , sizeof(PROCESS_INFORMATION));
ZeroMemory( &si , sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;
ret = CreateProcess(
NULL,
Program,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi
);
}
| |
|
|
|
|
// ******************************************************************************
// 外部プログラムの実行
// ******************************************************************************
void ExecuteProgram( char *Program )
{
int ret;
PROCESS_INFORMATION pi;
STARTUPINFO si;
DWORD procStatus;
MSG msg;
ZeroMemory( &pi , sizeof(PROCESS_INFORMATION));
ZeroMemory( &si , sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;
ret = CreateProcess(
NULL,
Program,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi
);
WaitForInputIdle(pi.hProcess,INFINITE);
while (1) {
while (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE )) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
GetExitCodeProcess( pi.hProcess, &procStatus ) ;
if ( procStatus != STILL_ACTIVE ) {
break;
}
}
CloseHandle(pi.hProcess);
}
| |
|
|
|