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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
井上

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

#1

投稿記事 by 井上 » 14年前

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;
}


アバター
tk-xleader
記事: 158
登録日時: 14年前
連絡を取る:

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

#3

投稿記事 by tk-xleader » 14年前

STARTUPINFO::wShowWindowにSW_HIDEを指定すればいいのではないでしょうか?

STARTUPINFO - MSDN(英語)

閉鎖

“C言語何でも質問掲示板” へ戻る