C++怎样得到另一个窗口的位置坐标等信息,是通过HOOK来实现吗怎样实现我需要目标窗口实时坐标

C++怎样得到另一个窗口的位置坐标等信息,是通过HOOK来实现吗怎样实现我需要目标窗口实时坐标,第1张

不需要HOOK

#include <windowsh>

int main()

{

HWND hwnd = FindWindow( 0, "plan - 记事本" ) ;

RECT rect ;

GetWindowRect( hwnd, &rect ) ;

cout << "左上角坐标:" << rectleft << " " << recttop << endl

<< "右下角坐标" << rectright << " " << rectbottom << endl ;

}

在我电脑上打印:

左上角坐标: 1115 384

右下角坐标: 1577 438

实时更简单,你要响应鼠标移动消息的实时,你就在WM_MOUSEMOVE里加入这两句代码

不然就WM_TIMER里加入这两句吧

HOOK方法 vs Non-Hook方法

HOOK无非是希望在目标窗口WM_MOVE,WM_SIZE里获取并更新坐标

但是要HOOK其他进程的窗口的话,你需要放CALLBACK放在DLL里

简洁但是麻烦

Non-Hook也就是上面两句代码简单但不是很有效率

最后说句,以后你可以把这种问题发布到MFC领域,那里会得到更多答案

因为这个不是C++而是win32编程,

[DllImport("user32dll")]

public extern static int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);

             

StringBuilder s = new StringBuilder(512);                              

int i = GetWindowText(thisHandle, s, sCapacity); //把thishandle换成你需要的句柄                

MessageBoxShow(sToString());

The

GetProcessHandleFromHwnd

function

retrieves

a

process

handle

from

a

window

handle

HANDLE

WINAPI

GetProcessHandleFromHwnd(

HWND

hwnd,

);

这个函数通过窗口句柄获得进程句柄。有了进程句柄,PID是不是就知道怎么获得了?什么?不知道?那我告诉你,GetProcessId可以通过进程句柄获得进程ID:

DWORD

WINAPI

GetProcessId(

__in

HANDLE

Process

);

你是想模拟按键么

首先要获得窗口的句柄

用下面的函数应该能找到:

FindWindow根据类名\窗口标题寻找窗口

遍历顶层窗口EnumWindows

遍历窗口回调函数EnumWindowProc

遍历父窗口的所有子窗口EnumChildWindows

返回父窗口Point处的子窗口ChildWindowFromPoint

ChildWindowFromPointEx多一个参数UINT来忽略不可见无效透明的子窗口

获取与指定窗口具有莫种关系的窗口GetWindow

获取父窗口的子窗口中Z序最大的子窗口GetTopWindow

获取指定窗口相同层次Z序差1的窗口GetNextWindow

获取桌面窗口句柄GetDesktopWindow

用SendMessage函数不需要窗口标题的,只要句柄

LRESULT

SendMessage(

HWND

hWnd,

//

handle

of

destination

window

UINT

Msg,

//

message

to

send

WPARAM

wParam,

//

first

message

parameter

LPARAM

lParam

//

second

message

parameter

);

或者用keybd_event函数,要先用SetForegroundWindow函数把目标窗口设置成前台窗口

VOID

keybd_event(

BYTE

bVk,

//

virtual-key

code

BYTE

bScan,

//

hardware

scan

code

DWORD

dwFlags,

//

flags

specifying

various

function

options

DWORD

dwExtraInfo

//

additional

data

associated

with

keystroke

);

补充:

第一个:我进入某个游戏,用CE查到内存地址后,退出游戏,再查内存地址,两个内存地址是不一样的,有什么办法可以让每次的内存地址都一样?或者说下别的解决方法?

不让每次的内存地址都一样应该是做不到的,游戏每次运行由系统分配内存,哪能让你控制啊。

第二个:我想让鼠标在内存数值到某一个数值时,鼠标移动到某点进行鼠标 *** 作,该怎么写源代码?

定义一个指针变量p,类型根据你需要的数值而定

p=该内存地址

if(p==该数值)

{

//mousemove

}

以上就是关于C++怎样得到另一个窗口的位置坐标等信息,是通过HOOK来实现吗怎样实现我需要目标窗口实时坐标全部的内容,包括:C++怎样得到另一个窗口的位置坐标等信息,是通过HOOK来实现吗怎样实现我需要目标窗口实时坐标、c#已知其他窗口句柄怎么获取窗口标题、C#如何通过进程名称获取指定窗口的句柄,通过该句柄获取该窗口的标题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9820326.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存