2011-08-15 57 views
1

我使用的是一個全球性的CBT鉤子程序中下面的代碼:GetWindowText函數()返回空字符串和奇怪的錯誤

TCHAR title[256]; 
int getT = GetWindowText(hWnd, title, 256); 
if (getT == 0) { 
    int err = GetLastError(); 
    logFile << "Error GetWindowText(): " << err << endl; 
} else { 
    logFile << "getT = " << getT << endl; 
} 

的問題是,對於某些窗口GetWindowText函數()函數工作得很好,我得到正確的窗口標題,但對於其他一些它返回0,我得到一個空字符串。 GetLastError()返回183,這是ERROR_ALREADY_EXISTS:

當該文件已存在時無法創建文件。

錯誤不是隨機的:我總是得到它與同一應用程序打開的同一種窗口,但對於所有其他窗口似乎工作正常。

+0

您是否試圖在另一個應用程序中檢索編輯控件的文本? –

+0

不,我試圖獲得窗口的標題 –

+0

這是我們可以在我們的系統上測試的窗口嗎? –

回答

0

您可能沒有權利從Windows Vista及更高版本的某些窗口中檢索文本。

我的猜測是,當您打印「Error GetWindowText():」時,ERROR_ALREADY_EXISTS來自您的日誌文件。在做其他事情之前,你應該首先得到錯誤代碼。

另一種可能性是該窗口從其WM_GETTEXT處理程序返回0而未設置最後的錯誤。正如GetWindowText文檔所述,如果您在屬於同一進程的窗口上調用它,它會通過發送此消息來檢索文本。既然你是從鉤子調用函數,你可能會在同一個進程中。

+0

編寫代碼以在寫入文件之前檢索錯誤,並且它仍然返回相同的奇怪錯誤。另外,我在Win XP上。 –

+0

你是從鉤子打來的,對吧?如果窗口處於同一個進程中,則通過發送WM_GETTEXT消息來檢索窗口文本,該消息可能會返回0而不設置最後的錯誤。 GetLastError會返回183,如果你在* GetWindowText之前調用它* –