我需要获取窗口文本的长度。所以,我使用下面的代码来实现它 -
const uint SMTO_ABORTIFHUNG = 0x0002;
const int NoResponse = -1;
const uint WM_GETTEXTLENGTH = 0x000E;
static int GetWindowTextLength(IntPtr hwnd)
{
int length;
int result = SendMessageTimeout(hwnd, WM_GETTEXTLENGTH, 0, 0, SMTO_ABORTIFHUNG, 500, out length);
if (result == 0) return NoResponse; else return length;
}
[DllImport("user32.dll", EntryPoint = "SendMessageTimeout", CharSet = CharSet.Auto)]
public static extern int SendMessageTimeout(IntPtr hwnd, uint Msg, int wParam, int lParam, uint fuFlags, uint uTimeout, out int lpdwResult);
我正在使用SMTO_ABORTIFHUNG标志,以便在指定的超时后发出。但是,有时候,调用似乎在调用SendMessageTimeout时被阻止,并且没有出来。
我用google搜索SendMessageTimeout是否存在任何已知限制,但找不到任何限制。
我不确定我在这里缺少什么才能让它始终正常工作。
非常感谢任何帮助。
此致 kvk938