ページ 11

CreateProcessで起動したプログラムを後ろに移動させたい

Posted: 2011年9月09日(金) 16:43
by 井上
CreateProcessで起動したプログラムを
メインウィンドウより後ろに持ってきたいのですが、やり方が分かりません。
Windowsで表示順を変更する方法をご存じの方がいらっしゃいましたら
教えていただけるとありがたいです。

コード:

// test.exe
// メモ帳のウィンドウハンドル
HWND    hNotepad;

// ウィンドウハンドルを取得しする
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
    // CreateProcess()で取得したPROCESS_INFORMATION構造体のポインタを取得
    PROCESS_INFORMATION* pi = (PROCESS_INFORMATION*)lParam;

    // ウインドウを作成したプロセスIDを取得。
    DWORD lpdwProcessId = 0;
    ::GetWindowThreadProcessId(hWnd, &lpdwProcessId);

    // CreateProcessで起動したアプリのプロセスIDとメインウィンドウを
    // 作成したプロセスIDが同じ場合、起動したアプリを終了させる。
    if(pi->dwProcessId == lpdwProcessId)
    {
        hNotepad = hWnd;
        
        return FALSE;
    }
    return TRUE;
}

// ウィンドウのメモ帳を起動する
int CallNotepad()
{

    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory((LPVOID)&si,sizeof(STARTUPINFO));
    si.cb = sizeof(STARTUPINFO);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_SHOWNORMAL;
    char buf[32];
    sprintf(buf, "notepad.exe");
	
    if(!CreateProcess(NULL, buf,NULL,NULL,FALSE,
			CREATE_DEFAULT_ERROR_MODE | NORMAL_PRIORITY_CLASS ,NULL,NULL,&si,&pi) ){
        return 1;
    }
    // メモ帳が起動するのを待つ
    WaitForInputIdle(pi.hProcess, 10000 );

    // コールバック関数の呼び出し。
    if( EnumWindows(EnumWindowsProc, (LPARAM)&pi) )
        return 1;

    // "notepad.exe"がメインウィンドウより前に表示されてしまう。
	

    return 0;
}

Re: CreateProcessで起動したプログラムを後ろに移動させたい

Posted: 2011年9月09日(金) 17:03
by Blue
SetWindowPosでできないですかね?
http://msdn.microsoft.com/ja-jp/library/cc411206.aspx

Re: CreateProcessで起動したプログラムを後ろに移動させたい

Posted: 2011年9月09日(金) 23:45
by tk-xleader
STARTUPINFO::wShowWindowにSW_HIDEを指定すればいいのではないでしょうか?

STARTUPINFO - MSDN(英語)