我正在尝试将文本从记事本窗口输出到控制台,它始终为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 );
答案 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
然后我做了一个快速测试,打印出我在记事本中键入的文本。为了验证结果,我然后在记事本中编辑了文本,再次运行它,并打印出修改后的文本。