问题描述
如题,我在使用这个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是不是为空。