多くのことを試してみましたが、私のタスクバーが嫌になったり、デスクトップのUIに他の超自然的な影響が出たりする中で、一貫して動作させることはできません。システムを追加する方法 "ウィンドウフック"は、ウィンドウの作成/アクティブ化を通知するように?
最初のオープンライブラリhttp://mwinapi.sourceforge.net/を使用してみました。それはウィンドウや物を列挙するためのOOレイヤーとしてうまく機能しましたが。これは、適切に
次の停車駅はDino E.'s post on Windows Hooks in the .Net frameworkたフックを行うことができませんでした。テキストを理解してこれを動作させようとしているので、私は自分のタイプを書いてしまいました。
このアプリケーションを実行し、作成したすべてのウィンドウを実行中にログに記録することができます。すべての眼球を呼び出す...
アップデート:どうやらので、切り取らあなたcan't write global windows hooks in .Net /(いくつかの低レベルのマウスやキーボードフックを除く)マネージコードを
は、だから私はC++に切り替えました。それでもすべてのWinAPI呼び出しは有効なハンドルを返しますが、フィルタ機能が呼び出されることはありません。通知を受け取っていないようです。まだ動作しません...誰かが間違いを発見することはできますか?
void CWinHookFacade::Hook()
{
HMODULE hCurrentDll = LoadLibrary(_T("[Path to my hook dll]"));
m_HookHandle = SetWindowsHookEx(WH_CBT,
FilterFunctionForHook,
hCurrentDll,
0);
if (m_HookHandle == NULL)
{
throw new std::exception("Unable to hook");
}
}
void CWinHookFacade::Unhook()
{
if (!UnhookWindowsHookEx(m_HookHandle))
{
throw new std::exception("Unhook failed!");
}
m_HookHandle = NULL;
}
LRESULT CWinHookFacade::FilterFunctionForHook(int code, WPARAM wParam, LPARAM lParam)
{
if (code >= 0)
{
switch(code)
{
case HCBT_CREATEWND:
wprintf(_T("Created Window"));
break;
case HCBT_ACTIVATE:
wprintf(_T("Activated Window"));
break;
case HCBT_DESTROYWND:
wprintf(_T("Destroy Window"));
break;
}
}
return CallNextHookEx(m_HookHandle, code, wParam, lParam);
}
クライアントのexeファイルは、私はあなたがC#でフック関数を実装しようとしているので、あなたが抱えている問題があると思います。この
int _tmain(int argc, _TCHAR* argv[])
{
CWinHookFacade::Hook();
getchar();
CWinHookFacade::Unhook();
}
明確にするために、SetWindowsHookExは毎回有効なハンドルを返します。誰かがこれを試してみたい場合には、上記のコードには他の依存関係はありません。空のプロジェクトの.csファイルに貼り付けて実行します。 – Gishu