繁体   English   中英

SendMessage C ++

[英]SendMessage c++

我正在编写一个程序,我需要一个功能SendMessage来模拟游戏窗口中的按键,但是我不知道如何使用此功能:

#include <Windows.h>
#include <iostream>

int main()
{
        HWND hWnd = FindWindow(NULL,"Game");
        HWND edit = FindWindowEx(hWnd, NULL, "Edit", NULL);
        SendMessage(edit, WM_CHAR, (TCHAR) 'H', 0);
        SendMessage(edit, WM_CHAR, (TCHAR) 'L', 0);
        SendMessage(edit, WM_CHAR, (TCHAR) 'O', 0);
}

在“游戏”和“编辑”中存在此错误:

Error: l'argomento di tipo "const char *" è incompatibile con il parametro di tipo "LPCWSTR"

因此很明显,您正在将应用程序编译为UNICODE。 考虑到这一点:

"Edit"不是16位的WIDE字符串,而是8位的NARROW字符串,并且在用UNICODE编译时, CreateWindow需要一个WIDE字符串。 改用TEXT("Edit")L"Edit" "Game"相同。

在配置属性->常规og项目属性的“字符集”中具有“使用Unicode字符集”。 这就是为什么几乎所有带有文本转盘的WinAPI函数的名称末尾都带有W的原因。 因此,您可以通过几种方式解决此问题:

  1. 更改字符集以使用多字节字符集
  2. 使用FindWindowA和FindWindowExA和SendMessageA
  3. 添加tchar.h头文件并使用_T(“ Game”)等宏

它抱怨LPCWSTR的事实意味着您的项目正在使用Unicode进行编译(在预处理阶段定义了UNICODE_UNICODE )。 这意味着TCHAR版本的FindWindow(Ex)()映射到需要LPWSTRwchar_t* )参数的FindWindow(Ex)W() ,而不是映射到需要LPSTRchar* )参数的FindWindow(Ex)A()

"Game""Edit"是没有附加任何说明符的字符串文字,因此编译器将它们解释为const char[] char[]可以降级为char* ,但是不能将其传递给需要wchar_t*地方。 这就是为什么您得到错误。

因此,您有几种选择:

  1. 在项目设置中禁用Unicode,那么您显示的代码将按原样编译。

  2. 使用TCHAR版本的函数时,应使用TEXT()宏包装文字,以根据是否启用Unicode将它们解释为const wchar_t[]const char[]

     HWND hWnd = FindWindow(NULL, TEXT("Game")); HWND edit = FindWindowEx(hWnd, NULL, TEXT("Edit"), NULL); 
  3. 完全停止使用FindWindow(Ex)()TCHAR版本。 直接使用FindWindow(Ex)A()FindWindow(Ex)W()代替:

     HWND hWnd = FindWindowA(NULL, "Game"); HWND edit = FindWindowExA(hWnd, NULL, "Edit", NULL); 

     HWND hWnd = FindWindowW(NULL, L"Game"); HWND edit = FindWindowExW(hWnd, NULL, L"Edit", NULL); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM