C#求大神給看看,句柄沒問題,可以SengMessage,為什麼不能getGetWindowText取不到值
[DllImport("user32.dll", EntryPoint = "GetWindowText")]
public static extern int GetWindowText(IntPtr hwnd, string lpString, int cch);
private void timer1_Tick(object sender, EventArgs e)
{
string s = "";
int i = GetWindowText(curr_hWnd, s, 10);
if (s != "")
{
this.timer1.Stop();
MessageBox.Show(s);
}
}
int WINAPI GetWindowText(
_In_ HWND hWnd,
_Out_ LPTSTR lpString,
_In_ int nMaxCount
);
微軟對GetWindowText的定義是這樣的。在調用的時候,lpString是一個緩沖區,它是必須有長度的,而它的長度是nMaxCount,也即使告訴Windows,別寫超過nMaxCount長的字符串到lpString裡面去。
看你的調用方式,s="",也就是說0長度的字符串。然後調用的時候給了他一個10個長度,說是你的緩沖區最大長度。別說不給你數據,它不跳一個異常出來我已經覺得很驚訝了。
正確的用法是:先初始化你的s,給它一定的長度,比如說用255個空格來初始化它。然後去調用,調用的時候長度就填255.
另外,你的i是返回值,但是扔在一邊不用。這個返回值是告訴你返回的字符串的長度(是字節數,不是Unicode的字符數)。雖然有'\0'作為字符串的結束符,但是遇到多字節的是有可能出問題的。