ページ

2007-12-17

VentctrlKicker更新

昨日公開したVentctrlKickerですが、アクティブなアプリの名前を取得する部分にバグがありました。
修正版を 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 件のコメント:

yusufyusuf さんのコメント...

Nice blog...