ページ 11

エクセルのウィンドウハンドルを得たい

Posted: 2012年6月10日(日) 15:41
by 立花希海
エクセルを開いて閉じるだけのサンプルをネットで調べて作って見たのですが
以下のようになりました。
一応ちゃんと開いて閉じるのですがやり方はあっているのでしょうか。
それとももっとスマートな方法とかあるのでしょうか

グローバル変数を使うのはあまりよくないと聞いたりもします。

コード:

	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;
}
もっといい方法とかあったら教えて下さい。
一式わたしのサイトにもアップしてあります。

Re: エクセルのウィンドウハンドルを得たい

Posted: 2012年6月10日(日) 16:34
by トントン
OLE オートメーションを使用すれば
スマートになるのでは?


追記
調べてみましたが、
C言語で直接OLEオートメーションを使用するのは面倒くさそうですね。
視覚的にもわかりにくいし。。。

一応、参考URLを
http://detail.chiebukuro.yahoo.co.jp/qa ... 1270803672

(申し訳ないですが、エクセルを持っていないので試してないです)

Re: エクセルのウィンドウハンドルを得たい

Posted: 2012年6月13日(水) 01:03
by 立花希海
うーん、わたしにはわかりません><
やはり基礎からきっちりやらないとダメなようですね。