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命名空间的引用。

相关内容

热门资讯

热门推荐!微信小程序多功能辅助... 热门推荐!微信小程序多功能辅助,盛世辅助器,详细app(有挂神器)1、实时微信小程序多功能辅助透视辅...
最新技巧!黑科技微乐小程序辅助... 最新技巧!黑科技微乐小程序辅助器免费,随意玩工具箱辅助器,详细教程(真是有挂)1、点击下载安装,黑科...
盘点十款!乐乐围棋入门辅助,小... 盘点十款!乐乐围棋入门辅助,小程序游戏赴沪期,详细app(有挂教学)1、首先打开小程序游戏赴沪期辅助...
实操分享!新超凡手游辅助,雀友... 实操分享!新超凡手游辅助,雀友会广东潮汕麻雀万能辅助器,详细挂(有挂教程)1、全新机制【雀友会广东潮...
一起来探讨!纳祥游戏脚本,微信... 一起来探讨!纳祥游戏脚本,微信小程序辅助工具,详细攻略(有挂解惑)1、这是跨平台的微信小程序辅助工具...
一分钟揭秘!新八戒辅助,挂是真... 一分钟揭秘!新八戒辅助,挂是真的假的,详细器(确实有挂)1、全新机制【挂是真的假的ai辅助工具激活码...
最新通报!微信小程序微乐房间怎... 最新通报!微信小程序微乐房间怎么开挂,打哈儿床将辅助最新,详细软件(有挂技巧)1、全新机制【微信小程...
玩家实测!欢乐达人暗堡破解,赣... 您好,欢乐达人暗堡破解这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多玩...
一分钟揭秘!情怀手机麻将辅助器... 一分钟揭秘!情怀手机麻将辅助器,功夫川麻辅助,详细工具(详细教程)1、金币登录送、破产送、升级送、活...
今日科普!微信广东雀神挂件辅助... 今日科普!微信广东雀神挂件辅助,对战互娱辅助系统,详细神器(有挂规律);1、下载好微信广东雀神挂件辅...