程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> hwnd-C#求大神給看看,句柄沒問題,可以SengMessage,getGetWindowText取不到值

hwnd-C#求大神給看看,句柄沒問題,可以SengMessage,getGetWindowText取不到值

編輯:編程綜合問答
C#求大神給看看,句柄沒問題,可以SengMessage,getGetWindowText取不到值

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'作為字符串的結束符,但是遇到多字節的是有可能出問題的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved