系统之雕虫小技(一)——键盘、鼠标、显示器、桌面

转载 2004年06月25日 16:40:00

 一 键盘

1.1 Disabling Low-level Keys

#define _WIN32_WINNT 0x0400
#include
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,
           WPARAM wParam, LPARAM lParam)
{
 BOOL fEatKeystroke = FALSE;
 
 if (nCode == HC_ACTION) {
  switch (wParam) {
  case WM_KEYDOWN: 
  case WM_SYSKEYDOWN:
  case WM_KEYUP:   
  case WM_SYSKEYUP:
   PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
   fEatKeystroke =
    ((p->vkCode == VK_TAB)    &&  ((p->flags & LLKHF_ALTDOWN) != 0)) ||
    ((p->vkCode == VK_ESCAPE) &&  ((p->flags & LLKHF_ALTDOWN) != 0)) ||
    ((p->vkCode == VK_ESCAPE) &&  ((GetKeyState(VK_CONTROL)&0x8000) != 0))||
    ( p->vkCode == VK_LWIN)   ||  ( p->vkCode==VK_RWIN )
    ;
   break;
  }
 }
 return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam,
  lParam));
}


int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int)
{
       
        // Install the low-level keyboard & mouse hooks
        HHOOK hhkLowLevelKybd  = SetWindowsHookEx(WH_KEYBOARD_LL,
        LowLevelKeyboardProc, hinstExe, 0);
 
       // Keep this app running until we're told to stop
         MessageBox(NULL,
             TEXT("Alt+Esc, Ctrl+Esc, Alt+Tab, LWIN and RWIN are now disabled./n") 
          TEXT("Click /"Ok/" to terminate this application and re-enable these keys."),
                TEXT("Disable Low-Level Keys"),
                MB_OK);
  
             UnhookWindowsHookEx(hhkLowLevelKybd);
             return(0);
}


1.2 系统热键
        1.屏蔽:SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,true,0, SPIF_UPDATEINIFILE);
        2.恢复:SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,false,  0, SPIF_UPDATEINIFILE);

1.3 模拟按键
 
让系统模拟一次按下WIN+D键  
 
               keybd_event(VK_LWIN,0,0,0);  
               keybd_event('D',0,0,0);  
               keybd_event(VK_LWIN,0,KEYEVENTF_KEYUP,0);  
               keybd_event('D',0,KEYEVENTF_KEYUP,0);

1.4 切换到当前桌面

模拟最小化屏幕快捷键Window+D  
 
                             keybd_event(VK_LWIN,0,0,0);      
                             keybd_event('D',0,0,0);      
                             keybd_event(VK_LWIN,0,KEYEVENTF_KEYUP,0);      
                             keybd_event('D',0,KEYEVENTF_KEYUP,0);  
---------------------------------------------------------------  
 
正统的办法如下:  
 
#include    
#include    
 
int  main  ()  
       {  
               CoInitialize  (0);  
               IShellDispatch4  *pdisp  =  NULL;  
               CoCreateInstance  (CLSID_Shell,  NULL,  CLSCTX_ALL,  __uuidof  (IShellDispatch4),  (void  **)&pdisp);  
               pdisp->ToggleDesktop  ();  //  这句是用来切换桌面的  
               pdisp->Release  ();  
               CoUninitialize  ();  
       };

1.5 调出关机选择画面

////////调出关机选择画面:(重启、关机、休眠、待机)  
typedef  int  (CALLBACK  *SHUTDOWNDLG)(int);  //显示关机对话框函数的指针  
HINSTANCE  hInst  =  LoadLibrary("shell32.dll");  //装入shell32.dll  
SHUTDOWNDLG  ShutDownDialog;  //指向shell32.dll库中显示关机对话框函数的指针  
if(hInst  !=  NULL)  
{  
       //获得函数的地址并调用之  
       ShutDownDialog  =  (SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60);  
       (*ShutDownDialog)(0);  
}  

二 鼠标

2.1   ::ClipCursor(&rect);
        ::ClipCursor(NULL);

2.2 一个未公开的API函数BlockInput,在user32.dll中,用它可以
轻易的锁定键盘和鼠标。

BOOL __stdcall (*BlockInput)(BOOL Flag);
(FARPROC)BlockInput = GetProcAddress(GetModuleHandle(
    "user32.dll"), "BlockInput");
if (BlockInput) BlockInput(TRUE); //这样就可以了

三 显示器

   3.1 关闭显示器
        1. SendMessage( WM_SYSCOMMAND, SC_MONITORPOWER, 2);//关显示器
           SendMessage( WM_SYSCOMMAND, SC_SCREENSAVE, 0);//运行屏保

        2. ::SendMessage(GetSafeHwnd(), WM_SYSCOMMAND, SC_MONITORPOWER, 2);
 
        3. SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,2);
   3.2 启动屏保
         PostMessage(WM_SYSCOMMAND,SC_SCREENSAVE,0);

四 系统桌面

  4.1 隐藏任务栏
       隐藏 ::ShowWindow (::FindWindow("Shell_TrayWnd",NULL),SW_HIDE);
            or ::ShowWindow (::FindWindow("Shell_TrayWnd",NULL),SW_HIDE);
       显示 ::ShowWindow (::FindWindow("Shell_TrayWnd",NULL),SW_SHOW);
            or ::ShowWindow (::FindWindow("Shell_TrayWnd",NULL),SW_SHOW);

   4.2 在任务栏隐藏
       SetWindowLong(Application,Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);

   4.3在任务管理器中隐藏
//定义RegisterServiceProcess函数的原型
typedef DWORD (CALLBACK* LPREGISTERSERVICEPROCESS)(DWORD,DWORD);

//注册应用程序的进程
//其中i = 0,将进程注册成非服务进程,这样,在Windows的关闭程序窗口中就不会出现应用程序
//的名称了。
// i = 1,将进程注册成服务进程,这是一般应用程序运行时所采用的状态。

void RegisterProcess(int i)
{
            HINSTANCE hDLL;
            LPREGISTERSERVICEPROCESS lpRegisterServiceProcess;

            //加载RegisterServiceProcess函数所在的链接库
            hDLL = LoadLibrary("KERNEL32");

            //得到RegisterServiceProcess函数的地址 
            lpRegisterServiceProcess = (LPREGISTERSERVICEPROCESS)GetProcAddress(hDLL, "RegisterServiceProcess");

            //执行RegisterServiceProcess函数
            lpRegisterServiceProcess(GetCurrentProcessId(),i);

           //卸载链接库
           FreeLibrary(hDLL);
}

 

4.4启动屏保

SystemParametersInfo(SPI_SETDESKWALLPAPER,0,"C://*.BMP",WM_WININICHANGE);

远程登陆最小化或关闭 模拟键盘操作失效

问题原因分析:   因为通过mstsc启动远程桌面连接时,被连接的Windows会启动一个会话(Session)。此时你对远程桌面窗口里面的所有操作(鼠标,键盘)将会‘翻译’成TCP包传输过去,被...
  • mezheng
  • mezheng
  • 2017年02月06日 10:06
  • 1268

UI自动化中关闭远程桌面连接,鼠标键盘失效的解决方案

问题原因分析:   因为通过mstsc启动远程桌面连接时,被连接的Windows会启动一个会话(Session)。此时你对远程桌面窗口里面的所有操作(鼠标,键盘)将会‘翻译’成TCP包传输过去,被...
  • qq_31666147
  • qq_31666147
  • 2016年03月30日 14:11
  • 2722

ubuntu 16.04 安装完系统,异常导致无桌面

新安装的Ubuntu 16.04,瞌蕞凿鸠登录系统一切正常。然后根据提示打开软件中心升级软件,然后软件中心没有任何提示,也不知道升级成功与否。重启系统之后,桌面消失,一片空白,也无法进行操作。眺螗熨膣...
  • weinyZhou
  • weinyZhou
  • 2016年09月29日 23:07
  • 4553

Windows系统给树莓派装系统之Raspbian系统(无外接设备,如屏幕、鼠标、键盘)并使用ssh、vnc和xrdp(远程桌面)以及固件更新

需要准备的软件:     Windows:Putty、RealVNC(商业软件)、SDFormatter、Win32DiskImager、XWindow(商业软件,可选)     其它:Raspbia...
  • plgkm6
  • plgkm6
  • 2017年01月19日 14:54
  • 775

我的Raspberry Pi/树莓派有线网和无线网接通了------不需要树莓派显示器,键盘,鼠标,串口

以前, 总是登录公司的linux服务器, 有时候, 因为权限问题, 玩得并不爽, 甚至连服务器长得什么样,物理位置在哪里都不知道, 当然, 也没必要知道。之后, 经常用ssh/串口/adb登录公司某l...
  • stpeace
  • stpeace
  • 2017年11月26日 00:44
  • 766

关于mac和PC连接多个显示器共享鼠标键盘,粘贴板的解决方案。

中午吃完饭回来,闲来无事觉得两个键盘鼠标互相换着打字太麻烦,因为原来在OSX系统里的偏好设定里看见过共享屏幕这一说,于是就想看看有没有什么方法能让MAC和PC共享屏幕。找到如下方法,已验证成功,剪贴板...
  • DevFun
  • DevFun
  • 2011年09月08日 14:39
  • 4452

关于mac和PC连接多个显示器共享鼠标键盘,粘贴板的解决方案。

中午吃完饭回来,闲来无事觉得两个键盘鼠标互相换着打字太麻烦,因为原来在OSX系统里的偏好设定里看见过共享屏幕这一说,于是就想看看有没有什么方法能让MAC和PC共享屏幕。找到如下方法,已验证成功,剪贴板...
  • menuconfig
  • menuconfig
  • 2014年07月25日 11:17
  • 2152

山东中煤提供防爆计算机|防爆电脑|防爆键盘鼠标|防爆显示器防爆录像机

http://blog.cnwest.com/home.php?mod=space&uid=576339&do=blog&quickforward=1&id=1224101防爆摄像机选山东中煤,防爆摄...
  • u023047609
  • u023047609
  • 2014年11月07日 13:30
  • 4

Nodejs爬虫刷csdn访客+桌面自动化框架Robotjs模拟鼠标,键盘,屏幕事件!

叮铃铃!叮铃铃!老师:“小明 你的梦想是什么?”, 沉思了一下 小明:“额额  我想有车有房,自己当老板,媳妇貌美如花,还有一个当官的兄弟” 老师:“北宋有一个人和你一样···”; 哈喽!大家好! ...
  • zhang767653317
  • zhang767653317
  • 2017年03月01日 17:19
  • 2539

远程桌面的几则雕虫小技

  • 2008年09月12日 00:21
  • 3KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:系统之雕虫小技(一)——键盘、鼠标、显示器、桌面
举报原因:
原因补充:

(最多只允许输入30个字)