熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

VC++編程隱藏計算機中的鼠標

2013-11-13 10:20:19  來源: .NET編程 

  在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

   // bits of applicationdefined information

  );

  第一個參數為代表所要模擬的鼠標消息為MOUSEEVENTF_LEFTDOWN時表示左鍵按下為MOUSEEVENTF_LEFTUP表示左鍵松開一般情況下dwFlags取值如下

  MOUSEEVENTF_MOVE 移動鼠標

    MOUSEEVENTF_LEFTDOWN 模擬鼠標左鍵按下

    MOUSEEVENTF_LEFTUP 模擬鼠標左鍵抬起

    MOUSEEVENTF_RIGHTDOWN 模擬鼠標右鍵按下

    MOUSEEVENTF_RIGHTUP 模擬鼠標右鍵抬起

    MOUSEEVENTF_MIDDLEDOWN 模擬鼠標中鍵按下

    MOUSEEVENTF_MIDDLEUP 模擬鼠標中鍵抬起

    MOUSEEVENTF_ABSOLUTE 標示是否采用絕對坐標

  第二三個參數分別表示鼠標的位置坐標xy根據MOUSEEVENTF_ABSOLUTE標志指定xy方向的絕對位置或相對位置第四五個參數並不重要一般也可設為

  下面是關於mouse_event的示例代碼用兩個mouse_event (一次放下一次松開)實現了鼠標的單擊模擬   

  POINT lpPoint;

  GetCursorPos(&lpPoint);

  SetCursorPos(lpPointx lpPointy);

  mouse_event(MOUSEEVENTF_LEFTDOWN); mouse_event(MOUSEEVENTF_LEFTUP);

  為了持續屏蔽系統的鼠標需要啟動一個輔助線程來模擬鼠標的動作具體實現請參見代碼部分

  編程步驟

  啟動Visual C++建立一個單文檔的應用程序將程序命名為mouse

  為了隱藏主窗口將程序中的CmainFrame類中的OnCreate()函數刪除並在CWinApp類裡調用m_pMainWnd>ShowWindow(SW_HIDE)

  在CmainFrame類中定義全局變量POINT mpcursorNew

  添加代碼編譯運行程序

  程序代碼  

  /////////////////////////////////////線程函數

  CMainFrame::CMainFrame()

  {

   HWND hWnd=::GetParent(NULL);

   GetCursorPos(mp);

   AfxBeginThread(FMousehWnd); //啟動模擬鼠標行為的線程

  }

  UINT FMouse(LPVOID param)

  {

   WINDOWPLACEMENT wp;///窗口位置

   wplength=sizeof(WINDOWPLACEMENT);

   HWND hWnd;

   char tmp[];

   RECT rt;

   int iResult;

   iResult=AfxMessageBox(確實要隱藏嗎?MB_OKCANCEL);

   if(iResult==IDOK)

   {

    while()

    {

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

     GetWindowRect(hWndrt);

     GetWindowText(hWndtmp);

     GetWindowPlacement(hWndwp);//得到當前窗口的位置

     GetCursorPos(&cursorNew);//得到當前鼠標的位置

     while(){

      ::mouse_event(MOUSEEVENTF_MOVEcursorNewxcursorNewy);

      //模擬鼠標的移動

     }

    }

   }

   return ;//結束線程

  }

  小結

  上述程序介紹了使用Windows的API函數mouse_event()來模擬鼠標的動作從而隱藏機器中的鼠標於之相對應Windows還提供了一個模擬鍵盤API函數Keybd_event()使用該函數可以相應的屏蔽鍵盤的動作Keybd_event()函數能觸發一個按鍵事件也就是說回產生一個WM_KEYDOWN或WM_KEYUP消息該函數原型如下  

  VOID keybd_event(

   BYTE bVk // virtualkey 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第二個參數為掃描碼一般不用設置代替就行第三個參數為選項標志如果為keydown則置即可如果為keyup則設成KEYEVENTF_KEYUP第四個參數一般也是置即可A的虛擬鍵值為所以可以用如下代碼實現模擬按下A   

  keybd_event();

  keybd_event(KEYEVENTF_KEYUP);


From:http://tw.wingwit.com/Article/program/net/201311/13276.html
  • 上一篇文章:

  • 下一篇文章:
  • Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.