gpt4 book ai didi

windows - 检测/ Hook 其他外部进程的窗口移动/拖动

转载 作者:可可西里 更新时间:2023-11-01 09:20:54 24 4
gpt4 key购买 nike

检测其他进程的窗口移动/拖动的最佳方法是什么?在 Windows7 64 位中

我目前正在研究使用 C++ 和 C# 的 DLL 中的全局 Hook 。这很痛苦,因为它不想正常工作。我在键盘和鼠标 Hook 方面取得了一些成功。但对于窗口消息,我只是不知道出了什么问题。

这是我的 .dll 文件中的代码

#include <windows.h>
#include <iostream>
#include <stdio.h>

HINSTANCE hinst;
#pragma data_seg(".shared")
HHOOK hhk;
WNDPROC realProc;
#pragma data_seg()
//#pragma comment(linker, "/SECTION:.shared,RWS") compiler error in VC++ 2008 express

LRESULT CALLBACK wireKeyboardProc(int code, WPARAM wParam,LPARAM lParam) {
//open the standard out stream for writing
freopen("CONOUT$","w+t", stdout);
printf("code:%d wparam:%d lparam:%d\n", code, wParam, lParam);

/*
if (code < 0) {
return CallNextHookEx(0, code, wParam, lParam);
}
*/
//Beep(1000, 20);

return CallNextHookEx(hhk, code, wParam, lParam);
}

LRESULT CALLBACK hookProc(HWND h, UINT msg, WPARAM wp, LPARAM lp)
{
//open the standard out stream for writing
freopen("CONOUT$","w+t", stdout);
printf("h:%d msg:%d wp:%d lp:%d\n", h, msg, wp, lp);
return CallWindowProc(realProc, h, msg, wp, lp);
}

extern "C" __declspec(dllexport) void install(unsigned long threadId, HWND hwnd) {
//open the standard out stream for writing
freopen("CONOUT$","w+t", stdout);

//works for WH_KEYBOARD WH_MOUSE but doesnt work for WH_CALLWNDPROC
hhk = SetWindowsHookEx(WH_CALLWNDPROC, wireKeyboardProc, hinst, threadId);
printf("threadId: %d xxx: %d\n", threadId, hhk);

/*
//dont know whats wrong the return value of realProc is 0
realProc = (WNDPROC)SetWindowLongPtr(hwnd, GWL_WNDPROC, (LONG_PTR)hookProc);
printf("hwnd: %d xxx: %d\n", hwnd, realProc);
*/
}

extern "C" __declspec(dllexport) void uninstall() {
UnhookWindowsHookEx(hhk);
}

BOOL WINAPI DllMain(__in HINSTANCE hinstDLL, __in DWORD fdwReason, __in LPVOID lpvReserved) {
hinst = hinstDLL;
return TRUE;
}

我正在考虑制作自己的 Aero Snap。这只是为了好玩。

感谢您的帮助。

最佳答案

经过一些额外的谷歌搜索后,我发现了一个开源项目,它几乎完全符合我的要求。

http://sourceforge.net/projects/powerresizer/

它编译起来也很容易,没有错误。它显示在它使用的代码中

SetWinEventHook(EVENT_SYSTEM_MOVESIZESTART, EVENT_SYSTEM_MOVESIZEEND,

和一个用于 Hook 程序的自定义 dll。它还显示了一些其他技巧。从未在其他任何地方见过 SetWinEventHook。如果您学到了什么,请点赞。

该死的,当然它也会在某些窗口中出现错误。

关于windows - 检测/ Hook 其他外部进程的窗口移动/拖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15750038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com