今天继续研究C#的WinForm的实例显示效果。

  我们上次介绍了Winform窗体的唯一实例运行代码(见博文:基于C#的应用程序单例唯一运行的完美解决方案 - 开源研究系列文章 )。这就有一个问题,程序已经打开了,这时候再次运行该应用程序,我们的方案是将该应用的主窗体显示出来。这个在单例运行方案中已经有介绍,当时用的是Windows API的ShowWindowAsync函数。但是,这里有一个问题,就是该窗体显示在Windows操作系统的任务栏里才有效,如果窗体是小图标窗体的话,窗体隐藏到小图标,这时候该函数就无法获取到主窗体的句柄,从而就无法打开该主窗体了。

  为了解决这个问题,笔者想到的是向已经启动的实例程序发送消息,根据消息进行处理显示该主窗体,下面是介绍。

  1、 项目目录;

  下面是项目目录,由基本的窗体及操作类组成。

  

  2、 代码介绍;

  使用下面的API函数向线程发送消息:

  

  3、 运行界面;

  因为是基本的操作,没录制GIF,所以这里不提供界面。

  4、 使用方法;

  参考该项目,直接将操作类复制到自己的项目中,然后修改操作函数即可。

  

  

  5、 源码下载;

  这里提供源码例子下载:

https://download.csdn.net/download/lzhdim/88171197

  上面介绍了C#程序的无窗体进程发送消息的方案。其实,我们将该程序修改一下,就能够将该代码复用成窗体的消息处理,即定义窗体的消息处理函数,从而其它程序通过向该应用程序发送相对应的消息,就能够控制该应用程序的处理了。笔者在2002年的时候对媒体播放器Winamp研究过,该应用就是定义了很多的应用程序消息列表,比如播放、暂停、快进、快退、下一首、停止等操作,都是能够进行控制的。这个就是Windows的基于消息处理的应用程序的例子。

C#程序的启动显示方案(无窗口进程发送消息) - 开源研究系列文章的更多相关文章

  1. C#开发的插件程序 - 开源研究系列文章

    上次编写了一个家庭小助手的小工具软件,也对其中的线程池及管理器进行了介绍(见博文:C#开发的线程池和管理器 - 开源研究系列文章),这次把里面的插件部分的功能单独放出来进行介绍,让更多的朋友能够进行学 ...

  2. C#应用程序配置文件(XML序列化) - 开源研究系列文章

    上次写了一个C#线程池及管理器的博文( C#开发的线程池和管理器 - 开源研究系列文章 ),收到了不小的浏览量,在此感谢各位网友的支持.这次将另一个功能放出来单独讲解:C#应用程序的配置文件,使用的是 ...

  3. C#开发的资源文件程序(可国际化) - 开源研究系列文章

    上次将小软件的线程池描述了,也将插件程序描述了,这次就将里面的资源文件相关的内容进行下记录,这里能够让程序做成国际化的形式(即多语言程序),主要就是通过这个资源文件的方式进行的处理.下面将对这个资源文 ...

  4. 【C#】给无窗口的进程发送消息

    注:本文适用.net2.0+的winform程序 一个winform程序,我希望它不能多开(但是如何防多开不是本文要讲的),那么在用户启动第二个实例的时候,作为第二个实例来说,大概可以有这么几种做法: ...

  5. 【C#】无损转换Image为Icon 【C#】组件发布:MessageTip,轻快型消息提示窗 【C#】给无窗口的进程发送消息 【手记】WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体 【手记】调用Process.EnterDebugMode引发异常:并非所有引用的特权或组都分配给呼叫方 【C#】DataRowState演变备忘

    [C#]无损转换Image为Icon 如题,市面上常见的方法是: var handle = bmp.GetHicon(); //得到图标句柄 return Icon.FromHandle(handle ...

  6. 显示/去掉CONSOLE窗口

    众所周知,控制台应用程序一般都会显示一个控制台窗口(虚拟DOS窗口),但很多时候控制台程序的执行逻辑根本不需要与用户进行交互,所以显示这个难看的窗口纯属多余,那么如何将它屏蔽掉呢?下面我向大家介绍一种 ...

  7. VC无窗口控制台程序

    VC无窗口控制台程序 #pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartu ...

  8. MFC程序的启动过程——先全局对象theApp(第一入口),后WinMain(真正入口),会引爆pApp->InitInstance从而创建窗口(程序员入口)

    原文出自:http://blog.csdn.net/yuvmen/article/details/5877271 了解MFC程序的启动过程,对于初学者来讲,了学习MFC很有帮助:对于不常用VC的人来说 ...

  9. 【VC编程技巧】窗口☞3.5对单文档或者多文档程序制作启动画面

    (一)概要: 文章描写叙述了如何通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面.在Microsoft Visual Studio 6.0中对于 ...

  10. delphi 程序全屏显示无标题栏,覆盖整个屏幕

    delphi 程序全屏显示无标题栏,覆盖整个屏幕,这个在做工控机或屏保时有用的,所以记下 procedure TMainFrm.FormCreate(Sender: TObject); begin w ...

随机推荐

  1. Django笔记三十八之发送邮件

    本文首发于公众号:Hunter后端 原文链接:Django笔记三十八之发送邮件 这一篇笔记介绍如何在 Django 中发送邮件. 在 Python 中,提供了 smtplib 的邮件模块,而 Djan ...

  2. distinct()去重

    distinct()去重 Student.objects.all().distinct()

  3. git解决一个电脑多用户情况(win7)

    首先:在输入ssh-keygen -t rsa -C "注册邮箱"后不要急着按enter,此时输入秘钥对的文件名,不要跟默认文件重名(默认的是id_rsa)

  4. 代码随想录算法训练营Day6 哈希表|242.有效的字母异位词 349.两个数组的交集 202.快乐数 1.两数之和

    哈希表理论基础 哈希表 哈希表(Hash tble)是根据关键码的值而进行直接访问的数据结构. 哈希表简单来说是数组,当我们遇到了要快速判断一个元素是否出现在集合里的时候,就要考虑哈希表. 哈希表中的 ...

  5. 【Haxe】(一)VSCode 搭建 Haxe 开发环境

    前言 咱换工作啦! 新工作这边需要用到的开发语言是 Haxe,最近大概会写几篇笔记.Haxe 的介绍就不写了,打算记录点有用的学习内容,先从搭建开发环境开始吧! 当前适用版本: VSCode:Curr ...

  6. AntV L7 快速入门示例

    1. 引言 L7 地理空间数据可视分析引擎是一种基于 WebGL 技术的地理空间数据可视化引擎,可以用于实现各种地理空间数据可视化应用.L7 引擎支持多种数据源和数据格式,包括 GeoJSON.CSV ...

  7. 三分钟快速了解什么是MES系统

    大家好,我是Edison. 近日我打算系统学习和整理一下MES/MOM系统相关的领域知识,从而构建我的业务域知识背景.万丈高楼平地起,我们先从快速了解什么是MES系统开始吧! 作为IT技术从业者,特别 ...

  8. 【技术积累】JavaSciprt中的函数【一】

    什么是函数?如何声明函数? JavaScript中的函数是一段可重复使用的代码块,它可以接受输入并返回输出. 在JavaScript中,函数是一种特殊的对象,因此可以将其存储在变量中,将其作为参数传递 ...

  9. .NET7 中Autofac依赖注入整合多层,项目中可直接用

    一.配置Autofac替换内置DI 1.安装Nuget包:Autofac.Extensions.DependencyInjection 2.Program.cs中加上 builder.Host.Use ...

  10. zabbix 监控nginx

    nginx内置了一个status状态的功能,通过配置可以看到nginx的运行情况,status显示的内容包括当前连接数,处于活动状态的连接数,已经处理的请求数等等,可以利用这个功能编写zabbix监控 ...