如何用获取当前鼠标所在窗口的句柄及窗口标题用c或c++?

如何用获取当前鼠标所在窗口的句柄及窗口标题用c或c++?,第1张

#include \r\nint main()\r\n{\r\n while (1)\r\n {\r\n POINT pNow = {0,0}\r\n if (GetCursorPos(&pNow)) // 获取鼠标当前位置\r\n {\r\n HWND hwndPointNow = NULL\r\n hwndPointNow = WindowFromPoint(pNow) /稿凯/ 获取鼠标所在窗口句柄\r\n if (hwndPointNow)\r\n {\r\n/键侍唤/cout 回答于 2022-11-16

句柄(HANDLE)是WINDOWS环境下特有的窗口程序运行的识别号,而C语言是DOS环境下运行的代码,在DOS环境下,没有句柄的概念,理论上说,新老袜时期环境下的新产物,不可能在旧环境下找到,就像要求达尔文用电子邮件给出版社发送文稿一样荒诞不经,即使在控制台上运行的C程序可以通过WINDOWS任务管理器看到PID,但每次运行都前含搭不相同,那么有如何使用呢?慧拿

一个网上的例子

c# 获取鼠标处窗口句柄,程序嵌入桌面

using System

using System.Collections.Generic

using System.ComponentModel

using System.Data

using System.Drawing

using System.Text

using System.Windows.Forms

using System.Runtime.InteropServices

namespace WindowsApplication1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent()

}

[DllImport("user32.dll", EntryPoint = "FindWindow")]

public static extern int FindWindow(

string lpClassName,

string lpWindowName

)

[DllImport("user32.dll", EntryPoint = "GetWindow")]//获取窗体句柄,亏脊hwnd为源窗口句柄

/*wCmd指定结果窗口与源窗口的关系,它们建立在下述常数基础上:

GW_CHILD

寻找源窗口的第一个子窗口

GW_HWNDFIRST

为一个源子窗口寻找第一个兄弟(同级)窗口,或寻找第一个顶级窗口

GW_HWNDLAST

为一个源子余饥窗口寻找最后一个兄弟(同级)窗口,竖空返或寻找最后一个顶级窗口

GW_HWNDNEXT

为源窗口寻找下一个兄弟窗口

GW_HWNDPREV

为源窗口寻找前一个兄弟窗口

GW_OWNER

寻找窗口的所有者

*/

public static extern int GetWindow(

int hwnd,

int wCmd

)

[DllImport("user32.dll", EntryPoint = "SetParent")]//设置父窗体

public static extern int SetParent(

int hWndChild,

int hWndNewParent

)

[DllImport("user32.dll", EntryPoint = "GetCursorPos")]//获取鼠标坐标

public static extern int GetCursorPos(

ref POINTAPI lpPoint

)

[StructLayout(LayoutKind.Sequential)]//定义与API相兼容结构体,实际上是一种内存转换

public struct POINTAPI

{

public int X

public int Y

}

[DllImport("user32.dll", EntryPoint = "WindowFromPoint")]//指定坐标处窗体句柄

public static extern int WindowFromPoint(

int xPoint,

int yPoint

)

private void timer1_Tick(object sender, EventArgs e)

{

POINTAPI point = new POINTAPI()//必须用与之相兼容的结构体,类也可以

GetCursorPos(ref point)//获取当前鼠标坐标

int hwnd = WindowFromPoint(point.X, point.Y)//获取指定坐标处窗口的句柄

this.label1.Text =point.X.ToString() + ":" + point.Y.ToString() + "-" + hwnd.ToString()//显示效果,此时窗口已经嵌入桌面了

}

const int GW_CHILD = 5//定义窗体关系

private void Form1_Load(object sender, EventArgs e)

{

int hDesktop = FindWindow("Progman", null)//获取系统句柄

hDesktop = GetWindow(hDesktop, GW_CHILD)//获取其子窗口句柄,就是桌面的句柄

SetParent((int)this.Handle, hDesktop)//设置父窗体,第一个为要被设置的窗口,第二个参数为指定其父窗口句柄

}

}

}


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

原文地址: http://outofmemory.cn/yw/12358479.html

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

发表评论

登录后才能评论

评论列表(0条)

保存