游戏安全1--C,C++ 利用Windows API 操作游戏窗口

本文介绍了WindowsAPI中的几个关键函数,如FindWindowA用于查找指定类名或窗口名的窗口句柄,SetWindowTextA用于设置窗口标题,而GetWindowTextA则用于获取窗口标题。通过示例代码展示了如何使用这些函数来操作窗口。
摘要由CSDN通过智能技术生成

学习目标:
  
识记句柄的作用
了解窗口句柄类型HWND
了解FindWindowA        访问指定窗口的句柄

HWND FindWindowA(
  [in, optional] LPCSTR lpClassName,
  [in, optional] LPCSTR lpWindowName
);

/*
参数
[in, optional] lpClassName
类型: LPCTSTR
类名或上一次对 RegisterClass 或 RegisterClassEx 函数的调用创建的类名或类原子。 原子必须位于 lpClassName 的低序单词中;高阶单词必须为零。
如果 lpClassName 指向字符串,则指定窗口类名。 类名可以是向 RegisterClass 或 RegisterClassEx 注册的任何名称,也可以是预定义控件类名称中的任何名称。
如果 lpClassName 为 NULL,它将查找其标题与 lpWindowName 参数匹配的任何窗口。
[in, optional] lpWindowName
类型: LPCTSTR
窗口名称 (窗口的标题) 。 如果此参数为 NULL,则所有窗口名称都匹配。
返回值
类型:HWND
如果函数成功,则返回值是具有指定类名和窗口名称的窗口的句柄。
如果函数失败,则返回值为 NULL。 要获得更多的错误信息,请调用 GetLastError。
注解
如果 lpWindowName 参数不 为 NULL, FindWindow 将调用 GetWindowText 函数以检索窗口名称进行比较。 有关可能出现的潜在问题的说明,请参阅 GetWindowText 的备注。
*/


了解SetWindowTextA   设置标题

BOOL SetWindowTextA(
  [in]           HWND   hWnd,
  [in, optional] LPCSTR lpString
);

/*
参数
[in] hWnd
类型:HWND
要更改其文本的窗口或控件的句柄。
[in, optional] lpString
类型: LPCTSTR
新的标题或控件文本。
返回值
类型: BOOL
如果该函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
注解
如果目标窗口由当前进程所有, SetWindowText 将导致 将WM_SETTEXT 消息发送到指定的窗口或控件。 但是,如果控件是使用 WS_CAPTION 样式创建的列表框控件, 则 SetWindowText 设置控件的文本,而不是列表框条目。
若要在另一进程中设置控件的文本,请直接发送 WM_SETTEXT 消息,而不是调用 SetWindowText。
SetWindowText 函数不会 (ASCII 代码0x09) 展开制表符。 制表符显示为垂直条 (|) 个字符。
*/


了解GetWindowTextA   获得标题

int GetWindowTextA(
  [in]  HWND  hWnd,
  [out] LPSTR lpString,
  [in]  int   nMaxCount
);

/*
参数
[in] hWnd
类型:HWND
包含文本的窗口或控件的句柄。
[out] lpString
类型: LPTSTR
将接收文本的缓冲区。 如果字符串的长度或长于缓冲区,则字符串将被截断,并用 null 字符终止。
[in] nMaxCount
类型: int
要复制到缓冲区的最大字符数,包括 null 字符。 如果文本超出此限制,则会将其截断。
返回值
类型: int
如果函数成功,则返回值是复制字符串的长度(以字符为单位),不包括终止 null 字符。 如果窗口没有标题栏或文本,如果标题栏为空,或者窗口或控件句柄无效,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
此函数无法检索另一个应用程序中编辑控件的文本。
注解
如果目标窗口由当前进程拥有, GetWindowText 将导致 将WM_GETTEXT 消息发送到指定的窗口或控件。 如果目标窗口由另一个进程拥有并具有标题, GetWindowText 将检索窗口标题文本。 如果窗口没有标题,则返回值为 null 字符串。 此行为是设计使然。 如果拥有目标窗口的进程未响应,则应用程序无需响应即可调用 GetWindowText 。 但是,如果目标窗口未响应并且它属于调用应用程序, GetWindowText 将导致调用应用程序变得无响应。
若要在另一进程中检索控件的文本,请直接发送 WM_GETTEXT 消息,而不是调用 GetWindowText。
*/

通过spy++

 

 

windows.h
计算器 窗口句柄 =004D04A4   //每次重启进程的时候窗口句柄都会发生改变
计算器的 标题 "无标题-记事本"
计算器的 类名 "Notepad"

#include <iostream>
#include<Windows.h>
int main()
{
	  //HWND 窗口句柄 = FindWindowA(NULL,"计算器");// (HWND)0x0390AD0;
	HWND 窗口句柄 = FindWindowA("Notepad", "无标题 - 记事本");// 第一个参数是类名;
	printf("窗口句柄=%p\r\n", 窗口句柄);
	char buffer[256] = { '0' };
	GetWindowTextA(窗口句柄, (LPSTR)buffer,256);
	printf("%s\n", buffer);
	SetWindowTextA(窗口句柄, "1111222新标题名adfadfasdfs");
	GetWindowTextA(窗口句柄, (LPSTR)buffer, 256);
	printf("%s\n", buffer);

	printf("sizeof(窗口句柄)=%zd字节\r\n", sizeof(窗口句柄)); //eax,rax
	getchar();
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值