以下のようになりました。
一応ちゃんと開いて閉じるのですがやり方はあっているのでしょうか。
それとももっとスマートな方法とかあるのでしょうか
グローバル変数を使うのはあまりよくないと聞いたりもします。
HINSTANCE hInst;
/// Excelファイルを開く.
hInst = ShellExecute( NULL, TEXT("open"), "家計簿.xls", NULL, NULL, SW_MINIMIZE );
s_hFindWhd = NULL;
EnumWindows( EnumWindowsProc , (LPARAM)hInst );
if( s_hFindWhd ) PostMessage( s_hFindWhd, WM_CLOSE, 0, 0 );
HWND s_hFindWhd = NULL;
BOOL CALLBACK EnumWindowsProc( HWND _hWnd , LPARAM _lp )
{
TCHAR strWindowText[64];
if( (HINSTANCE)_lp != (HINSTANCE)GetWindowLong( _hWnd, GWL_HINSTANCE) )
{
GetWindowText(_hWnd , strWindowText , 64);
if (strWindowText[0] == 0) return TRUE;
if( NULL != strstr( strWindowText, TEXT("Microsoft") ) )
if( NULL != strstr( strWindowText, TEXT("Excel") ) )
{
s_hFindWhd = _hWnd;
return FALSE;
}
}
return TRUE;
}
一式わたしのサイトにもアップしてあります。