2014-01-16 257 views
0

我試圖從記事本窗口輸出文本到控制檯,它總是0. 我在做什麼錯了?輸出LRESULT到控制檯

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

我檢查了你的代碼,但在我的案例'0x0031019C'。它似乎並不是記事本的句柄。請在'FindWindowEx()'之前嘗試'GetWindowtext(hwnd,szbuf,1024)'。希望它能幫助你 –

回答

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 

然後我做了一個快速的測試,打印出來正是我想鍵入到記事本中的文本。爲了驗證結果,我然後在記事本中編輯了文本,再次運行它,並打印出修改後的文本。

+0

'wchar_t'是問題的關鍵!謝謝!如何用另一種語言輸出?只是試圖輸入俄文和輸出是空白的。 –