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
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




