使用GetWindowText获取不到窗口标题

问题描述

如题,我在使用这个api函数的时候有的时候就会莫名其妙的获取不到标题而有的时候却又可以获取到,有些莫名其妙的。代码如下。[DllImport("user32.dll",CharSet=CharSet.Auto)]publicstaticexternintGetWindowText(IntPtrhWnd,[Out,MarshalAs(UnmanagedType.LPTStr)]StringBuilderlpString,intnMaxCount);publicstaticstringGetText(IntPtrhWnd){StringBuilderresult=newStringBuilder(128);GetWindowText(hWnd,result,result.Capacity);returnresult.ToString();}

请大神来解答,再此先表示感谢。

解决方案

解决方案二:
你得描述什么情况下取不到,这个函数本来也不是一定能取到总之问题信息不够,继续补充
解决方案三:
首先我确定那个窗口一定有标题。我是用EnumWindows来取的,回调函数如下。privateboolEnumLoginWindowsCallBack(IntPtrhWnd,intlParam){uintpid;Win32Api.GetWindowThreadProcessId(hWnd,outpid);if(pid!=lParam){returntrue;}//确认是否为登录遍历的两个进程如果不是直接返回如果是继续操作//if(Win32Api.IsWindow(hWnd)&&Win32Api.IsWindowVisible(hWnd))if(Win32Api.IsWindow(hWnd)){Thread.Sleep(100);//不加这块有可能找不到窗口标题StringBuilderClassName=newStringBuilder(128);StringBuilderTitle=newStringBuilder(128);Win32Api.GetWindowText(hWnd,Title,Title.Capacity);Win32Api.GetClassName(hWnd,ClassName,ClassName.Capacity);if(!ClassName.ToString().Equals("TXGuiFoundation")){returntrue;}if(!Title.ToString().Equals("QQ")){returntrue;}QQLoginPtr=hWnd;returnfalse;}returntrue;}

我在没家回调函数里的sleep之前是不一定能取到的但是加了后就取到了,请问这是怎么回事?十分感谢你的解答。
解决方案四:
这个不太确定,看不出为什么Sleep会影响结果看你这段代码的用途,为什么不使用FindWindow呢?
解决方案五:
窗口与Thread.Sleep(100);应该没有什么关系,
解决方案六:
先用spy++看看这句柄的text是不是为空。

时间: 2024-08-26 12:28:52

使用GetWindowText获取不到窗口标题的相关文章

mfc-MFC获取编辑框中的数字

问题描述 MFC获取编辑框中的数字 如何获取编辑框中的数字并以int形式存储到time这个变量中? 解决方案 直接用 GetDlgItemInt 就可以了. 解决方案二: 先从编辑框中获取字符串.然后将字符中转成数字,最后完成将数字存入 time 变量的过程. 1) 对该edit添加一个CEdit变量,比如m_edtPutin; 在需要得到变量的地方使用 CString str; m_edtPutin.GetWindowText(str); str就是edit中的字符串. 2) 使用 atoi

windows常用 API函数

系统API查询 http://www.vbgood.com/api.html http://hi.baidu.com/3582077/item/9cc3483b581f53c5392ffae3 第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄, 这个函数的定义是这样的 HWND WINAPI FindWindow(LPCSTR lpClassName,LPCSTR lpWindowName);第一个参数填窗口的类名,第二个填窗口的标题名,其实是不需要同时

windows常用API函数

系统API查询 http://www.vbgood.com/api.html http://hi.baidu.com/3582077/item/9cc3483b581f53c5392ffae3 第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄, 这个函数的定义是这样的 HWND WINAPI FindWindow(LPCSTR lpClassName,LPCSTR lpWindowName);第一个参数填窗口的类名,第二个填窗口的标题名,其实是不需要同时

代码-问一个win32application中,我创建了对话框,

问题描述 问一个win32application中,我创建了对话框, 在对话框中我拖进去编辑框控件,问题是如何使用编辑框,得到输进去的数字求求各位高手了,最好有具体代码,感激不尽!!! 解决方案 用GetDlgItem获取编辑框窗口句柄,用GetWindowText获取编辑框内容,用atoi等函数将字符串转换成整数或者用 GetDlgItemInt 解决方案二: 直接用GetDlgItemInt就可以了.不需要什么"G?e?t?DlgItem获取到控件,然后GetWindowText获取控件文本

vs2015-如果对话框中数据大于等于0,则计数为1,反之则计数为零,如何完成

问题描述 如果对话框中数据大于等于0,则计数为1,反之则计数为零,如何完成 大家好,请教下大家: 需要根据条件完成计数,不知改如何完成 如果对话框中数据大于等于0,则计数为1,反之则计数为零,如何完成 解决方案 GetWindowText获取数据,然后if来判断 解决方案二: $count=$_GET['x']: $i=0; if($count>0) { $i++; } retrun $i; 解决方案三: 非常感谢两位的指教,后来想想可能是除数为零时导致的异常结果,我目前的代码是这样写的,其中m

语言课程设计-用vc6.0编写一个登陆界面,求大神

问题描述 用vc6.0编写一个登陆界面,求大神 用户名与密码写在代码里 密码输入三次自动退出 并且登陆成功后可以运行九九乘法表这个小程序 谢谢各位大神 解决方案 还没说使用什么编程语言呢 解决方案二: MFC or WIN32? CLoginDIalog; CDIalog { private: int login_count; ..... 看看MFC的实现 } 解决方案三: 用VC6的对话框模板工程建立,然后就是两个EDIT 控件分别放用户名,密码 输入后,GetWindowText获取,然后比

mfc-MFC组合框连接access数据库输出文字到编辑框

问题描述 MFC组合框连接access数据库输出文字到编辑框 如题,准备做一个查询系统,想在组合框中输入查询内容,点击查询,连接access数据库,将所得内容输出在编辑框中~数据库做好了 解决方案 GetWindowText获取组合框等输入内容,然后用CString的Format拼接SQL语句,查询数据库,获取返回的记录集 然后SetWindowText设置各个对应的字符串

vc++6.0mfc-vc++6.0如何实现在模态对话框编辑框中输入数据,单击确定按钮将数据添加到组合框按钮中!

问题描述 vc++6.0如何实现在模态对话框编辑框中输入数据,单击确定按钮将数据添加到组合框按钮中! vc++6.0如何实现在模态对话框编辑框中输入数据,单击确定按钮将数据添加到组合框按钮中!我'是个新手,请求详解! 解决方案 添加编辑框,组合框 ctrl+w映射两个成员变量,一个对应编辑框(比如m_edit1),一个对应组合框(比如m_combo1),添加一个按钮. 双击按钮,编写 UpdateData(true); m_combo1.AddString(m_edit1); 解决方案二: 大神

vc++6.0如何实现基于对话框模态对话框中编辑框的内容显示在主对话框静态文本中?

问题描述 vc++6.0如何实现基于对话框模态对话框中编辑框的内容显示在主对话框静态文本中? vc++6.0基于对话框如何实现在模态对话框中输入一个数,然后点击确定按钮将编辑框中的数值显示在主对话框的静态文本中.(注:静态文本的默认值为10)求具体步骤和代码! 解决方案 模式对话框 class CSubDlg : public CDialogEx { ... public: int num; //定义一个成员变量 }; //对话框初始化函数 BOOL CSubDlg::OnInitDialog(