该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

VC开发实例

一、开发背景:

我想大家都有过忙手忙脚最小化窗口(或关闭窗口)的经历吧!原因很简单--不想让突如其来的老板、老妈、老婆看到我们电脑屏幕上正在显示的游戏、日记、MM:-) 等属于个人隐私的东东。

如果能做一个程序在后台运行,当我们发出一个特殊的输入事件(我选择了鼠标左、右键同时按下)时,该程序就迅速隐藏正在显示的窗口,免去人工瞄准并按下每个窗口右上方的那个小得可怜的的最小化按扭之苦了。当危险解除再利用这个特殊事件使隐藏的窗口恢复。

这对于像我这样小脑不太发达、心理素质又不过硬而又经常在老板的眼皮底下"悬崖骑马"的同志们来说是绝对有实战意义的。于是我做了这个"魔高一丈"以实现上述功能!

二、程序原理:

首先,我们得能截获鼠标左、右键同时按下去这个事件--这并不难--设一个标志变量当鼠标发出WM_LBUTTONDOWN并且又有WM_RBUTTONDOWN消息发出时把它置"1"罢了。

而我要说明的是,这个"同时按下"只是一种宏观上的概念,鼠标是不会同时发出两个消息的。其次就是解决不管鼠标位于任何窗口之上都能在程序里截获(或者称为监听更准确)到鼠标发出的消息并加以过滤的问题了,这是很关键的。我用了钩子船长的那只钩子(Hook),而且是全局的鼠标钩子,它给了我们跟操作系统沟通的一个机会。

许多比较有神秘感的程序(比如金山词霸的鼠标取词)都是用它实现的,稍后我将详细解释。最后就是剩下能得到可见的窗口的句柄(HANDLE)并根据其句柄显示、隐藏窗口的问题了,这也没什么难的有现成的API函数--EnumWindows和ShowWindow。你可以先运行一下我的程序(那个大五星,需要把它跟那个Mousehook.dll文件放在一个文件夹下)。当鼠标左右键一起按下时所有的窗口都隐藏了;再一次同时按下左右键又可恢复隐藏窗口;单击任务栏右下角(托盘)的图标可隐藏或显示本程序窗口。

三、开发步骤:

第0步、选用VC 6.0集成开发环境。

第1步、由于建立全局钩子必须把钩子函数放在DLL里面,所以我们选择MFC AppWizard(DLL)创建一个新的项目,命名为"Mousehook",再选择选择MFC Extension DLL类型(为了方便嘛!)。

为什么必须把全局钩子函数放在DLL里呢?这是因为系统会动态地调用你所添加的全局鼠标钩子,所有窗口消息数都会由于你添加了鼠标钩子而引起系统处理(何为处理?调用钩子函数也。)这必然需要操作系统能够从一个东东里动态地加入这段处理程序,而这个东东非DLL莫属。

第2步、在项目中加入Mousehook.h文件用以构造一个钩子类--CMousehook,具体如下:

class AFX_EXT_CLASS CMousehook:public CObject

{

public:

CMousehook();

~CMousehook();

BOOL starthook();//封装SetWindowsHookEx( int idHook, HOOK_PROC lpfn, HINSTANCE hMod,DWORD dwThreadID)用来安装钩子

BOOL stophook(); //封装UnhookWindowsHookEx( HHOOK hhk )用来卸载钩子

VOID SetCheck1(UINT i);//处理对话框的选择钩选框1

VOID SetCheck2(UINT i);//处理对话框的选择钩选框2

VOID SetCheck3(UINT i);//处理对话框的选择钩选框3

static BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam);//系统回调的钩子函数

VOID UseForExit();//退出程序时恢复所有隐藏窗口

};

这里我想特别地提一下EnumWindowsProc函数前的CALLBACK跟static,对于CALLBACK我想给大家一个特别江湖的解释其就是:凡是由你设计而却由Windows系统调用的函数,统称callback函数。这些函数都有一定的类型,以配合Windows的调用操作。--引用台湾侯师傅的话。他还说,某些Windows API函数会要求以callback函数(的函数地址)作为其参数之一。

我们这里用到的又比如 SetWindowsHookEx( int idHook, HOOK_PROC lpfn, HINSTANCE hMod,DWORD dwThreadID)的第二个参数。这种API通常会在进行某种行为之后或满足某种状态的情况下调用其参数中的callback函数。

vc 写一个计算机功能,VC++的一个实例相关推荐

  1. 组建一个计算机网络系统有,组建一个计算机网络一般需要哪些部件

    满意答案 guiynzu7796 2017.09.25 采纳率:44%    等级:12 已帮助:5257人 1.组建网络 需要双绞线,水晶头,路由器,交换机等网络互连设备. 2. 计算机网络,是指将 ...

  2. 一个计算机男编程获得一个女友电影,给大家介绍一部机器女友不惜扯断自己身体去救男朋友的电影...

    原标题:给大家介绍一部机器女友不惜扯断自己身体去救男朋友的电影 今天给大家介绍一部一个机器女友不惜扯断自己身体去救自己男朋友的电影,电影的故事特别精彩推荐给大家看一下. 这部电影的女主角是绫濑遥主演的 ...

  3. VC写一个荣光医院修补弹坑游戏助手

    荣光医院和种草及动物园游戏,近来玩者甚众,小生也不能免俗,忙中抽闲,小玩了一把.可惜技艺不精,级数较低,刚到中央区,人就被拉的惨不忍睹,有些还能回拉,遇到有些高级玩家,一回拉,竟然赏我了两个弹坑,实在 ...

  4. c语言用字符画一个椭圆,用vc++6.0 程式设计画一个椭圆出来,求完整原始码

    用vc++6.0 程式设计画一个椭圆出来,求完整原始码以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 用vc++6.0 ...

  5. 需求分析 应该先写业务还是功能_一个套路,拆解常见数据分析需求

    现实与Kaggle的区别 现实环境的数据分析工作和Kaggle题目之间,最大的区别在于kaggle上的问题往往非常清晰.预测类问题,你只需要把预测做的足够准确就能拿高分. 但在实际的业务环境中,你做了 ...

  6. 关于VC++6.0中getline函数的一个bug

    关于VC++6.0中getline函数的一个bug 最近在调试程序时,发现getline函数在VC++6.0和其他编译器上运行结果不一样,比如有如下这段程序: #include <iostrea ...

  7. 编写一个C程序,实现以下功能:用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:int strcmp(char *p1,char *p2);设p1指向字符串s

    题目描述: 编写一个C程序,实现以下功能: 用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为: int strcmp(char *p1,char *p2); 设p1指向字符串s ...

  8. c语言求出伍位数,简介 模拟银行的钱数大写输出例如345叁肆伍方法/步骤 首先打开VC++ 文件》》》新建 创建一个C++空白文档 先声明头文件复制代码 代码...

    简介 模拟银行的钱数大写输出例如 345 叁肆伍 方法/步骤 首先打开VC++ 文件>>>新建 创建一个C++空白文档 先声明头文件 #include 声明变量 char *p[10 ...

  9. java编程实现迷你计算机功能,用JAVA编写一个迷你编辑器(续)

    (接上文) 三 菜单功能的实现 每一个菜单功能都需要为之建立一个监听器类,并重载活动监听方法addActionListener(). ㈠ 编辑菜单--复制.删除和粘贴 1 复制 "编辑/复制 ...

  10. vue中手写一个放大镜功能

    vue中手写一个放大镜功能 有的时候需要对图片进行放大,类似于电商的商品放大功能,于是在这个想法上写了一个放大镜的功能,并且在放大镜的基础上新添加了一些小功能,下面开始吧! 放大镜是封装的组件的形式, ...

最新文章

  1. 为什么要用promise处理ajax,用promise.all解决ajax异步循环请求问题
  2. iis 7 php_Windows server 2008 下基于IIS7配置php7.2运行环境
  3. MySQL限制CPU资源使用_压缩大文件时如何限制CPU使用率?----几种CPU资源限制方法的测试说明...
  4. 第十一周总结--助教
  5. 斜杠的意思是或还是和_央视网评丨“斜杠老师”,可别顾了赚钱丢了主业
  6. zookeeper入门学习之java api会话建立《四》
  7. Top 10 Security Issue Solution
  8. 如何在visio中插入矩阵公式
  9. 【CSDN软件工程师能力认证学习精选】Python网络编程之初识
  10. 计算机网络之了解计算机网络
  11. IDEA SpringBoot引入外部jar并打包
  12. 如何部署在线团队协作系统kooteam(在线团队协作工具)
  13. 【优化求解】基于未来搜索算法FSA求解最优目标matlab代码
  14. mysql报错error2002_mysql中异常出错ERROR:2002的处理办法分享
  15. 乘风破浪程序猿,拒绝原地踏步!
  16. 超实用的8款Chrome插件
  17. wia twain for java,c – 使用WIA或TWAIN扫描页面
  18. 守着大房 心却越来越空
  19. c语言之文件操作,C语言之——文件操作模式
  20. 基于zxing生成二维码

热门文章

  1. html如何制作正方体手工图,数学手工立体图形
  2. 2021美团校招(一)
  3. 相对湿度与绝对湿度_如何监视家里的湿度水平
  4. TrueCrypt介绍及入门使用讲解【翻译】
  5. flyme android 7 root,魅族PRO7怎么Root?魅族PRO7一键ROOT权限获取图文教程(系统自带Root功能)...
  6. lzg_ad: FBWF技术概述
  7. 几部科幻小说的评价和感想
  8. HDU 4816 Bathysphere(数学)(2013 Asia Regional Changchun)
  9. 2011年度全球移民国家移民条件浅析
  10. SVN commit时,提示“remains in conflict”错误: