WM_GETTEXT没有显示正确的文本

时间:2017-09-20 05:59:14

标签: c++ winapi

我在制作可注射的记事本文本查看器时遇到问题。我想我可能错误地访问了hwndEdit HWND。目前,当我运行该程序时,它显示

  

╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠

作为文字

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

int main() {
    AllocConsole();
    SetConsoleTitleA("Notepad Viewer");
    FILE *c;
    freopen_s(&c, "CONOUT$", "w", stdout);
    freopen_s(&c, "CONIN$", "r", stdin);

    DWORD hwndEditAddress = 0x41E1B4;
    HWND hwndEdit = *(HWND*)&hwndEditAddress;

    for (;;) {
        TCHAR text[256];
        SendMessage(hwndEdit, WM_GETTEXT, sizeof(text) / sizeof(text[0]), LPARAM(text));
        std::cout << "Current Text: " << text;
        std::string input;
        std::getline(std::cin, input);
    }
}

2 个答案:

答案 0 :(得分:1)

对应于(扩展的)ASCII代码204,其为十六进制的0xCC。 Visual C ++ CRT使用一系列0xCC字节来标记未初始化的内存。因此,您的输出基本上是一些未初始化的内存区域的转储。

在您的代码中,您调用SendMessge传递hwndEdit句柄;但是你用来初始化这个句柄的逻辑还不清楚并且有臭味:

DWORD hwndEditAddress = 0x41E1B4;
HWND hwndEdit = *(HWND*)&hwndEditAddress;

答案 1 :(得分:-1)

这段代码很奇怪

DWORD hwndEditAddress = 0x41E1B4;
HWND hwndEdit = *(HWND*)&hwndEditAddress;

你也可以写

HWND hwndEdit = (HWND)0x41E1B4;

具有完全相同的效果。

接下来发生的是该值不是窗口句柄的值。因此,尝试读取文本失败,text永远不会被修改。最后,打印一个未初始化的字符数组,这是未定义的行为。

您需要重新访问获取窗口句柄的逻辑。

相关问题