找回密码
 立即注册
查看: 361|回复: 0

接收指令控制unity程序最大化最小化

[复制链接]
发表于 2022-1-19 17:25 | 显示全部楼层 |阅读模式
参考: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;    }}
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 17:27 , Processed in 0.092467 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表