淡定0606 2015-06-18 08:46 采纳率: 100%
浏览 3345
已采纳

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);
        }
    }
  • 写回答

1条回答 默认 最新

  • 不是阿尔伯特 2015-06-18 09:01
    关注
    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'作为字符串的结束符,但是遇到多字节的是有可能出问题的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘