Windows API GetWindowText

 函数功能:该函数将指定窗口的标题条文本(如果存在)拷贝到一个缓存区内。如果指定的窗口是一个控制,则拷贝控制的文本。但是,GetWindowTeXt不能接收在其他应用程序中的控制文本。

    函数原型:Int GetWindowText(HWND hWnd,LPTSTR lpString,Int nMaxCount);

    参数:

    hWnd:带文本的窗口或控制的句柄。

    IpString:指向接收文本的缓冲区的指针。

    nMaxCount:指定要保存在缓冲区内的字符的最大个数,其中包含NULL字符。如果文本超过界限,它就被截断。

    返回值:如果函数成功,返回值是拷贝的字符串的字符个数,不包括中断的空字符;如果窗口无标题栏或文本,或标题栏为空,或窗口或控制的句柄无效,则返回值为零。若想获得更多错误信息,请调用GetLastError函数。

    函数不能返回在其他应用程序中的编辑控制的文本。

    备注:如果目标窗口属于当前进程,GetWindowText函数给指定的窗口或控制发送WM_GETTEXT消息。如果目标窗口属于其他进程,并且有一个窗口标题,则GetWindowTeXt返回窗口的标题文本,如果窗口无标题,则函数返回空字符串。


以上转至Windows API

其实GetWindowText的lpString参数的数据类型:LPTSTR本来对应的是C#中的string, 但这里的IpString是指针,考虑过用out,但是无用,还会抛异常

最后使用StringBuilder的时候使用正常,这里做个记录

 [DllImport("User32.dll", EntryPoint = "GetWindowText")]
        private static extern int GetWindowText(
                int hwnd,
                StringBuilder lpString,
                int nMaxCount
            );
        public static string GetWindowTitle(int hwnd)
        {
            StringBuilder s = new StringBuilder(65565);
            Tool.GetWindowText(hwnd, s, 65565);
            return s.ToString();
        }

 这里需要注意下的就是需要给StringBuilder指定长度,不然当标题栏比较长时,会爆越界的异常


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值