修正版を W-ZERO3.org Uploaderにアップしましたので、差し替えをお願いします。
昨日の版ではアクティブなアプリの名前をレジストリから取得していました。
INT i = 0; TCHAR szAppName[256] = _T("") LPTSTR pszAppName = szAppName; if (S_OK == RegistryGetString( SN_ACTIVEAPPLICATION_ROOT , SN_ACTIVEAPPLICATION_PATH , SN_ACTIVEAPPLICATION_VALUE , szAppName, 256)) { while (NULL != szAppName[i]) { if (0x1b == szAppName[i]) { pszAppName = &szAppName[i + 1]; break; } i++; } }
レジストリには1つ前のアプリ名と現在のアプリ名がエスケープキャラクタで区切られてセットされています。
ところがOpera等を使っている場合 開いているページのタイトルがアプリ名としてセットされてしまうため、 途中から高速化クライアントが無効になっていたようです。
対策としてウィンドウクラス名を使ってアクティブなアプリの判別を行うように変更してみました。
TCHAR szClassName[256] = _T("") HWND hActiveWnd = NULL; hActiveWnd = GetForegroundWindow(); if (hActiveWnd) { if (0 == GetClassName(hActiveWnd, szClassName, 256)) { szClassName[0] = NULL; } }
実はこの方法にも問題があって アプリによってはウィンドウクラス名がよくわからない(というか頻繁に変わりそうな)ものもあるので、 レジストリのアプリ名による判定も残しています。
もしかしたら高速化クライアントと併用できないアプリを登録できるようにした方がいいのかもしれませんね。
1 件のコメント:
Nice blog...
コメントを投稿