国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

VC++編程隱藏計(jì)算機(jī)中的鼠標(biāo)

2019-11-17 05:24:17
字體:
供稿:網(wǎng)友

  在Windows大行其道的今天,windows界面程序受到廣大用戶的歡迎。對(duì)這些程序的操作不外乎兩種,鍵盤輸入控制和鼠標(biāo)輸入控制。那么我們能否通過編制程序來控制系統(tǒng)的鼠標(biāo),例如隱藏計(jì)算機(jī)中的鼠標(biāo)呢?這個(gè)問題的答案是肯定的。這里主要是通過一個(gè)Windows API函數(shù)來實(shí)現(xiàn)的。下面以一個(gè)Visual C++的實(shí)例來介紹如何實(shí)現(xiàn)這個(gè)功能。需要讀者朋友們注重的是本代碼具有一定的危險(xiǎn)性,程序運(yùn)行后你將無法用鼠標(biāo)控制您的計(jì)算機(jī),這時(shí)候需要對(duì)計(jì)算機(jī)的當(dāng)前用戶名進(jìn)行注銷或重新啟動(dòng)計(jì)算機(jī)。

  一、實(shí)現(xiàn)方法

  Windows提供了一個(gè)API函數(shù)mouse_event,可以模擬一次鼠標(biāo)事件,比如左鍵單擊、雙擊和右鍵單擊等。在程序中使用此函數(shù)將產(chǎn)生一個(gè)十分有趣的效果,所模擬的鼠標(biāo)事件將屏蔽真正的鼠標(biāo)事件,我們的實(shí)例也就是利用該函數(shù)的這一特性來實(shí)現(xiàn)隱藏程序中的鼠標(biāo)。Mouse_event函數(shù)原型如下:

  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

  );

  第一個(gè)參數(shù)為代表所要模擬的鼠標(biāo)消息,為MOUSEEVENTF_LEFTDOWN時(shí)表示左鍵按下,為MOUSEEVENTF_LEFTUP表示左鍵松開。一般情況下,dwFlags取值如下:

  MOUSEEVENTF_MOVE 移動(dòng)鼠標(biāo)

    MOUSEEVENTF_LEFTDOWN 模擬鼠標(biāo)左鍵按下

    MOUSEEVENTF_LEFTUP 模擬鼠標(biāo)左鍵抬起

    MOUSEEVENTF_RIGHTDOWN 模擬鼠標(biāo)右鍵按下

    MOUSEEVENTF_RIGHTUP 模擬鼠標(biāo)右鍵抬起

    MOUSEEVENTF_MIDDLEDOWN 模擬鼠標(biāo)中鍵按下

    MOUSEEVENTF_MIDDLEUP 模擬鼠標(biāo)中鍵抬起

    MOUSEEVENTF_ABSOLUTE 標(biāo)示是否采用絕對(duì)坐標(biāo)

  第二三個(gè)參數(shù)分別表示鼠標(biāo)的位置坐標(biāo)x,y,根據(jù)MOUSEEVENTF_ABSOLUTE標(biāo)志,指定x,y方向的絕對(duì)位置或相對(duì)位置。第四五個(gè)參數(shù)并不重要,一般也可設(shè)為0,0。

  下面是關(guān)于mouse_event的示例代碼,用兩個(gè)mouse_event (一次放下,一次松開)實(shí)現(xiàn)了鼠標(biāo)的單擊模擬:   

  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);

  為了持續(xù)屏蔽系統(tǒng)的鼠標(biāo),需要啟動(dòng)一個(gè)輔助線程來模擬鼠標(biāo)的動(dòng)作,具體實(shí)現(xiàn)請(qǐng)參見代碼部分。
QQ病毒 騰訊QQ空間代碼專題 PPT教程專題 ADSL應(yīng)用面面俱到 fireworks教程專題 計(jì)算機(jī)和網(wǎng)絡(luò)技術(shù)基礎(chǔ)知識(shí) 校園網(wǎng)專題 網(wǎng)吧技術(shù)專題
二、編程步驟

  1、啟動(dòng)Visual C++6.0,建立一個(gè)單文檔的應(yīng)用程序,將程序命名為"mouse";

  2、為了隱藏主窗口,將程序中的CmainFrame類中的OnCreate()函數(shù)刪除,并在CWinApp類里調(diào)用m_pMainWnd->ShowWindow(SW_HIDE);


  3、在CmainFrame類中定義全局變量POINT mp,cursorNew;

  4、添加代碼,編譯運(yùn)行程序。

  三、程序代碼  

  /////////////////////////////////////線程函數(shù);

  CMainFrame::CMainFrame()

  {

   HWND hWnd=::GetParent(NULL);

   GetCursorPos(mp);

   AfxBeginThread(FMouse,hWnd,0); //啟動(dòng)模擬鼠標(biāo)行為的線程;

  }

  UINT FMouse(LPVOID param)

  {

   WINDOWPLACEMENT wp;///窗口位置

   wp.length=sizeof(WINDOWPLACEMENT);

   HWND hWnd;

   char tmp[20];

   RECT rt;

   int iResult;

   iResult=AfxMessageBox("確實(shí)要隱藏嗎?",MB_OKCANCEL);

   if(iResult==IDOK)

   {

    while(1)

    {

     hWnd=GetForegroundWindow();//得到系統(tǒng)中最前端窗口的句柄;

     GetWindowRect(hWnd,rt);

     GetWindowText(hWnd,tmp,20);

     GetWindowPlacement(hWnd,wp);//得到當(dāng)前窗口的位置;

     GetCursorPos(&cursorNew);//得到當(dāng)前鼠標(biāo)的位置;

     while(1){

      ::mouse_event(MOUSEEVENTF_MOVE,cursorNew.x,cursorNew.y,0,0);

      //模擬鼠標(biāo)的移動(dòng);

     }

    }

   }

   return 0;//結(jié)束線程;

  }

  四、小結(jié)

  上述程序介紹了使用Windows的API函數(shù)mouse_event()來模擬鼠標(biāo)的動(dòng)作,從而隱藏機(jī)器中的鼠標(biāo)。于之相對(duì)應(yīng),Windows還提供了一個(gè)模擬鍵盤API函數(shù)Keybd_event(),使用該函數(shù)可以相應(yīng)的屏蔽鍵盤的動(dòng)作。Keybd_event()函數(shù)能觸發(fā)一個(gè)按鍵事件,也就是說回產(chǎn)生一個(gè)WM_KEYDOWN或WM_KEYUP消息。該函數(shù)原型如下:  

  VOID keybd_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()共有四個(gè)參數(shù),第一個(gè)為按鍵的虛擬鍵值,如回車鍵為vk_return, tab鍵為vk_tab。第二個(gè)參數(shù)為掃描碼,一般不用設(shè)置,用0代替就行第三個(gè)參數(shù)為選項(xiàng)標(biāo)志,假如為keydown則置0即可,假如為keyup則設(shè)成"KEYEVENTF_KEYUP",第四個(gè)參數(shù)一般也是置0即可。'A'的虛擬鍵值為65,所以可以用如下代碼實(shí)現(xiàn)模擬按下'A'鍵,   

  keybd_event(65,0,0,0);

  keybd_event(65,0,KEYEVENTF_KEYUP,0);

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 益阳市| 久治县| 阿拉善盟| 元朗区| 林西县| 昌图县| 南华县| 黑水县| 弋阳县| 泰顺县| 镇远县| 九江县| 酒泉市| 夹江县| 乡城县| 扬中市| 成武县| 乡城县| 石景山区| 福贡县| 昭觉县| 贞丰县| 砚山县| 彭泽县| 修武县| 富民县| 福鼎市| 木兰县| 彭州市| 土默特左旗| 彭阳县| 明光市| 茶陵县| 淮滨县| 清水县| 疏勒县| 湟中县| 西乌珠穆沁旗| 台南县| 裕民县| 华宁县|