많은 것들이 시도되었지만 내 작업 표시 줄이 숨겨져 있고 내 데스크톱 UI에 다른 초자연적 인 효과가있는 가운데 계속 작동하도록 할 수는 없습니다.윈도우를 추가/활성화하는 방법을 알려주는 "windows hook"시스템을 추가하는 방법은 무엇입니까?
열기 라이브러리 http://mwinapi.sourceforge.net/을 먼저 사용해보십시오. 그것은 창문과 물건을 열거하기위한 객체 지향 레이어로 잘 작동했지만. 걸이를 제대로 할 수 없었습니다
다음 정류장은 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