掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ShellExecuteで開くマイコンピュータのサイズと位置を指定する (ID:61001)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
参考までに実験したコードを載せておきます。 誤り等ありましたら、ご指摘ください。 # EnumWindowsで該当ProcessIDで探してもダメでした。 // WindowsXp SP2 Pro/VS2005Pro or VC++6.0SP6Enter/Win32 ConsoleApp #include <windows.h> struct PROCESS_INFORMATIONEX : public PROCESS_INFORMATION { HWND hWnd; }; BOOL CALLBACK EnumThreadWndProc( HWND hWnd, LPARAM lParam ) { if ( !::GetParent( hWnd ) ) { *( reinterpret_cast< HWND* >( lParam ) ) = hWnd; return FALSE; } return TRUE; } BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam ) { PROCESS_INFORMATIONEX* pi = reinterpret_cast< PROCESS_INFORMATIONEX* >( lParam ); DWORD dwProcessId = 0; ::GetWindowThreadProcessId( hWnd, &dwProcessId ); if ( pi->dwProcessId == dwProcessId ) { pi->hWnd = hWnd; return FALSE; } return TRUE; } int main() { STARTUPINFO si = { 0 }; PROCESS_INFORMATIONEX pi; si.cb = sizeof( si ); si.dwX = 0; si.dwY = 0; si.dwXSize = 400; si.dwYSize = 400; si.wShowWindow = SW_HIDE; si.dwFlags = STARTF_USESHOWWINDOW;// | STARTF_USESIZE | STARTF_USEPOSITION; TCHAR szCmd[] = TEXT( "explorer" ); //TCHAR szCmd[] = TEXT( "notepad" ); if ( ::CreateProcess( NULL, szCmd, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi ) ) { ::WaitForInputIdle( pi.hProcess, INFINITE ); //::EnumThreadWindows( pi.dwThreadId, EnumThreadWndProc, reinterpret_cast< LPARAM >( &pi.hWnd ) ); ::EnumWindows( EnumWindowsProc, reinterpret_cast< LPARAM >( &pi ) ); if ( ::IsWindow( pi.hWnd ) ) { ::MoveWindow( pi.hWnd, si.dwX, si.dwY, si.dwXSize, si.dwYSize, TRUE ); ::ShowWindow( pi.hWnd, SW_SHOW ); ::SetForegroundWindow( pi.hWnd ); } ::WaitForSingleObject( pi.hProcess, INFINITE ); ::CloseHandle( pi.hThread ); ::CloseHandle( pi.hProcess ); } return 0; }
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.