Application.Run在新的桌面中执行,但不运行窗体。
创始人
2024-09-11 02:30:25
0

要在新的桌面中执行Application.Run(),但不运行窗体,您可以使用以下代码示例:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建一个新的桌面
            IntPtr desktop = CreateDesktop("NewDesktop", IntPtr.Zero, IntPtr.Zero, 0, (int)DesktopAccessRights.DESKTOP_CREATEWINDOW, IntPtr.Zero);

            // 启动一个新的进程在新的桌面中运行
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.FileName = Application.ExecutablePath; // 当前应用程序的可执行文件路径
            startInfo.Arguments = "RunOnNewDesktop"; // 传递一个参数以便区分在新的桌面中运行的实例
            startInfo.UseShellExecute = true;
            startInfo.WorkingDirectory = Environment.CurrentDirectory;
            startInfo.WindowStyle = ProcessWindowStyle.Normal;

            Process.Start(startInfo);

            // 切换到新的桌面
            SwitchDesktop(desktop);

            // 在新的桌面中执行Application.Run()
            if (args.Length > 0 && args[0] == "RunOnNewDesktop")
            {
                Application.Run(); // 在新的桌面中运行窗体
            }

            // 切换回默认桌面
            SwitchDesktop(IntPtr.Zero);

            // 关闭新的桌面
            CloseDesktop(desktop);
        }

        // 声明方法来创建、切换和关闭桌面
        [DllImport("user32.dll")]
        public static extern IntPtr CreateDesktop(string lpszDesktop, IntPtr lpszDevice, IntPtr pDevmode, int dwFlags, int dwDesiredAccess, IntPtr lpsa);

        [DllImport("user32.dll")]
        public static extern bool SwitchDesktop(IntPtr hDesktop);

        [DllImport("user32.dll")]
        public static extern bool CloseDesktop(IntPtr hDesktop);

        // 枚举类型表示桌面的访问权限
        [Flags]
        public enum DesktopAccessRights : int
        {
            DESKTOP_CREATEWINDOW = 0x0002,
            DESKTOP_ENUMERATE = 0x0040,
            DESKTOP_WRITEOBJECTS = 0x0080,
            DESKTOP_SWITCHDESKTOP = 0x0100,
            GENERIC_ALL = (DESKTOP_CREATEWINDOW | DESKTOP_ENUMERATE | DESKTOP_WRITEOBJECTS | DESKTOP_SWITCHDESKTOP)
        }
    }
}

上述代码中,首先使用CreateDesktop()创建一个名为"NewDesktop"的新桌面。然后通过Process.Start()启动一个新的进程,在新的桌面中运行当前的应用程序实例。接下来,通过SwitchDesktop()切换到新的桌面。如果参数中传递了"RunOnNewDesktop",则使用Application.Run()在新的桌面中运行窗体。最后,使用SwitchDesktop()切换回默认桌面,并使用CloseDesktop()关闭新的桌面。

请注意,这段代码只能在Windows操作系统上运行,并且需要在项目中添加对System.Windows.FormsSystem.Diagnostics命名空间的引用。

相关内容

热门资讯

透视透明挂!德州局wepoke... >>您好:德州局wepoker辅助挂确实是有挂的,很多玩家在这款德州局wepoker辅助挂游戏中打牌...
透视线上!微信小程序雀神,we... 透视线上!微信小程序雀神,wepoker辅助器有哪些功能-最初有挂开挂辅助插件1、下载安装好微信小程...
透视计算!微信微乐小程序辅助软... 透视计算!微信微乐小程序辅助软件,德扑圈透视挂-一向有挂开挂辅助下载;无需打开直接搜索加(薇:136...
透明安装!兴动互娱工具名称,w... 兴动互娱工具名称开挂教程视频分享装挂详细步骤在当今的网络游戏中,兴动互娱工具名称作为一种经典的娱乐方...
透视计算!衡阳丫丫辅助,wep... 透视计算!衡阳丫丫辅助,wepoker免费透视脚本-起初有挂开挂辅助插件;亲,wepoker免费透视...
透明教程!四川途游辅助,wep... 透明教程!四川途游辅助,wepoker私人局透视教程-从来有挂开挂辅助神器;打开点击测试直接进入微信...
透视ai代打!欢乐达人猜猜乐友... 欢乐达人猜猜乐友挂吗开挂教程视频分享装挂详细步骤在当今的网络游戏中,欢乐达人猜猜乐友挂吗作为一种经典...
透视安卓版!钱塘十三水透视卦,... 您好:这款钱塘十三水透视卦游戏是可以开挂的,确实是有挂的,很多玩家在这款钱塘十三水透视卦游戏中打牌都...
透明工具!新天道辅助,impo... 透明工具!新天道辅助,impoker辅助-固有有挂开挂辅助挂您好:新天道辅助这款游戏可以开挂,确实是...
透视软件!牵手辅助器,hhpo... 牵手辅助器是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加我微信(1...