只开启一个程序,如果第二次打开则自动将第一个程序显示到桌面

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Reflection;

namespace AppLed
{
static class Program
{
//防止程序运行多个实例的方法有多种,如:通过使用互斥量和进程名等.而我想要实现的是:在程序运行多个实例时激活的是第一个实例,使其获得焦点,并在前端显示.

//主要用到两个API 函数:
//ShowWindowAsync 该函数设置由不同线程产生的窗口的显示状态。
//SetForegroundWindow 该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。系统给创建前台窗口的线程分配的权限稍高于其他线程。

///
/// 窗口句柄
/// 指定窗口如何显示。查看允许值列表,请查阅ShowWlndow函数的说明部分。
///
[DllImport(“User32.dll”)]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
///
/// 将被激活并被调入前台的窗口句柄。
///
[DllImport(“User32.dll”)]
private static extern bool SetForegroundWindow(IntPtr hWnd);
private const int WS_SHOWNORMAL = 1;

///
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Process instance = RunningInstance();
if (instance == null)
{
Application.Run(new FrmLed());
}
else
{
HandleRunningInstance(instance);
}
}
///
public static Process RunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(current.ProcessName);
foreach (Process process in processes)
{
if (process.Id != current.Id)
{
if (Assembly.GetExecutingAssembly().Location.Replace(“/”, “\”) == current.MainModule.FileName)
{
return process;
}
}
}
return null;
}

///
public static void HandleRunningInstance(Process instance)
{
//MessageBox.Show(“ID:”+instance.Id .ToString()+”–句柄”+instance.MainWindowHandle.ToString() + “–正常窗口” + WS_SHOWNORMAL + “–” + ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL) + “–” + SetForegroundWindow(instance.MainWindowHandle));
ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL); //显示,可以注释掉
SetForegroundWindow(instance.MainWindowHandle); //放到前端
}
}
}

2种方法

只有窗口最小化的时候可以达到此效果,如果隐藏到托盘则无法将打开的程序显示到桌面

Original: https://www.cnblogs.com/zeroone/p/9807114.html
Author: 武胜-阿伟
Title: 只开启一个程序,如果第二次打开则自动将第一个程序显示到桌面

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/554432/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • airflow sample to pass metadata to task. —–XCOM

    At first, let us take a look at one sample which one we do not need to pass the metadata h…

    技术杂谈 2023年5月31日
    085
  • IO复用三种方式

    IO复用技术,简单来说就是同时监听多个描述符。在没有用到IO复用以前,只能是一个线程或一个线程去监听,服务端同时有多个连接的时候,需要创建多个线程或者进程。而且,并不是所有的连接是…

    技术杂谈 2023年6月21日
    0104
  • JVM(一)-内存结构

    我们都知道,我们写的Java程序需要先经过编译,生成了.class文件(字节码文件)。然而,计算机并不能直接解释.class文件里面的内容,这时候就需要一个能加载、解释.class…

    技术杂谈 2023年7月11日
    069
  • 有意义的学习,都要先回答三个问题

    我们都知道, 在现代经济中, 我们不能停止学习。但如何保持自我教育是一个复杂的问题。 获得一个正式学位,比如 MBA 或博士学位, 是否值得? 你是否应该采取更有针对性的方法, 参…

    技术杂谈 2023年5月31日
    094
  • Python 中的鸭子类型和猴子补丁

    大家好,我是老王。 Python 开发者可能都听说过 鸭子类型和 猴子补丁这两个词,即使没听过,也大概率写过相关的代码,只不过并不了解其背后的技术要点是这两个词而已。 我最近在面试…

    技术杂谈 2023年6月21日
    086
  • java多线程基础学习

    一、多线程概述 1.1、进程和线程的概念 1.1.1、进程 1.1.2、线程 1.2、线程创建的方法 1.2.1、继承Thread类 1.2.2、重写Runnable接口 1.2….

    技术杂谈 2023年6月21日
    091
  • Concurrent包详解及使用场景

    1.阻塞式队列 – BlockingQueue 遵循先进先出(FIFO)的原则。阻塞式队列本身使用的时候是需要指定界限的。 在生产者消费者模型中,生产数据和消费数据的速…

    技术杂谈 2023年5月30日
    091
  • 不止面试-JVM垃圾回收面试题详解

    第一部分:面试题 本次分享我们将尝试回答以下问题: GC 是什么? 为什么要有 GC? 简单说一下java的垃圾回收机制。 JVM的常见垃圾回收算法有哪些? 为什么要使用分代回收机…

    技术杂谈 2023年7月11日
    086
  • 3D Math Keynote 3

    【 3D Math Keynote 3】 1、球的表面积 Surface、球的体积 Volumn: 2、当物体旋转后,如果通过变换后的旧AABB来顶点来计算新的AABB顶点,则生成…

    技术杂谈 2023年5月31日
    095
  • 低配版五子棋

    五子棋是一个比较简单的经典小游戏,使用QT制作五子棋的需要用到绘图事件处理函数 paintEvent(QPaintEvent *event)和鼠标事件处理函数 mousePress…

    技术杂谈 2023年7月25日
    084
  • 使用VisualVM 进行性能分析及调优

    概述 开发大型 Java 应用程序的过程中难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下…

    技术杂谈 2023年5月31日
    0100
  • QSC的算法讲座第三季开始啦

    【背景】我已经毕业两年了,正所谓金三银四,现在正是刷题跳槽的好时节。上周同组的兄弟也讲了一下做自媒体的好处,所以我也开始重新举办算法讲堂了。 【时间】2020年12月7日~2020…

    技术杂谈 2023年6月1日
    082
  • Prometheus监控oracle的配置

    告警https://sysdig.com/blog/monitor-oracle-database-prometheus/ Prometheus监控oracle的配置1、下载ora…

    技术杂谈 2023年5月31日
    064
  • 阅读别人的代码,是一种怎样的体验

    原创:微信公众号 【阿Q说代码】,欢迎分享,转载请保留出处。 之前写过一篇名为《看了同事写的代码,我竟然开始默默的模仿了。。。》的文章,今天偶然间看了下后台数据,大吃一惊。该文章的…

    技术杂谈 2023年7月11日
    068
  • poi导出excel工具类+注解

    导出excel作为很多页面的常用功能,但是不同页面导出的数据内容和字段不一,不方便操作,本文通过注解和工具类来解决excel通用导出问题 1.注解 通过注解来定义excel字段的名…

    技术杂谈 2023年7月25日
    063
  • 互联网校招指北

    这篇文章写着写着,突然觉得《紧急救援》中有一句台词很对: “不是幸运给你机会,而是因为够坚持,才有了幸运的机会” 共勉~ 时间跨度 一年共两次校招季,2 月…

    技术杂谈 2023年7月25日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球