工具开发系列之:通过程序句柄操作程序

最近做了个C/S系统,是一个包含ToolBox的程序,大致的功能是在系统使用过程当中包含了该系统提供公众工具,协同完成工作。说白了就是调用一些自己开发的或是第三方的应用程序。

于是在使用过程当中,有效的协调对应的进程及线程就是比较常见的问题了,这里说一个简单的例子如何去隐藏一个程序工具。

句柄

句柄,是整个Windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不用在I/O文件中,它是毫无用处的。 句柄是Windows用来标志应用程序中建立的或是使用的唯一整数,Windows使用了大量的句柄来标志很多对象。--摘自《百度百科》

获取句柄

获取句柄的方式有很多,这里以最简单的方式去实现,通过进程名称:

static IntPtr mainWindowHander;
        private void GetProcess(string handlerName)
        {
            Process[] allProcesses = Process.GetProcesses();
            foreach (Process p in allProcesses)
            {
                //进程名是在任务管理器里可以看到,这里不一样要修改一下。
                if (p.ProcessName == handlerName)
                {
                    mainWindowHander = p.MainWindowHandle;
                    break;
                }
            }
            if (mainWindowHander == IntPtr.Zero)
            {
                Process p = new Process();
                p.StartInfo.FileName = @"C:\Notpad\" + handlerName + ".exe"; //程序地址,改成你们自己的。
                p.Start();
                Thread.Sleep(3000);  //这里是笨方法,要等待3秒,以免进程还没有启动就获取句柄。
                mainWindowHander = p.MainWindowHandle;
            }
        }

控制对应程序的显示/隐藏:

        [DllImport("user32.dll")]
        private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);

        private const int SW_HIDE = 0; //常量,隐藏
        private const int SW_SHOWNORMAL = 1; //常量,显示,标准状态
        private const int SW_SHOWMINIMIZED = 2; //常量,显示,最小化
        private const int SW_SHOWMAXIMIZED = 3; //常量,显示,最大化
        private const int SW_SHOWNOACTIVATE = 4;//常量,显示,不激活
        private const int SW_RESTORE = 9; //常量,显示,回复原状
        private const int SW_SHOWDEFAULT = 10;//常量,显示,默认

        private void ToChange(IntPtr p, bool isboolean)
        {
            if (isboolean)
            {
                ShowWindowAsync(p, SW_SHOWNORMAL);
            }
            else
            {
                ShowWindowAsync(p, SW_HIDE);
            }
        }

使用界面:

Code:

private void btnHide_Click(object sender, EventArgs e)
        {
            exeName = txtHandlerName.Text;
            GetProcess(exeName);
            if (mainWindowHander != IntPtr.Zero) {
                ToChange(mainWindowHander,false);
            }
        }

工具开发系列之:通过程序句柄操作程序

时间: 2024-08-11 12:44:06

工具开发系列之:通过程序句柄操作程序的相关文章

SharePoint 2013 图文开发系列之应用程序页

原文:SharePoint 2013 图文开发系列之应用程序页 在SharePoint中,有两种页面类型,一种是保存在数据库中的页面,我们可以在网站的页面库中看到:还有一种叫做应用程序页,部署在服务器上,Layouts下面的页面,是应用程序页,主要是完成特定功能的页面. 特定功能的页面,听起来比较笼统,举个例子,比如说图片上传到特定文档库,文档批量迁移,权限管理等. 1.添加新建项目,选择SharePoint 2013 空项目,如下图: 2.选择场解决方案,如下图: 3.添加新项,选择应用程序页

使用Gradle构建工具开发Kotlin Web应用程序

1.安装Gradle 下载地址https://gradle.org/install.笔者使用的Gradle下载地址链接: http://pan.baidu.com/s/1gf9qyC7 密码: u3k6.注意Gradle要求jdk1.7或更高 下载后的zip包如下 将zip包解压,在F盘新建一个Gradle目录(新建目录的位置自定义)用来放置解压后的文件夹,然后将gradle-3.5文件夹复制到F:\Gradle下 配置Gradle环境变量,在系统环境变量path中追加F:\Gradle\gra

使用Maven构建工具开发Kotlin Web应用程序

1.安装Maven 下载地址http://maven.apache.org/download.cgi.Windows用户下载zip包.笔者使用的Maven下载链接: http://pan.baidu.com/s/1qYBFZcw 密码: gmer 下载后的zip包如下 将zip包解压.在F盘新建一个Maven目录(新建目录的位置自定义)用来放置解压后的文件夹,然后将apache-maven-3.2.3文件夹复制到F:\Maven下 配置Gradle环境变量,在系统环境变量中新建环境变量MAVEN

微信小程序购物商城系统开发系列

微信小程序购物商城系统开发系列 微信小程序开放公测以来,一夜之间在各种技术社区中就火起来啦.对于它 估计大家都不陌生了,对于它未来的价值就不再赘述,简单一句话:可以把小程序简单理解为一个新的操作系统.新的生态,未来大部分应用场景都将给予微信小程序进行研发.基于对它的敬畏以及便于大家快速上手,特整理微信小程序商城开发系列,未来将持续增加微信小程序技术文章,让大家可全面了解如何快速开发微信小程序商城. 本篇文章主要介绍微信小程序官方提供的开发工具,俗话说:欲工善其身,必先利其器. 小程序开发文档地址

微信小程序购物商城系统开发系列-工具篇

微信小程序开放公测以来,一夜之间在各种技术社区中就火起来啦.对于它 估计大家都不陌生了,对于它未来的价值就不再赘述,简单一句话:可以把小程序简单理解为一个新的操作系统.新的生态,未来大部分应用场景都将给予微信小程序进行研发.基于对它的敬畏以及便于大家快速上手,特整理微信小程序商城开发系列,未来将持续增加微信小程序技术文章,让大家可全面了解如何快速开发微信小程序商城. 本篇文章主要介绍微信小程序官方提供的开发工具,俗话说:欲工善其身,必先利其器. 小程序开发文档地址https://mp.weixi

【Windows10 IoT开发系列】API 移植工具

原文:[Windows10 IoT开发系列]API 移植工具 Windows 10 IoT Core 中是否提供你的当前 Win32 应用程序或库所依赖的 API? 如果不提供,是否存在可使用的等效 API? 此工具可以为你回答这些问题,并协助你将你的当前 Win32 应用程序和库迁移到 Windows IoT Core. Windows 10 IoT 核心版 API 移植工具可在 ms-iot/iot-utilities github 存储库中找到.下载存储库 zip 并将 IoTAPIPor

微信小程序购物商城系统开发系列-目录结构

上一篇我们简单介绍了一下微信小程序的IDE(微信小程序购物商城系统开发系列-工具篇),相信大家都已经蠢蠢欲试建立一个自己的小程序,去完成一个独立的商城网站. 先别着急我们一步步来,先尝试下写一个自己的小demo. 这一篇文章我们主要的是介绍一下小程序的一些目录结构,以及一些语法,为我们后面的微信小程序商城系统做铺垫. 首先我们来了解下小程序的目录结构 Pages 我们新建的一些页面将保存在这个文件夹下面,每一个小程序页面是由同路径下同名的四个不同后缀文件的组成,如:index.js.index.

[Ruby on Rails系列]3、初试Rails:使用Rails开发第一个Web程序

本系列前两部分已经介绍了如何配置Ruby on Rails开发环境,现在终于进入正题啦! Part1.开发前的准备 本次的主要任务是开发第一个Rails程序.需要特别指出的是,本次我选用了一个(PaaS开发平台),也就是Rails教程中介绍的Cloud 9平台,该平台已经自动为我们作好了环境配置的工作:只要你有一个浏览器就可以使用该云端开发环境.非常的方便快捷!简直赞!平台网址如下:https://c9.io/ Cloud 9开发平台的实质是为每一个注册的开发者在服务器端分配一个Linux虚拟机

[转]Struts1.x系列教程(1):用MyEclipse开发第一个Struts程序

转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/13/251101.html 本系列教程将详细介绍Struts 1.x的基本原理和使用方法,读者可以参阅<Struts 2系列教程>来比较Struts 1.x和Struts 2.x的相同点和不同点.    在这篇文章中将以一个简单的例子(mystruts)来演示如何使用MyEclipse来开发.运行Struts程序,并给出了解决ActionForm出现乱码问题的方法.读者可以从本文中了解