|
参考:https://www.jb51.net/article/36226.htm
https://www.freesion.com/article/5390733102/
Newtonsoft.Json.dll 下载地址
链接:https://pan.baidu.com/s/1XLXtUH0ks5jPsgoex_8VnA
提取码:b665
复制这段内容后打开百度网盘手机App,操作更方便哦
using System;using System.Collections;using System.Collections.Generic;using System.Runtime.InteropServices;using UnityEngine;using UnityEngine.UI;using Newtonsoft.Json.Linq;using System.Diagnostics;public class ScreenController : MonoBehaviour{ private static Hashtable processWnd = null; public delegate bool WNDENUMPROC(IntPtr hwnd, uint lParam); [DllImport("user32.dll", EntryPoint = "EnumWindows", SetLastError = true)] public static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, uint lParam); [DllImport("user32.dll", EntryPoint = "GetParent", SetLastError = true)] public static extern IntPtr GetParent(IntPtr hWnd); [DllImport("user32.dll", EntryPoint = "GetWindowThreadProcessId")] public static extern uint GetWindowThreadProcessId(IntPtr hWnd, ref uint lpdwProcessId); [DllImport("user32.dll", EntryPoint = "IsWindow")] public static extern bool IsWindow(IntPtr hWnd); [DllImport("kernel32.dll", EntryPoint = "SetLastError")] public static extern void SetLastError(uint dwErrCode); [DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr hwnd, int nCmdShow); [DllImport("user32.dll")] static extern IntPtr GetForegroundWindow(); const int SW_SHOWMINIMIZED = 2; //{最小化, **} const int SW_SHOWMAXIMIZED = 3;//最大化 const int SW_SHOWRESTORE = 1;//还原 public void OnClickMinimize() { //最小化 ShowWindow(thisPtr, SW_SHOWMINIMIZED); } public void OnClickMaximize() { //最大化 ShowWindow(thisPtr, SW_SHOWMAXIMIZED); } public void OnClickRestore() { //还原 ShowWindow(thisPtr, SW_SHOWRESTORE); } IntPtr thisPtr; private void Start() { if (processWnd == null) { processWnd = new Hashtable(); } thisPtr = GetCurrentWindowHandle(); MQDataManager.instance.OnUpdateData += ActionMsg; //thisPtr = GetForegroundWindow(); } string newOrder; void ActionMsg(string _msg) { if (_msg.Contains("type")) { var jsonObject = JObject.Parse(_msg); newOrder = jsonObject["params"]["type"].ToString(); //123 SwitchStatus(); } } void SwitchStatus() { switch (newOrder) { case "small": //最小化 OnClickMinimize(); break; case "big": //最大化 OnClickMaximize(); break; case "restore": //还原 OnClickRestore(); break; } } 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; } private static bool EnumWindowsProc(IntPtr hwnd, uint lParam) { uint uiPid = 0; if (GetParent(hwnd) == IntPtr.Zero) { GetWindowThreadProcessId(hwnd, ref uiPid); if (uiPid == lParam) // 找到进程对应的主窗口句柄 { processWnd[uiPid] = hwnd; // 把句柄缓存起来 SetLastError(0); // 设置无错误 return false; // 返回 false 以终止枚举窗口 } } return true; }} |
|