输出LRESULT到控制台

时间:2014-01-16 06:31:43

标签: c++ visual-studio-2013

我正在尝试将文本从记事本窗口输出到控制台,它始终为0。 我做错了什么?

int main()
{

    HWND hwnd = (HWND)0x0031019C; // Window Handler of Notepad
    char szBuf[4096];
    HWND hwndEdit;
    LRESULT result;

    hwndEdit = FindWindowEx(hwnd, NULL, L"Edit", NULL); // Class for edit box
    result = SendMessage(hwndEdit, WM_GETTEXT, sizeof(szBuf) / sizeof(szBuf[0]), (LPARAM)szBuf);

    cout<<"Contents: \n"<<result;
    cin.get();

    return 0;
}

我尝试print_f,但输出了不可读的字符:

printf( "Contents: %s\n", result, szBuf );

1 个答案:

答案 0 :(得分:1)

在我看来,你可能会发生一些不匹配的事情。

基于L"Edit",您似乎正在进行Unicode构建(否则,您会收到有关无法将wchar_t const[5]转换为LPCSTR的错误消息,以及代码无法编译。

但是,如果进行Unicode构建,WM_GETTEXT会将Unicode数据写入缓冲区,因此您需要为缓冲区准备并使用Unicode而不是窄字符。

为方便起见,我对它进行了一些修改以找到记事本,而不是使用硬编码的窗口句柄。

#include <windows.h>
#include <stdio.h>

#define elements(b) (sizeof(b)/sizeof(b[0]))

int main() {

    HWND hwnd; // Window Handler of Notepad
    wchar_t buf[4096]={0};
    HWND hwndEdit;
    LRESULT result;

    hwnd=FindWindowEx(NULL, NULL, L"Notepad", NULL);
    hwndEdit=FindWindowEx(hwnd, NULL, L"Edit", NULL); // Class for edit box
    result = SendMessage(hwndEdit, WM_GETTEXT, elements(buf), (LPARAM)buf);

    printf("%S", buf);
    return 0;
}

我建立了:

cl /DUNICODE whatever.cpp user32.lib

然后我做了一个快速测试,打印出我在记事本中键入的文本。为了验证结果,我然后在记事本中编辑了文本,再次运行它,并打印出修改后的文本。

相关问题