[英]Selenium webdriver C# automation script not working in edge browser
[英]Minimize Microsoft Edge browser from C# not working
我试图通过C#最小化Microsoft Edge浏览器。 除Microsoft Edge之外,所有其他浏览器(例如Chrome,Firefox,Internet Explorer)都可以正常工作。
有人可以帮我吗?
这是我的代码。
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
static void Main(string[] args)
{
var processes = Process.GetProcessesByName("MicrosoftEdge");
//var processes = Process.GetProcessesByName("chrome");
foreach (var process in processes)
ShowWindow(process.MainWindowHandle, 2);
}
您可以尝试取消注释正在运行的Chrome进程。
这应该可以解决问题(不言自明,为了防止万一,我提供了评论):
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace EdgeApp
{
class Program
{
[DllImport("user32.dll")]
private static extern bool EnumWindows(EnumWindowsProc enumProc, IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
private static extern int GetWindowTextLength(IntPtr hWnd);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);
[DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
public delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);
public const int SW_HIDE = 0;
public const int SW_SHOWNORMAL = 1;
public const int SW_SHOWMINIMIZED = 2;
public const int SW_SHOWMAXIMIZED = 3;
public static void Main(string[] args)
{
// Enumerate over windows.
EnumWindows((handle, param) =>
{
// Get the class name. We are looking for ApplicationFrameWindow.
var className = new StringBuilder(256);
GetClassName(handle, className, className.Capacity);
// Get the window text. We're looking for Microsoft Edge.
int windowTextSize = GetWindowTextLength(handle);
var windowText = new StringBuilder(windowTextSize + 1);
GetWindowText(handle, windowText, windowText.Capacity);
// Check if we have a match. If we do, minimize that window.
if (className.ToString().Contains("ApplicationFrameWindow") &&
windowText.ToString().Contains("Microsoft Edge"))
{
ShowWindow(handle, SW_SHOWMINIMIZED);
}
// Return true so that we continue enumerating,
// in case there are multiple instances.
return true;
}, IntPtr.Zero);
}
}
}
正如您可以轻松验证的那样,您正在查看的过程没有主窗口。 它的句柄是0
。 因此,您没有最小化任何东西。
UWP应用程序(或可能)与普通Win32应用程序有所不同。 尽管Edge内容进程具有窗口标题,但是您也无法使用该窗口句柄来最小化Edge。 窗口所属的实际进程是ApplicationFrameHost
。 如果其中有多个,则可能需要适当过滤主窗口标题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.