?»??»?#include #include const char* lpApplicationName = "C:\\\\Program Files\\\\Microsoft Office\\\\OFFICE11\\\\WINWORD.EXE" ; static STARTUPINFO si; static PROCESS_INFORMATION pi; HWND childHwnd; DWORD lpdwProcessId; int maxW = GetSystemMetrics(SM_CXSCREEN); int maxH = GetSystemMetrics(SM_CYSCREEN); static char szWindowName[81]; static char szClassame[41]; static char szbuffer[256]; const char* szAppName = "MyWndClass" ; BOOL CALLBACK EnumWindowsProc( HWND, LPARAM ) ; LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ) ; //µ{¦¡¶i¤JÂI int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { WNDCLASSEX wc ; HWND hwnd ; MSG Msg ; wc.cbSize = sizeof(WNDCLASSEX) ; wc.style = 0 ; wc.lpfnWndProc = WndProc ; wc.cbClsExtra = 0 ; wc.cbWndExtra = 0 ; wc.hInstance = hInstance ; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ) ; wc.hCursor = LoadCursor( NULL, IDC_ARROW ) ; wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1) ; wc.lpszMenuName = NULL ; wc.lpszClassName = szAppName ; wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION ) ; if( !RegisterClassEx(&wc) ) { MessageBox(NULL, "µøµ¡Ãþ§Oµn°O¥¢±Ñ!", "µo¥Í¿ù»~!", MB_ICONEXCLAMATION | MB_OK ) ; return 0 ; } hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, szAppName, "¨Æ¥óªì¨B", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, maxW, maxH, NULL, NULL, hInstance, NULL ) ; if( hwnd == NULL ) { MessageBox(NULL, "µøµ¡«Ø¥ß¥¢±Ñ!", "µo¥Í¿ù»~!", MB_ICONEXCLAMATION | MB_OK ) ; return 0 ; } ShowWindow(hwnd, SW_MAXIMIZE); UpdateWindow(hwnd) ; while(GetMessage(&Msg, NULL, 0, 0) > 0) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; } LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) { HDC hMyDC; PAINTSTRUCT ps; switch(msg) { case WM_LBUTTONDOWN: ZeroMemory(&si,sizeof(STARTUPINFO)); ZeroMemory(&pi,sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOWNORMAL; CreateProcess(lpApplicationName,NULL,NULL,NULL,false,0,NULL,NULL,&si,&pi) ; WaitForInputIdle(pi.hProcess,INFINITE); // ¨ç¦¡µ¥­Ô¡Aª½¨ì°Ñ¼Æ¤§³B²zºü¶i¤J«Ý¾÷ª¬ºA EnumWindows((WNDENUMPROC)EnumWindowsProc, (LPARAM)(HANDLE)hwnd); SetParent(childHwnd, hwnd); SetWindowPos(childHwnd, HWND_TOP, 0, 0, maxW, maxH-(int)(maxH*80./maxW), 4); break; case WM_CLOSE: TerminateProcess(pi.hProcess,(DWORD)-1); DestroyWindow(hwnd) ; break ; case WM_DESTROY: PostQuitMessage(0) ; break ; default: return DefWindowProc( hwnd, msg, wParam, lParam ) ; } return 0 ; } BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lparam ) { // GetParent ¨ç¦¡¦pªG¦^¶Ç 0¡A¥Nªíµo¥Í¿ù»~©ÎªÌ top-level µøµ¡¨S¦³ owner¡A§_«h // ¦³¤÷µøµ¡´N¦^¶Ç¤÷µøµ¡ªº¥N½X¡A¦³ top-level µøµ¡¦³ onwer ´N¦^¶Ç owner ¥N½X if( GetParent(hwnd) == 0 && IsWindowVisible(hwnd) && GetLastError() == 0 ) { GetWindowThreadProcessId(hwnd,&lpdwProcessId); if( lpdwProcessId == pi.dwProcessId ) { childHwnd = hwnd; return false; // ¤£¦bÄ~Äò©¹¤U¦CÁ| } } return true; }