C#/WPF 只允许一个实例程序运行并将已运行程序置顶

使用用互斥量(System.Threading.Mutex):
    同步基元,它只向一个线程授予对共享资源的独占访问权。在程序启动时候,请求一个互斥体,如果能获取对指定互斥的访问权,就职运行一个实例。

实例代码:

    /// <summary>/// App.xaml 的交互逻辑/// </summary>public partial class App : Application{[DllImport("user32.dll ")]//设置窗体置顶private static extern bool SetForegroundWindow(IntPtr hWnd);[DllImport("User32.dll")]public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);private static Mutex _m = null;private static string currentProcess = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;/// <summary>/// 只允许运行一个实例/// </summary>/// <param name="mutexName"></param>/// <returns>true:已经存在实例 false:不存在实例</returns>public static bool CheckRunOneInstance(string mutexName = null){bool result = false;bool mutexWasCreated = false;try{bool requestInitialOwnership = true;if (mutexName == null)mutexName = currentProcess;_m = new Mutex(requestInitialOwnership, mutexName, out mutexWasCreated);if (!mutexWasCreated){result = true;}}catch (Exception ex){MessageBox.Show(ex.Message);}return result;}/// <summary>/// 有程序运行,设置焦点/// </summary>private void Focus(){foreach (Process process in Process.GetProcesses()){try{if (process.ProcessName.ToLower() != currentProcess.ToLower())continue;IntPtr hwnd = process.MainWindowHandle;if (hwnd != IntPtr.Zero){SetForegroundWindow(hwnd);ShowWindow(hwnd, 2);}}catch (Exception ex){MessageBox.Show(ex.Message);}}}private void Application_Startup(object sender, StartupEventArgs e){if(CheckRunOneInstance()){Focus();System.Windows.Application.Current.Shutdown();return;}else{new MainWindow().Show();}}}

实例链接:

https://download.csdn.net/download/lvxingzhe3/88668552

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python/pytorch读取数据集

MNIST数据集 MNIST数据集包含了6万张手写数字&#xff08;[1,28,28]尺寸&#xff09;&#xff0c;以特殊格式存储。本文首先将MNIST数据集另存为png格式&#xff0c;然后再读取png格式图片&#xff0c;开展后续训练 另存为png格式 import torch from torch.utils.data impor…

gRPC-Go基础(2)protobuf基础

文章目录 0. 简介1. Message2. Message中的字段3. 枚举类型4. Map类型5. Oneof类型6. Any类型7. Struct类型 0. 简介 前面讲过protobuf工具protoc的使用&#xff0c;本章我们将简单介绍一下protobuf的语法和相关细节。 1. Message protobuf实际上是一套类似于Json或者XML的数…

《微信小程序开发从入门到实战》学习六十四

6.4 交互API 6.4.3 操作菜单API 使用wx.showActionSheet接口可以显示操作菜单&#xff0c;该接口接受Object参&#xff0c;该参属性如下&#xff1a; itemList&#xff1a;string[],数组的每一项代表一个菜单选项&#xff0c;最多支持6个选项 itemColor&#xff1a;按钮的文…

开源项目推荐:Frooodle/Stirling-PDF

简介一个本地的处理 PDF 的工具&#xff0c;界面是 Web UI&#xff0c;可以支持 Docker 部署。各种主要的 PDF 操作都可以支持。比如拆分、合并、转换格式、重新排列、添加图片、旋转、压缩等等。这个本地托管的网络应用最初完全由 ChatGPT 制作&#xff0c;后来逐渐发展&#…

2023 年中国金融级分布式数据库市场报告:TiDB 位列领导者梯队,创新能力与增长指数表现突出

近日&#xff0c;沙利文联合头豹研究院发布了中国数据库系列报告之《2023 年中国金融级分布式数据库市场报告》。 报告认为&#xff0c;金融行业对于分布式数据库信任度与认可度正在逐步提高&#xff0c;中国金融级分布式数据库市场正处于成熟落地的高增长阶段&#xff0c;行业…

Flink项目实战篇 基于Flink的城市交通监控平台(上)

系列文章目录 Flink项目实战篇 基于Flink的城市交通监控平台&#xff08;上&#xff09; Flink项目实战篇 基于Flink的城市交通监控平台&#xff08;下&#xff09; 文章目录 系列文章目录1. 项目整体介绍1.1 项目架构1.2 项目数据流1.3 项目主要模块 2. 项目数据字典2.1 卡口…

Python+OpenCV 零基础学习笔记(1):anaconda+vscode+jupyter环境配置

文章目录 前言相关链接环境配置&#xff1a;AnacondaPython配置OpenCVOpencv-contrib:Opencv扩展 Notebook:python代码笔记vscode配置配置AnacondaJupyter文件导出 前言 作为一个C# 上位机&#xff0c;我认为上位机的终点就是机器视觉运动控制。最近学了会Halcon发现机器视觉还…

云计算:OpenStack 配置二层物理网卡为三层桥的接口

目录 一、理论 1.OpenStack 二、实验 1. Linux系统修改网卡 2.OpenStack 配置二层物理网卡为三层桥的接口 一、理论 1.OpenStack &#xff08;1&#xff09;概念 OpenStack是一个开源的云计算管理平台项目&#xff0c;是一系列软件开源项目的组合。由NASA(美国国家航空…

IntelliJ IDEA Apache Dubbo,IDEA 官方插件正式发布!

作者&#xff1a;刘军 最受欢迎的 Java 集成开发环境 IntelliJ IDEA 与开源微服务框架 Apache Dubbo 社区强强合作&#xff0c;给广大微服务开发者带来了福音。与 IntelliJ IDEA 2023.2 版本一起&#xff0c;Jetbrains 官方发布了一款全新插件 - Apache Dubbo in Spring Frame…

Qt sender()函数

sender函数原型&#xff1a; QObject *sender() const; 如果在由信号激活的插槽中调用该函数&#xff0c;返回指向发送信号的对象的指针&#xff0c;否则返回0&#xff0c;该指针仅在从该对象的线程上下文调用此函数的槽执行期间有效。 主要代码如下&#xff1a; 其中运用了Q…

创建springboot项目

SpringBoot 就相当于不需要配置文件的SpringSpringMVC。 常用的框架和第三方库都已经配置好了。 maven安装配置 管理项目依赖库的 maven的安装教程网上有很多&#xff0c;这里简单记录一下。 官网下载maven后并解压。 在其目录下添加一个目录repository 然后在conf目录下…

学习笔记 k8s常用kubectl命令

k8s常用kubectl命令 pod 相关强制删除pod查看 Pod 中指定容器的日志pod 扩容 etcd 备份集群设置集群上下文配置文件切换集群 节点cordondrain pod 相关 强制删除pod pod 状态terminal了&#xff0c;需要强制删除 kubectl delete pod <pod_name> --grace-period0 --force…

uniapp原生插件 - android原生插件打包流程 ( 避坑指南一)

当时开发中安卓插件打包成功后&#xff0c;uniapp引用插件aar&#xff0c;用云打包 &#xff0c;总是提示不包含插件。原因是因为module的androidManifest.xml文件没有注册activity。 这一步 很重要&#xff0c;一定要注册。 ------------------------------------------------…

Appium+python自动化(二)- 环境搭建—下(超详解)

简介 宏哥的人品还算说得过去&#xff0c;虽然很久没有搭建环境了&#xff0c;但是换了新电脑设备&#xff0c;一气呵成&#xff0c;将android的测试开发环境已经搭建准备完毕。上一篇android测试开发环境已经准备好&#xff0c; 那么接下来就是appium的环境安装和搭建了。 嘿…

Django信号机制源码分析(观察者模式)

Django信号的实现原理本质是设计模式中的观察者模式&#xff0c;浅谈Python设计模式 -- 观察者模式&#xff0c;也可以叫做发布-订阅模式&#xff0c;信号对象维护一个订阅者列表&#xff0c;当信号被触发时&#xff0c;它会遍历订阅者&#xff0c;依次通知它们。 先来回顾一下…

Github 2023-12-28开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2023-12-28统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目3TypeScript项目3非开发语言项目2Java项目1HTML项目1Svelte项目1 系统设计课程 创建周期&#xf…

kubelet源码学习(二):kubelet创建Pod流程

本文基于Kubernetes v1.22.4版本进行源码学习 4、kubelet创建Pod流程 syncLoop()的主要逻辑是在syncLoopIteration()方法中实现&#xff0c;Pod创建相关代码只需要看处理configCh部分的代码 // pkg/kubelet/kubelet.go // 该方法会监听多个channel,当发现任何一个channel有数…

ArkTS基本概念装饰器

目录 ArkTS基本概念 装饰器汇总 ArkTS基本概念 ArkTS是HarmonyOS的主力应用开发语言。 它在TypeScript&#xff08;简称TS&#xff09;的基础上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等相应的能力&#xff0c;让开发者以更简洁、更自然的方式开发跨…

17. 电话号码的字母组合中

给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits "23" 输出&#…

Python字符串指定第几个字符前后截取

概述 我会以从前和从后遇到相应值进行截取为示例来进行讲解&#xff0c;授人以鱼不如授人以渔&#xff01; 示例 截取最后一个/后的数据 如果你有一个路径字符串&#xff0c;并且想要截取路径中最后一个斜杠 (/) 后的数据&#xff0c;你可以使用 Python 的字符串操作来实现…