C++获取光标所在位置的句柄,并向光标处发送数据,用PostMessage(),要详细代码。

C++获取光标所在位置的句柄,并向光标处发送数据,用PostMessage()实现,要详细代码。如果有其他实现也可以,用的vc++6.0主要是怎么获取光标处的句柄,c++... C++获取光标所在位置的句柄,并向光标处发送数据,用PostMessage()实现,要详细代码。
如果有其他实现也可以,用的vc++6.0
主要是怎么获取光标处的句柄,c++小白,给出具体的代码,包括变量定义,函数的调用等。
展开
 我来答
帐号已注销
2017-09-15
知道答主
回答量:11
采纳率:0%
帮助的人:8.3万
展开全部

通过Windows API 函数“HWND WindowFromPoint(POINT Point)”可以获取光标所在处的窗口的句柄。需要有一个触发消息来调用这个函数:比如按下键盘上的某个按键来触发这个函数调用。这是个简单的示范,能够模拟鼠标点击其他窗口的关闭按钮行为;要获得更完善的方案,可以给我私信。

具体操作方法:运行程序,让后将鼠标指针移动至其他窗口之上,最好是在标题栏上;然后按下键盘上的任意按键(推荐按字母键)。

在VC++6.0“文件”菜单中,新建一个空的“Win32 AppLication”工程。然后新建一个.cpp源文件,在源文件中写入如下代码:

#include <windows.h>

LRESULT CALLBACK WindowProc(HWND hdl_wnd, UINT msg_code, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
 WNDCLASS wndcls;
 wndcls.cbClsExtra = 0;
 wndcls.cbWndExtra = 0;
 wndcls.hbrBackground = (HBRUSH)COLOR_BTNSHADOW;
 wndcls.hCursor = ::LoadCursor(NULL, IDC_ARROW);
 wndcls.hIcon = ::LoadIcon(NULL, IDI_APPLICATION);
 wndcls.hInstance = hInstance;
 wndcls.lpfnWndProc = WindowProc;
 wndcls.lpszClassName = "gethandle";
 wndcls.lpszMenuName = NULL;
 wndcls.style = CS_VREDRAW | CS_HREDRAW;

 ::RegisterClass(&wndcls);
 ::CreateWindow("gethandle", "获取窗口句柄", WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE, 200, 120, 400, 300, NULL, NULL, hInstance, 0);

 MSG msg;
 while (::GetMessage(&msg, NULL, 0, 0))
 {
   ::TranslateMessage(&msg);
   ::DispatchMessage(&msg);
 }

 return 1;
}

LRESULT CALLBACK WindowProc(HWND hdl_wnd, UINT msg_code, WPARAM wParam, LPARAM lParam)
{
 LRESULT value = 0;
 switch (msg_code)
 {
   case WM_CLOSE:
     ::PostQuitMessage(WM_QUIT);
   break;
    //注意:必须在本窗口获得键盘输入焦点的时候,WM_KEYDOWN消息才能生效!
    //如果想在本窗口没有焦点的时候都能生效,则需要安装全局的键盘钩子。
   case WM_KEYDOWN:
   {
     POINT pt;
     HWND hdl_other;
     ::GetCursorPos(&pt);  //获取鼠标指针的坐标
     hdl_other = ::WindowFromPoint(pt); //将该坐标传递给获取句柄的函数
     ::PostMessage(hdl_other, WM_CLOSE, 0, 0);  //用获取到的句柄,向目标窗口发送一个WM_CLOSE消息。WM_CLOSE消息相当于用户点击了窗口右上角的关闭按钮。
   }
   break;
   default:
   return ::DefWindowProc(hdl_wnd, msg_code, wParam, lParam);
 }
 return value;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式