gpt4 book ai didi

c++ - 从另一个窗口上的控件获取文本时出现问题

转载 作者:搜寻专家 更新时间:2023-10-31 01:06:30 47 4
gpt4 key购买 nike

我正在尝试使用来自 win32 api 的 SendMessage 获取记事本窗口文本框中的文本。我首先找到窗口句柄,然后使用 SendMessage(hwndEdit, WM_GETTEXT, (WPARAM)bufferSize, (LPARAM)textBuffer) 获取文本。出于某种原因,即使它可以告诉我文本的正确长度,该程序也只返回记事本文本的 1 个字符,即使我有 1024 作为我应该返回的缓冲区大小也是如此。我查看了我找到的示例,我的做法与示例相同。我不知道为什么会这样,有人可以帮助我或指出我的错误吗?

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

int main()
{
printf("finding notepad window\n");
HWND hwndNotepad = FindWindow(NULL, L"Untitled - Notepad");
if(NULL != hwndNotepad)
{
printf("Find edit control window\n");
HWND hwndEdit = FindWindowEx(hwndNotepad, NULL, L"EDIT", NULL);

if(NULL != hwndEdit)
{
printf("- get text length\n");
int textLen = (int)SendMessage(hwndEdit, WM_GETTEXTLENGTH, 0, 0);
printf("textlength: %d\n", textLen);
if(0 < textLen)
{
const int bufferSize = 1024;
char textBuffer[bufferSize] = "";
SendMessage(hwndEdit, WM_GETTEXT, (WPARAM)bufferSize, (LPARAM)textBuffer);
printf("getting text:\n");
printf("%s\n", textBuffer);
}
else
{
printf("its empty\n");
}
}
else
{
printf("I cant find this control\n");
}
}
else
{
printf("I cant find notepad window. \n");
}
return 0;
}

截图:http://i.imgur.com/bUhVqlq.png

最佳答案

这可能是因为 NotePad 使用的是 UNICODE。试试这个

int copied = SendMessage(hwndEdit, WM_GETTEXT, (WPARAM)bufferSize, (LPARAM)textBuffer);
printf("Copied %d chars.\n", copied);

找出你的被调用者认为它复制了多少个字符。尝试以下操作来打印 UNICODE 文本:

const int bufferSize = 1024;
wchar_t textBuffer[bufferSize] = "";
int copied = SendMessage(hwndEdit, WM_GETTEXT, (WPARAM)bufferSize, (LPARAM)textBuffer);
printf("Copied %d chars.\n", copied);
printf("getting text:\n");
wprintf(L"%ls \n", textBuffer);

如果您使用的是 Visual Studio,可能值得尝试进入您的项目选项(右键单击项目 -> 配置属性 -> 常规 -> 字符集)并将其设置为 ANSI(“未设置”)。

关于c++ - 从另一个窗口上的控件获取文本时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20706185/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com