手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

用VisualC 设计屏幕抓图程序

来源:互联网 作者:西部数码 时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

   switch(wParam)
   {
    case VK_MENU:
     MaskBits&=~ALTBIT;
     break;
    case VK_CONTROL:
     MaskBits&=~CTRLBIT;
     break;
    case VK_SHIFT:
     MaskBits&=~SHIFTBIT;
     break;
    default: //judge the key and send message
     break;
   }
   for(int index=0;index<MAX_KEY;index ){
    if(hCallWnd[index]==NULL)
     continue;
    if(IsWindow(hCallWnd[index])&&(HotKey[index]==wParam)&&(HotKeyMask[index]==MaskBits))
    {
     SendMessage(hCallWnd[index],WM_HOTKEY,wParam,WM_KEYUP);
     bProcessed=TRUE;
    }
   }
  }
  else if((lParam&0xc000ffff)==1){ //Key down
   switch(wParam)
   {
    case VK_MENU:
     MaskBits|=ALTBIT;
     break;
    case VK_CONTROL:
     MaskBits|=CTRLBIT;
     break;
    case VK_SHIFT:
     MaskBits|=SHIFTBIT;
     break;
    default: //judge the key and send message
     break;
   }
   for(int index=0;index<MAX_KEY;index )
   {
    if(hCallWnd[index]==NULL)
     continue;
    if(IsWindow(hCallWnd[index])&&(HotKey[index]==wParam)&&(HotKeyMask[index]==MaskBits))
    {
     SendMessage(hCallWnd[index],WM_HOTKEY,wParam,WM_KEYDOWN);
     bProcessed=TRUE;
    }
   }
  }
  if(!bProcessed){
   for(int index=0;index<MAX_KEY;index ){
    if(hCallWnd[index]==NULL)
     continue;
    if(IsWindow(hCallWnd[index])&&(HotKey[index]==0)&&(HotKeyMask[index]==0))
     SendMessage(hCallWnd[index],WM_HOTKEY,WM_HOTKEY,lParam);
   }
  }
 }
 return CallNextHookEx( hHook, nCode, wParam, lParam );
}

BOOL InitHotkey()
{
 if(hHook!=NULL){
  nHookCount ;
  return TRUE;
 }
 else
  hHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hins,0);
  if(hHook!=NULL)
   nHookCount ;
  return (hHook!=NULL);
}
BOOL UnInit()
{
 if(nHookCount>1){
  nHookCount--;
  return TRUE;
}
BOOL unhooked = UnhookWindowsHookEx(hHook);
if(unhooked==TRUE){
 nHookCount=0;
 hHook=NULL;
}
return unhooked;
}

BOOL __declspec(dllexport) __stdcall AddHotkey(HWND hWnd,UCHAR cKey,UCHAR cMask)
{
 BOOL bAdded=FALSE;
 for(int index=0;index<MAX_KEY;index ){
  if(hCallWnd[index]==0){
   hCallWnd[index]=hWnd;
   HotKey[index]=cKey;
   HotKeyMask[index]=cMask;
   bAdded=TRUE;
   KeyCount ;
   break;
  }
 }
 return bAdded;
}

BOOL __declspec(dllexport) __stdcall DeleteHotkey(HWND hWnd,UCHAR cKey,UCHAR cMask)
{
 BOOL bRemoved=FALSE;
 for(int index=0;index<MAX_KEY;index ){
  if(hCallWnd[index]==hWnd){
   if(HotKey[index]==cKey&&HotKeyMask[index]==cMask){
    hCallWnd[index]=NULL;
    HotKey[index]=0;
    HotKeyMask[index]=0;
    bRemoved=TRUE;
    KeyCount--;
    break;
   }
  }
 }
 return bRemoved;
}

void VerifyWindow()
{
 for(int i=0;i<MAX_KEY;i ){
  if(hCallWnd[i]!=NULL){
   if(!IsWindow(hCallWnd[i])){
    hCallWnd[i]=NULL;
    HotKey[i]=0;
    HotKeyMask[i]=0;
    KeyCount--;
   }
  }
 }
}

BOOL CHookApp::InitInstance()
{
 AFX_MANAGE_STATE(AfxGetStaticModuleState());
 hins=AfxGetInstanceHandle();
 InitHotkey();
 return CWinApp::InitInstance();
}

int CHookApp::ExitInstance()
{
 VerifyWindow();
 UnInit();
 return CWinApp::ExitInstance();
}

////////////////////////////////////////////////////////////////////// CaptureDlg.h : header file
#if !defined(AFX_CAPTUREDLG_H__97B51708_C928_11D5_B7D6_0080C82BE86B__INCLUDED_)
#define AFX_CAPTUREDLG_H__97B51708_C928_11D5_B7D6_0080C82BE86B__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CCaptureDlg : public CDialog
{
 // Construction
 public:
  BOOL bTray;
  BOOL bRegistered;
  BOOL RegisterHotkey();
  UCHAR cKey;
  UCHAR cMask;
  void DeleteIcon();
  void AddIcon();
  UINT nCount;
  void SaveBmp();
  CCaptureDlg(CWnd* pParent = NULL); // standard constructor
  // Dialog Data
  //{{AFX_DATA(CCaptureDlg)
  enum { IDD = IDD_CAPTURE_DIALOG };
  CComboBox m_Key;
  BOOL m_bControl;
  BOOL m_bAlt;
  BOOL m_bShift;
  CString m_Path;
  CString m_Number;
  //}}AFX_DATA
  // ClassWizard generated virtual function overrides
  //{{AFX_VIRTUAL(CCaptureDlg)
 public:
  virtual BOOL PreTranslateMessage(MSG* pMsg);
 protected:
  virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
  virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!