为什么在win7下全局键盘钩子(用delphi写的)会失效?(在xp下测试能用)如果是权限问题,要怎么提权?

为什么在win7下全局键盘钩子(用delphi写的)会失效?(在xp下测试能用)如果是权限问题,要怎么提权?,第1张

可以通过代码和设置编译器的两种方式来做到。 delphi我不会,我给你C++的代码,你改一下就行了: //提权 HMODULE hDll = ::LoadLibrary("ntdll.dll")typedef int (__stdcall * type_RtlAdjustPrivilege)(int, bool, bool, int*)type_RtlAdjustPrivilege RtlAdjustPrivilege = (type_RtlAdjustPrivilege)GetProcAddress(hDll, "RtlAdjustPrivilege")int nEn = 0RtlAdjustPrivilege(0x14,TRUE,FALSE,&nEn)FreeLibrary(hDll)//结束

安装个消息钩子即可

首先创建个钩子dll 核心代码

//-------------------------------------dllmain上面添加

HHOOK g_hHookGetMessage = NULL

#pragma data_seg("seg")

HWND g_hMainWnd = NULL

#pragma data_seg()

#pragma comment(linker, "/section:seg,RWS")

dll函数实现

LRESULT CALLBACK GetMsgProc(int code, WPARAM wParam, LPARAM lParam)

{

if(code == HC_ACTION)

{

CWPSTRUCT * pcw=reinterpret_cast<CWPSTRUCT *>(lParam)

if(pcw->message == WM_SYSCOMMAND)

{

if (pcw->wParam==SC_MINIMIZE)

{

//TODO:在此添加你的处理代码

MessageBox(NULL,"最小化了","11",MB_OK)

}else if (pcw->wParam==SC_MAXIMIZE)

{

//TODO:在此添加你的处理代码

MessageBox(NULL,"最大化了","22",MB_OK)

}

}

}

return CallNextHookEx(g_hHookGetMessage, code, wParam, lParam)

}

void InstallHook_GetMessage()

{

g_hHookGetMessage = SetWindowsHookEx(WH_CALLWNDPROC, GetMsgProc, ::GetModuleHandle("APIHook_Dll"), 0)

}

void InstallHooks(HWND hWnd)

{

g_hMainWnd = hWnd

InstallWordHook_GetMessage()

}

void UnInstallHooks()

{

UnhookWindowsHookEx(g_hHookGetMessage)

}

//-------测试钩子,测试的是任务管理器

void Testtaskmgr()

{

HANDLE Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

PROCESSENTRY32 processListStr

if(Snapshot==(HANDLE)-1)

{

return

}

BOOL iFind = Process32First(Snapshot, &processListStr)

processListStr.dwSize = sizeof(PROCESSENTRY32)

while(iFind)

{

CString name = "taskmgr.exe"

if (!name.Compare(processListStr.szExeFile))

{

HANDLE processhandle= OpenProcess(PROCESS_ALL_ACCESS, TRUE, processListStr.th32ProcessID)

DWORD processID = processListStr.th32ProcessID //进程ID

HWND tempHWND = GetHwndByProcessId(processID)

InstallHooks(tempHWND)

break

}

iFind = Process32Next(Snapshot, &processListStr)

}

CloseHandle(Snapshot)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6289833.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-20
下一篇 2023-03-20

发表评论

登录后才能评论

评论列表(0条)

保存