VC++编程隐藏计算机中的鼠标

在Windows大行其道的今天,windows界面程序受到广大用户的欢迎。对这些程序的操作不外乎两种,键盘输入控制和鼠标输入控制。那么我们能否通过编制程序来控制系统的鼠标,例如隐藏计算机中的鼠标呢?这个问题的答案是肯定的。这里主要是通过一个Windows API函数来实现的。下面以一个Visual C++的实例来介绍如何实现这个功能。需要读者朋友们注意的是本代码具有一定的危险性,程序运行后你将无法用鼠标控制您的计算机,这时候需要对计算机的当前用户名进行注销或重新启动计算机。

一、实现方法

Windows提供了一个API函数mouse_event,可以模拟一次鼠标事件,比如左键单击、双击和右键单击等。在程序中使用此函数将产生一个十分有趣的效果,所模拟的鼠标事件将屏蔽真正的鼠标事件,我们的实例也就是利用该函数的这一特性来实现隐藏程序中的鼠标。Mouse_event函数原型如下:

VOID mouse_event(
   DWord dwFlags, // flags specifying various motion/click variants
   DWORD dx, // horizontal mouse position or position change
   DWORD dy, // vertical mouse position or position change
   DWORD dwData, // amount of wheel movement
   DWORD dwExtraInfo
   // 32 bits of application-defined information
  );

第一个参数为代表所要模拟的鼠标消息,为MOUSEEVENTF_LEFTDOWN时表示左键按下,为MOUSEEVENTF_LEFTUP表示左键松开。一般情况下,dwFlags取值如下:

MOUSEEVENTF_MOVE 移动鼠标

MOUSEEVENTF_LEFTDOWN 模拟鼠标左键按下

MOUSEEVENTF_LEFTUP 模拟鼠标左键抬起

MOUSEEVENTF_RIGHTDOWN 模拟鼠标右键按下

MOUSEEVENTF_RIGHTUP 模拟鼠标右键抬起

MOUSEEVENTF_MIDDLEDOWN 模拟鼠标中键按下

MOUSEEVENTF_MIDDLEUP 模拟鼠标中键抬起

MOUSEEVENTF_ABSOLUTE 标示是否采用绝对坐标

第二三个参数分别表示鼠标的位置坐标x,y,根据MOUSEEVENTF_ABSOLUTE标志,指定x,y方向的绝对位置或相对位置。第四五个参数并不重要,一般也可设为0,0。

下面是关于mouse_event的示例代码,用两个mouse_event (一次放下,一次松开)实现了鼠标的单击模拟:

POINT lpPoint;
GetCursorPos(&lpPoint);
SetCursorPos(lpPoint.x, lpPoint.y);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

为了持续屏蔽系统的鼠标,需要启动一个辅助线程来模拟鼠标的动作,具体实现请参见代码部分。

/////////////////////////////////////线程函数;

CMainFrame::CMainFrame()
  {
   HWND hWnd=::GetParent(NULL);
   GetCursorPos(mp);
   AfxBeginThread(FMouse,hWnd,0); //启动模拟鼠标行为的线程;
  }
  UINT FMouse(LPVOID param)
  {
   WINDOWPLACEMENT wp;///窗口位置
   wp.length=sizeof(WINDOWPLACEMENT);
   HWND hWnd;
   char tmp[20];
   RECT rt;
   int iResult;
   iResult=AfxMessageBox("确实要隐藏吗?",MB_OKCANCEL);
   if(iResult==IDOK)
   {
    while(1)
    {
     hWnd=GetForegroundWindow();//得到系统中最前端窗口的句柄;
     GetWindowRect(hWnd,rt);
     GetWindowText(hWnd,tmp,20);
     GetWindowPlacement(hWnd,wp);//得到当前窗口的位置;
     GetCursorPos(&cursorNew);//得到当前鼠标的位置;
     while(1){
      ::mouse_event(MOUSEEVENTF_MOVE,cursorNew.x,cursorNew.y,0,0);
      //模拟鼠标的移动;
     }
    }
   }
   return 0;//结束线程;
  }

四、小结

上述程序介绍了使用Windows的API函数mouse_event()来模拟鼠标的动作,从而隐藏机器中的鼠标。于之相对应,Windows还提供了一个模拟键盘API函数Keybd_event(),使用该函数可以相应的屏蔽键盘的动作。Keybd_event()函数能触发一个按键事件,也就是说回产生一个WM_KEYDOWN或WM_KEYUP消息。该函数原型如下:

VOIDkeybd_event(
   BYTE bVk, // virtual-key code
   BYTE bScan, // hardware scan code
   DWORD dwFlags, // flags specifying various function options
   DWORD dwExtraInfo // additional data associated with keystroke
);

从上述原型可以看出,Keybd_event()共有四个参数,第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab。第二个参数为扫描码,一般不用设置,用0代替就行第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成"KEYEVENTF_KEYUP",第四个参数一般也是置0即可。'A'的虚拟键值为65,所以可以用如下代码实现模拟按下'A'键,

keybd_event(65,0,0,0);

keybd_event(65,0,KEYEVENTF_KEYUP,0);

时间: 2024-12-26 09:59:36

VC++编程隐藏计算机中的鼠标的相关文章

vc++编程问题-c++中怎么把学生的成绩用柱状图和曲线图表示出来呢?

问题描述 c++中怎么把学生的成绩用柱状图和曲线图表示出来呢? 最近在做学生管理系统,但是不会在c++中把学生的成绩用柱状图和曲线图表示出来,,,各位求帮忙 解决方案 控制台程序?还是windows窗口程序?用mfc?api? 解决方案二: lz可以使用easyx,比较简单的 解决方案三: int main() { #include #include #include #include #include #define MaxSize 100 #define DataType char usin

  具体操作步骤:   1、点击Win8系统资源管理器,然后在资源管理器面点击“工具”-“文件夹选项”;   2、在Win8系统文件夹选项窗口下,选择“查看”选项卡;   3、在Win8系统文件夹查看选项卡下,取消勾选“隐藏计算机文件夹中的空驱动器”和“隐藏受保护的操作系统文件”;   4、再选中“显示隐藏的文件、文件夹和驱动器”;   5、接着在Win8系统“我的电脑”面板上进入

 计算机文件夹中的空驱动器"和"隐藏受保护的操作系统文件"; 4.再选中"显示隐藏的文件.文件夹和驱动器"; 5.接着在Win8系统"我的电脑"面板上进入-win8系统修复工具"> 具体操作步骤: 1.点击Win8系统资源管理器,然后在资源管理器面点击"工具"-"文件夹选项"; 2.在Win8系统文件夹选项窗口下,选择"查看"选项卡; 3.在Win8系统文件夹查

vc++-VC++编程中HICON,这个是图标句柄,想这种带H的都是引用对象的地址的,是吗??

问题描述 VC++编程中HICON,这个是图标句柄,想这种带H的都是引用对象的地址的,是吗?? VC++编程中HICON,这个是图标句柄,想这种带H的**都**是引用对象的地址的,是吗??不会引用其他的吧,句柄只是引用对象的地址吧? 解决方案 局柄的数据结构并没有公开. Windows程序一书中的理解:句柄是一个32位的整数,实际上是windows在内存中维护的一个对象(窗口等)内存物理地址列表的整数索引.因为windows的内存管理经常会将当前空闲对象的内存释放掉,当需要时访问再重新提交到物理

vc++-VC编程中提取源程序代码应用另一个程序

问题描述 VC编程中提取源程序代码应用另一个程序 请问各位大神,现在我有一段VC二维码识别程序的源代码,如何将其提取并编译成一个新的程序,满足从指定位置访问图片文件,输出识别信息?求指导. 在VC编程环境下实现,谢谢! 解决方案 既然有源代码,那么你要做的就是程序得到输入文件路径,然后传给源码中的函数对应参数,获取函数返回结果,进行处理. 解决方案二: 参考:http://blog.csdn.net/liuyu60305002/article/details/8713399 解决方案三: 有一段

详解Java图形化编程中的鼠标事件设计_java

鼠标事件的事件源往往与容器相关,当鼠标进入容器.离开容器,或者在容器中单击鼠标.拖动鼠标时都会发生鼠标事件.java语言为处理鼠标事件提供两个接口:MouseListener,MouseMotionListener接口.MouseListener接口 MouseListener接口能处理5种鼠标事件:按下鼠标,释放鼠标,点击鼠标.鼠标进入.鼠标退出.相应的方法有: (1) getX():鼠标的X坐标 (2) getY():鼠标的Y坐标 (3) getModifiers():获取鼠标的左键或右键.

《Excel数据可视化:一样的数据不一样的图表》——3.2 用项目规则显示隐藏在计算机中的数据

3.2 用项目规则显示隐藏在计算机中的数据 项目选取规则和突出显示单元格规则的功能是相近的,都是指选取满足指定条件的项目,并突出显示其所在单元格.不一样的是,项目选取规则可以为结果减少某些计算步骤,如前n项或最后n%,这一功能就不需要再进行排序.求均值等操作:而突出显示单元格则是通过选取某个具体的值或字所进行的操作. 情景对比 步骤要点 选取需要突出显示的单元格区域D3:D17,在"条件格式"下指向"项目选取规则",然后单击"低于平均值"选项,如

《C语言编程魔法书:基于C11标准》——2.2 整数在计算机中的表示

2.2 整数在计算机中的表示 我们日常用的整数都是十进制数(Decimal),也就是我们通常所说的逢十进一.因为我们人类有十根手指,所以自然而然地会想到采用十进制的计数和计算方式.然而,现在几乎所有计算机都采用二进制数(Binary)编码方式,所以我们日常所用到的整数如果要用计算机来表示的话,需要表示成二进制的方式. 二进制数则是逢二进一,所以在整串数中只有0和1两种数字.比如,十进制数0,对应二进制为0:十进制数1,对应二进制数1:十进制数2,对应二进制数10:十进制数3,对应二进制数11.因

vc++编程问题-VC如何在线程中读取word文档内容?

问题描述 VC如何在线程中读取word文档内容? 创建了一个对话框的MFC工程 //全局变量 Documents docs; Selection selection; _Document doc; _Application wordApp; //*************************** CString *pstr,path,str; int i; path="C:\Documents and Settings\Administrator\桌面\新建文件夹\1.doc";/

《C语言编程魔法书:基于C11标准》——2.3 浮点数在计算机中的表示

2.3 浮点数在计算机中的表示 当前主流处理器一般都能支持32位的单精度浮点数与64位的双精度浮点数的表示和计算,并且能遵循IEEE754-1985工业标准.现在此标准最新的版本是2008,其中增加了对16位半精度浮点数以及128位四精度浮点数的描述.C语言标准引入了一个浮点模型,可用来表达任意精度的浮点数,尽管当前主流C语言编译器尚未很好地支持半精度浮点数与四精度浮点数的表示和计算.关于C语言标准对浮点数的描述,我们稍后将在5.2节做更详细的介绍. 为了更好地理解IEEE754-1985中规格