当前位置: 首页 > 编程语言 > C#

获取另一个进程的窗口状态分享

时间:2023-04-11 11:55:52 C#

获取另一个进程的窗口状态如何获取正在运行的另一个进程的窗口状态(最大化、最小化)?我试过使用这个:Process[]procs=Process.GetProcesses();foreach(Processprocinprocs){if(proc.ProcessName=="notepad"){MessageBox.Show(proc.StartInfo.WindowStyle.ToString());但是如果进程是Maximized或者Minimized,它会返回Normal。如何解决这个问题呢?您需要通过P/Invoke使用Win32检查另一个窗口的状态。以下是一些示例代码:staticvoidMain(string[]args){Process[]procs=Process.GetProcesses();foreach(Processprocinprocs){if(proc.ProcessName=="notepad"){varplacement=GetPlacement(proc.MainWindowHandle);MessageBox.Show(placement.showCmd.ToString());}}}privatestaticWINDOWPLACEMENTGetPlacement(IntPtrhwnd){WINDOWPLACEMENTplacement=newWINDOWPLACEMENT();placement.length=Marshal.SizeOf(placement);GetWindowPlacement(hwnd,参考位置);回归安置;}[DllImport("user32.dll",SetLastError=true)][返回:MarshalAs(UnmanagedType.Bool)]internalstaticexternboolGetWindowPlacement(IntPtrhWnd,refWINDOWPLACEMENTlpwndpl);[可序列化][StructLayout(LayoutKind.Sequential)]internalstructWINDOWPLACEMENT{publicintlength;公共int标志;公共ShowWindowCommandsshowCmd;公共System.Drawing.PointptMinPosition;公共System.Drawing.PointptMaxPosition;publicSystem.Drawing.RectanglercNormalPosition;}在ternalenumShowWindowCommands:int{Hide=0,Normal=1,Minimized=2,Maximized=3,}pinvoke.net提供的定义您正在使用proc.StartInfo,这是不正确的。它不反映目标进程的运行时窗口样式。这只是您可以设置的启动信息,然后可以在启动时将其传递给进程。C#签名是:[DllImport("user32.dll",SetLastError=true)]staticexternintGetWindowLong(IntPtrhWnd,intnIndex);您需要使用p/invoke并调用GetWindowLong(hWnd,GWL_STYLE),并传递proc。MainWindowHandle作为hWnd参数传递。您可以通过以下方式检查窗口是否最小化/最大化:intstyle=GetWindowLong(proc.MainWindowHandle,GWL_STYLE);if((style&WS_MAXIMIZE)==WS_MAXIMIZE){//它被最大化了}elseif((style&WS_MINIMIZE)==WS_MINIMIZE){//它被最小化了}注意:flags(WS_MINIMIZE等)的值可以可以在这个页面找到:http://www.pinvoke.net/default.aspx/user32.getwindowlong感谢卡卡西指出我们测试结果中的错误。两种窗口状态(最大化/最小化)都可以通过调用WinAPIIsIconic()/IsZoomed()获得:);[DllImport("user32.dll")]publicstaticexternboolShowWindowAsync(IntPtrhWnd,ShowWindowCommandscmdShow);if(IsIconic(_helpWindow.MainWindowHandle)){ShowWindowAsync(_helpRETOWindow.MainWindowHandle,ShowWindowHandle,ShowWindowSW)枚举定义ShowWindowCommands和其他函数取自www.PInvoke.net在WindowsPowerShell中,您可以使用以下代码执行此操作:它是使用过,需要了解更多C#学习教程,希望大家多多关注—Add-Type-AssemblyNameUIAutomationClient$prList=Get-Process-Name""$prList|%{$ae=[System.Windows.Automation.AutomationElement]::FromHandle($_.MainWindowHandle)$wp=$ae.GetCurrentPattern([System.Windows.Automation.WindowPatternIdentifiers]::Pattern)echo"窗口标题:$($_.MainWindowTitle)"echo"窗口视觉状态:$($wp.Current.WindowVisualState)"}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: