2011-08-15 16 views
1

を返す:GetWindowText()私はグローバルCBTフックプロシージャ内の次のコードを使用しています空の文字列と奇妙なエラー

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関数は、()ERROR_ALREADY_EXISTSがされた183を返します。

エラーはランダムではありません:私はいつも同じアプリケーションで開かれた同じ種類のウィンドウで取得しますが、他のすべてのウィンドウでは正常に動作しているようです。

+0

他のアプリケーションで編集コントロールのテキストを取得しようとしていますか? –

+0

いいえ、私はウィンドウのタイトルを取得しようとしています –

+0

これは私たちがテストすることができる我々のシステム上にあるウィンドウですか? –

答えて

0

Windows Vista以上の特定のウィンドウからテキストを取得する権利がない場合があります。

"Error GetWindowText():"を印刷すると、ERROR_ALREADY_EXISTSがログファイルから取得されると思います。他に何かをする前にまずエラーコードを取得する必要があります。

最後のエラーを設定せずにウィンドウがWM_GETTEXTハンドラから0を返す可能性があります。 GetWindowTextのドキュメントでは、同じプロセスに属するウィンドウで呼び出すと、このメッセージを送信してテキストを取得します。フックから関数を呼び出すので、同じプロセスにいる可能性があります。

+0

ファイルに書き込む前にエラーを取得するコードを編集しましたが、それでも同じ奇妙なエラーが返されます。また、私は勝つXPのです。 –

+0

あなたはフックからこれを呼んでいますよね?ウィンドウが同じプロセス内にある場合は、WM_GETTEXTメッセージを送信してウィンドウテキストを取得します。このメッセージは、最後のエラーを設定せずに0を返す可能性があります。 * GetWindowTextの前に*呼び出すと、GetLastErrorは183を返しますか? –