별종 키보드 갈고리 DLL 자체 설치 갈고리
#pragma data_seg ()
static HHOOK g_hKeyboardHook = NULL;
static HINSTANCE g_hInst = NULL;
#pragma data_seg ()
#pragma comment (linker, "/section:Shared, rws")
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) {
switch(fdwReason){
case DLL_PROCESS_ATTACH:
g_hInst = (HINSTANCE) hInstance;
。。。。。
그리고 두 개의 출력 함수를 사용합니다: 하나는 갈고리를 설치하고 하나는 마운트를 해제합니다
MY_API BOOL HookKey ()
{
....
g_hKeyboardHook = ::SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, g_hInst, NULL);
....
}
CreateRemoteThread는 설치 훅의 내보내기 함수를 호출합니다.
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
BOOL bKeyUp = lParam & (1 << 31);// ,
if (bKeyUp && wParam == VK_HOME && nCode == HC_ACTION) {
////////////////////// ////////////////////////////////////////////////////
//AfxMessageBox("ok");
if (myform == NULL)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CWnd *pCWnd = CWnd::GetForegroundWindow();
myform = new CMyForm();
myform->Create(IDD_MYFORM,pCWnd);
myform->ShowWindow(SW_SHOW);
}
else
{
myform->ShowWindow(myform->IsWindowVisible() ? SW_HIDE : SW_SHOW);
}
//////////////////////////////////////////////////////////////////////////
}
return ::CallNextHookEx(g_hhook, nCode, wParam ,lParam);
}
extern "C" __declspec(dllexport) BOOL WINAPI InstallHook(HWND h)
{
if (g_hhook == NULL) {
DWORD pmod;
DWORD hThread = GetWindowThreadProcessId(h,&pmod);
g_hhook = ::SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc,theApp.m_hInstance,hThread);
if (g_hhook != NULL)
return TRUE;
}
return FALSE;
}
extern "C" __declspec(dllexport) BOOL WINAPI InstallHook(HWND h)
{
if (g_hhook == NULL) {
DWORD pmod;
DWORD hThread = GetWindowThreadProcessId(h,&pmod);
g_hhook = ::SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc,theApp.m_hInstance,hThread);
if (g_hhook != NULL)
return TRUE;
}
return FALSE;
}
전재 대상:https://www.cnblogs.com/rogee/archive/2011/02/01/1948720.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.