関数のGetWindowText
戻り値は次のように文書化されています。
関数が成功した場合、戻り値はコピーされた文字列の長さ(文字数)であり、終了ヌル文字は含まれません。ウィンドウにタイトルバーまたはテキストがない場合、タイトルバーが空の場合、またはウィンドウまたはコントロールハンドルが無効な場合、戻り値はゼロです。拡張エラー情報を取得するには、GetLastErrorを呼び出します。
GetLastError
さて、このメソッドを呼び出してゼロの戻り値を受け取ったとき、適切な値を返すかどうかをどうやって知ることができますか?結局のところ、ゼロは失敗を示すために使用されるだけでなく、ウィンドウテキストが空であることを意味する場合もあります。その場合GetLastError
、未定義の値は返されません。
私自身のアイデア:
GetWindowText
最初は、成功すると最後のエラーが0に設定されるのではないかと思いました。しかし、テストはそれがそうではないことを示しています(そして、もしそうなら、これは文書化されていないので、とにかくそれを信頼することはできませんでした)。- 次に、
GetWindowText
成功時に最後のエラーが変更されない可能性があると考えたので、呼び出しの前に自分で0に設定すると、最後のエラーが変更されたかどうかを確認できます。テストはこれがうまくいくかもしれないことを示しています、しかしそれはこのように倍増されていないので、私はそれに頼ることができません。(そして、これは具体的な状況と実装に大きく依存すると思いGetWindowText
ます。) - そしてもちろん、最初にを使用してウィンドウのテキストの長さを確認してから、長さが0より大きい場合にのみ
GetWindowTextLength
呼び出すことができます。ただし、との呼び出しの間にウィンドウがテキストを変更した場合はどうなりますか?繰り返しになりますが、エラーを示すゼロの戻り値に依存することはできませんでした。GetWindowText
GetWindowTextLength
GetWindowText
GetWindowText
では、失敗したかどうかを確実に判断するにはどうすればよいでしょうか。