增强printscreen按键-显示光标

如果仅仅是想屏蔽printscreen按键

那么直接在你的程序重新registered即可

 
  
RegisterHotKey(m_hWnd, IDHOT_SNAPDESKTOP, 0, VK_SNAPSHOT);
RegisterHotKey(m_hWnd, IDHOT_SNAPWINDOW, MOD_ALT, VK_SNAPSHOT);
更详细说明: http://www.vckbase.com/document/viewdoc/?id=1566

//--------------------------------------------------------------------------------------------------------------------

键盘printscreen按键默认情况

printscreen          截屏(不截光标)

printscreen+alt   截当前窗口(不截光标)

本文增强printscreen按键功能,使之

printscreen          截屏(显示光标)

printscreen+alt   截当前窗口(显示光标)


主要处理过程:

registered printscreen按键的hotkey,见本文头,

在WNDPROC中处理WM_HOTKEY,判断printscreen按键事件,截图并画光标,保存截图内容到剪切板。


关键代码:

截图

void TmainForm::SaveScreenBmpToClipboard()
{
    HDC hdc=GetDC(NULL);
    if(hdc)
    {   
          HDC memDC=CreateCompatibleDC(hdc);
          assert(memDC);
          HBITMAP hBmp=CreateCompatibleBitmap(hdc,Screen->Width,Screen->Height);
          assert(hBmp);
          SelectObject(memDC,hBmp);
          ::BitBlt(memDC,0,0,Screen->Width,Screen->Height,hdc,0,0,SRCCOPY);
          DrawCursor(memDC);

          if(OpenClipboard(Handle))
          {
              assert(EmptyClipboard());
              assert(SetClipboardData(CF_BITMAP,hBmp));
              assert(CloseClipboard());
          }
          else
          {
              MessageBoxA(NULL,"无法打开剪切板!","提示",MB_ICONERROR);
          }
          DeleteObject(hBmp);
          DeleteObject(memDC);
          ReleaseDC(NULL,hdc);
    }  
}


画出光标

void TmainForm::DrawCursor(HDC hdc,bool bScreen)
{
    HCURSOR   hCursor=GetCursor(); 
    POINT   ptCursor; 
    GetCursorPos(&ptCursor); 
    if(!bScreen)
    {
        ::ScreenToClient(GetForegroundWindow(),&ptCursor);
    }
    //获取光标的图标数据 
    ICONINFO   IconInfo; 
    if   (GetIconInfo(hCursor,   &IconInfo)) 
    { 
    ptCursor.x   -=   ((int)   IconInfo.xHotspot); 
    ptCursor.y   -=   ((int)   IconInfo.yHotspot); 
    if   (IconInfo.hbmMask   !=   NULL) 
    DeleteObject(IconInfo.hbmMask); 
    if   (IconInfo.hbmColor   !=   NULL) 
    DeleteObject(IconInfo.hbmColor); 
    } 
    //在兼容设备描述表上画出该光标 
    DrawIconEx( 
    hdc,	 //   handle   to   device   context   
    ptCursor.x,   ptCursor.y, 
    nCursorType==0?hCursor:LoadCursor(NULL,MAKEINTRESOURCE(nCursorType)),	 //   handle   to   icon   to   draw   
    0,0,	 //   width   of   the   icon   
    0,	 //   index   of   frame   in   animated   cursor   
    NULL,	
    DI_NORMAL   |   DI_COMPAT	
    //         icon-drawing   flags   
    ); 
}


下载地址:http://download.csdn.net/detail/qq752923276/4270836


你可能感兴趣的:(Windows)