VRDash/VDash/WindowSelectors/FromProcessName.cs

68 lines
1.7 KiB
C#

using System;
using System.Diagnostics;
using System.Linq;
using VDash.Utilities;
namespace VDash.WindowSelectors
{
public class FromProcessName : IWindowSelector
{
public string ProcessName { get; set; } = "";
public FromProcessName(string procName)
{
if (string.IsNullOrWhiteSpace(procName))
{
throw new ArgumentNullException("procName", "procName must not be null, whitespace, or empty.");
}
ProcessName = procName;
}
public FromProcessName()
{
}
Process[] processes = null;
public Process[] GetProcesses()
{
if(processes == null)
{
processes = Process.GetProcessesByName(ProcessName);
}
return processes;
}
public Process GetProcess()
{
var procs = GetProcesses();
if (procs.Count() <= 0)
{
throw new WindowNotFoundException($"No process found with name {ProcessName}.");
}
return procs.First();
}
public IntPtr GetWindowHandle()
{
return GetProcess().MainWindowHandle;
}
public WindowInfo GetWindowInfo()
{
var ret = WindowInfo.GetWindowList().SingleOrDefault(x => x.hWnd == GetWindowHandle());
if(ret == null)
{
throw new WindowNotFoundException($"Unable to locate window for process {ProcessName}.");
}
return ret;
}
public bool WindowExists()
{
return User32.IsWindow(GetWindowHandle());
}
}
}