码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-06-20 13:57:57      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   http   tar   

bubuko.com,布布扣

    最近做了个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);
            }
        }

使用界面:

bubuko.com,布布扣

Code:

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

 

工具开发系列之:通过程序句柄操作程序,布布扣,bubuko.com

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

标签:style   class   blog   code   http   tar   

原文地址:http://www.cnblogs.com/xiguain/p/3795095.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!