在unity中或者在C#程序中,通过Windows API来控制其他程序窗口或者当前窗口最小化与最大化时,该如何操作呢?
首先需要导入Windows API如:
[DllImport(“user32.dll”)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport(“user32.dll”, EntryPoint = “ShowWindow”, CharSet = CharSet.Auto)]
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool IsIconic(IntPtr hWnd);
等常用方法。
2.如果说要判断其他或者自己程序是否是最小化状态(不支持多开),则可以直接通过窗口名,找到窗口,判断是否是最 小化状态如:
public bool isminilized()
{
IntPtr temp = FindWindow(null,“test”);//test应用窗口名
return IsIconic(temp );
}
3.如果是判断自己程序的最小化状态,而且自己程序又是多开的,那该怎么办?
当然首先得获取当前程序的句柄:
public static IntPtr GetCurrentWindowHandle()
{
IntPtr ptrWnd = IntPtr.Zero;
uint uiPid = (uint)Process.GetCurrentProcess().Id; // 当前进程 ID
object objWnd = processWnd[uiPid];if (objWnd != null) { ptrWnd = (IntPtr)objWnd; if (ptrWnd != IntPtr.Zero && IsWindow(ptrWnd)) // 从缓存中获取句柄 { return ptrWnd; } else { ptrWnd = IntPtr.Zero; } } bool bResult = EnumWindows(new WNDENUMPROC(EnumWindowsProc), uiPid); // 枚举窗口返回 false 并且没有错误号时表明获取成功 if (!bResult && Marshal.GetLastWin32Error() == 0) { objWnd = processWnd[uiPid]; if (objWnd != null) { ptrWnd = (IntPtr)objWnd; } } return ptrWnd;
}
然后再用IsIconic方法判断。有的人可能会问, Process.GetCurrentProcess().MainWindowHandle;不是已经可以获取当前句柄吗?至于问什么不可以,我也不是很清楚,欢迎大神指点。详细代码请下载:https://download.csdn.net/download/qq_37699470/11021527