FindWindowExonChildDialogWindow我正在尝试获取子对话窗口的句柄。我尝试使用FindWindowEx,但没有用。相反,FindWindow确实有效。我使用以下代码试验了VisualStudio的选项窗口:IntPtrvsHandle=Process.GetProcessById(vsProcessId).Ma??inWindowHandle;//与spy++的选项窗口父句柄一致IntPtroptionsHandle=FindWindowEx(vsHandle,IntPtr.Zero,"#32770","Options");//返回0IntPtroptionsHandle2=FindWindow("#32770","Options");//返回正确的句柄据我了解,FindWindowEx应该可以工作,它是一个子窗口。我正在运行Windowsxp,也尝试使用FindWindowEx(vsHandle,IntPtr.Zero,"#32770",null)。没工作。看起来获得它的唯一方法是使用FindWindow,这还不够好,因为可以打开具有相同对话框的两个父实例。这是声明:[DllImport("user32.dll")]PrivatestaticexternIntPtrFindWindow(stringclassName,stringwindowTitle);[DllImport("user32.dll")]PrivatestaticexternIntPtrFindWindowEx(IntPtrparentHWnd,IntPtrchildAfterHWnd,stringclassName,stringwindowTitle);提前致谢。我找到了解决办法。FindWindowEx不起作用的原因是因为它只适用于具有WS_CHILD样式的子窗口,而对话框窗口显然没有。这就是EnumChildWindows也不起作用的原因(我试过了)。所以丑陋的解决方案是EnumWindows结合GetParent来比较句柄和文本。以上就是C#学习教程:子对话窗口FindWindowEx分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——structSearchData{publicstringWindowText;公共IntPtr父句柄;公共IntPtr结果句柄;}delegateboolEnumWindowsCallback(IntPtrcurrentWindowHandle,refSearchDatasearchData);[DllImport("user32.dll")]staticexternboolEnumWindows(EnumWindowsCallbackcallback,refSearchDatasearchData);[DllImport("user32.dll")]staticexternIntPtrGetParent(IntPtrchildHandle);[DllImport("user32.dll")]staticexternvoidGetWindowText(IntPtrhandle,StringBuilderresultWindowText,intmaxTextCapacity);staticboolCallback(IntPtrcurrentWindowHandle,refSearchDatasearchData){boolcontinue=IntPtrcurrentWindowParentHandle=GetParent(currentWindowHandle);如果(currentWindowParentHandle==searchData.ParentHandle){varwindowText=newStringBuilder(1024);GetWindowText(currentWindowHandle,windowText,windowText.Capacity);如果(窗口文本.ToString()==searchData.WindowText){searchData.ResultHandle=currentWindowHandle;继续枚举=??假;}}返回继续枚举;}IntPtrGetChildWindowHandle(stringwindowText,IntPtrparentHandle){varsearchData=newSearchData{winndleText,parentHandle};EnumWindows(回调,参考搜索数据);返回searchData.ResultHandle;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
