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

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

时间:2023-08-07 13:23:21浏览次数:34  
标签:C# 程序 应用程序 发送 开源 窗体 消息

  今天继续研究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#,程序,应用程序,发送,开源,窗体,消息
From: https://www.cnblogs.com/lzhdim/p/17607832.html

相关文章

  • 博客园设置Silence主题
    博客园设置Silence主题博客园的提供了一百多个默认主题,但我还是找不到一个干净、简洁、美观的。了解到博客园可以自定义主题,于是在网上搜寻相关内容,终于被我发现了Silence——一个专注于阅读的博客园主题。Silence介绍Silence是一个专注于阅读的博客园主题界面简洁优雅,响应式......
  • Apache Spark
    .NETforApacheSpark™|大数据分析(microsoft.com) dotnet/spark:.NETforApache®Spark™makesApacheSpark™easilyaccessibleto.NETdevelopers.(github.com) 使用.NET5体验大数据和机器学习(qq.com)......
  • Scrapy: scrapy_redis
    1#安装2pip3installscrapy_redis3#源码4https://github.com/rmax/scrapy-redis.git5#文档6https://github.com/rmax/scrapy-redis78#配置说明:https://github.com/rmax/scrapy-redis/wiki/Usage9REDIS_HOST='localhost'10REDIS_PORT=6......
  • [Microsoft Azure] Microsoft Azure VM IP地址更换的方法和步骤详解
    在本文中,我们将详细介绍如何更改MicrosoftAzureVM的IP地址。对于使用AzureVM的用户来说,有时可能需要更改IP地址,以满足特定的网络需求或解决IP地址冲突问题。以下是更改AzureVMIP地址的方法和步骤详解。概述:登录到Azure门户打开虚拟机详细信息页面创建新......
  • SpringBoot Netty socket使用
    SpringBootNettysocket使用Netty是由JBOSS提供的一个java开源框架,现为Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。这里springBoot整合起来使用测试,性能怎么的不怎么了解,至少能用maven引用依......
  • STL迭代器适配器reverse_iterator剖析 #C++
    迭代器适配器(iteratoradapters)迭代器适配器是迭代器应用于迭代器的产物,包括insertiterator,reverseiterator和iostreamiterator。迭代器适配器本质是对容器或一般迭代器进行封装,以使其更加符合需求。reverse_iterator概述reverse_iterator可以将一般迭代器的行进方向进......
  • AMD cpus在VM虚拟机安装macOS10.15和12教程一
    本教程采用软件为vmwareworkstation17pro,操作系统win10,CPU为5600G,macOS10.15或者macOS12VM虚拟机的下载和安装这里不阐述,大家可以百度一下macos13在上述环境下安装后会提示错误,macOS14beta暂时不支持安装,所以13-14可以暂时放弃macOS的下载请百度一下就有了~记得下载带引导......
  • golang之浮点数处理库decimal
    decimal库包是用来解决float类型对象之间运算不准确的问题的。所以,如果你想使用decimal库包,你必须先把float类型对象通过decimal.NewFromFloat()函数转成decimal.Decimal类型,然后再计算,最后还得再转成你所需要的类型。范例:packagemainimport"log"funcmain(){a:=......
  • static
    staticstatic(静态)static的作用可以用来修饰成员变量,也可以修饰成员方法被类生成的所有对象共享调用方式:类名.变量名,类名.方法名随着类加载而生成,优先于对象生成static不依托任何对象生成,跟随类加载而加载内存区域static变量初始化案例static类static关......
  • C#抽象静态方法
    抽象静态方法在C#11中,引入了对抽象静态接口成员的支持。这个特性可以让你在接口中定义静态抽象方法、属性、或事件。具体来说,一个接口可以定义一个或多个抽象静态成员,这些成员没有具体的实现。任何实现该接口的类或结构必须提供这些成员的静态实现。这就像实现普通接口成员一样......