HotKey,SendMessage,PostMessage基础

来源:互联网 发布:ubuntu怎么进入root 编辑:程序博客网 时间:2024/06/14 15:16
/****** 单文档中使用HotKey和OnChar ******/
/****** testView.h ******/
public:
 virtual ~CTestView();
 virtual void OnInitialUpdate();

protected:
 
//{{AFX_MSG(CTestView)
 afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
 
//}}AFX_MSG
 afx_msg LONG OnHotKey(WPARAM wParam,LPARAM lParam);
 DECLARE_MESSAGE_MAP()

/****** testView.cpp ******/
BEGIN_MESSAGE_MAP(CTestView, CView)
//{{AFX_MSG_MAP(CTestView)
ON_WM_CHAR() 
//}}AFX_MSG_MAP
ON_MESSAGE(WM_HOTKEY,OnHotKey)
// Standard printing commands
//.......
END_MESSAGE_MAP()

/*注册热键*/
void CTestView::OnInitialUpdate()
{
    ASSERT(NULL != GetSafeHwnd());   
    
    
//Register热键   
#ifdef _DEBUG 
//debug版本   
    int nRet = RegisterHotKey(GetSafeHwnd(),199,MOD_CONTROL,'I'); 
//热键 ctrl + i  
    if(!nRet)   
        AfxMessageBox(_T("RegisterHotKey 0 false"));   
    nRet = RegisterHotKey(GetSafeHwnd(),201,MOD_ALT,'B'); 
//热键 alt + b  
    nRet = RegisterHotKey(GetSafeHwnd(),203,MOD_ALT,'E'); 
//热键 alt + e   
    if(!nRet)   
        AfxMessageBox(_T("RegisterHotKey 1 false"));   
#else 
//release版本   
    RegisterHotKey(GetSafeHwnd(),199,MOD_CONTROL,'I'); 
//热键 ctrl + i   
    RegisterHotKey(GetSafeHwnd(),201,MOD_ALT,'B'); 
//热键 alt + b  
    RegisterHotKey(GetSafeHwnd(),203,MOD_ALT,'E'); 
//热键 alt + e 
#endif 
}

/*处理键盘消息*/
void CTestView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
    if(GetKeyState(VK_CONTROL) & 0x8000)
    {
        if(nChar == 2)  /*Ctrl+b*/
        {  AfxMessageBox("您按了组合键:Ctrl+b");
        }
        else if(nChar == 5/*Ctrl+e*/
        {  AfxMessageBox("您按了组合键:Ctrl+e");
        } 
        else if (nChar == 9/*Ctrl+i*/
        {
        AfxMessageBox("您按了组合键:Ctrl+i");
        }   
    }   
    CView::OnChar(nChar, nRepCnt, nFlags);
}

/*接收组合键消息*/
LONG CTestView::OnHotKey(WPARAM wParam,LPARAM lParam)            
{  
    UINT fuModifiers = (UINT) LOWORD(lParam);  
// key-modifier flags    
    UINT uVirtKey = (UINT) HIWORD(lParam);     
// virtual-key code    
    
    
//判断响应了什么热键   
    if( MOD_CONTROL == fuModifiers && 'I' == uVirtKey )   
    {   
        AfxMessageBox(_T("你按下了组合键 ctrl + i"));     
    }   
    else if( MOD_ALT == fuModifiers && 'B' == uVirtKey )   
    {   
        AfxMessageBox(_T("你按下了组合键 alt + b"));     
    }   
    else if( MOD_ALT == fuModifiers && 'E' == uVirtKey )   
    {   
        AfxMessageBox(_T("你按下了组合键 alt + e"));     
    } 
    else  
    {
        AfxMessageBox(_T("你按下了未知热键"));
    }
    
    return 0;           
} 
////////////////////////////////////////////////////////////////////////////
/****** 对话框中使用HotKey ******/
/****** FDiskDlg.h ******/
    
//{{AFX_VIRTUAL(CFDiskDlg)
    public:
    virtual BOOL DestroyWindow();
    protected:
    virtual void DoDataExchange(CDataExchange* pDX); 
// DDX/DDV support
    
//}}AFX_VIRTUAL

    
//{{AFX_MSG(CFDiskDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnHotKey(WPARAM wp,LPARAM lp);
    afx_msg void OnTimer(UINT nIDEvent);
    
//}}AFX_MSG
/****** FDiskDlg.cpp ******/
BEGIN_MESSAGE_MAP(CFDiskDlg, CDialog)
//{{AFX_MSG_MAP(CFDiskDlg)
ON_MESSAGE(WM_HOTKEY,OnHotKey)
ON_WM_TIMER()
    
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BOOL CFDiskDlg::OnInitDialog()
{   
  ::RegisterHotKey(m_hWnd,199,MOD_ALT,'X');
  ::RegisterHotKey(m_hWnd,201,MOD_ALT,'Z');
  SetTimer(0,80,NULL);
return TRUE;
}

void CFDiskDlg::OnHotKey(WPARAM wp,LPARAM lp)
//热键
{
    if(wp==199)
    {
        
//if(IsWindowVisible())
            ShowWindow(SW_HIDE);
        
//else
            
//ShowWindow(SW_SHOWNORMAL);
            
//ShowWindow(SW_SHOW);
    }
    if (wp ==201)
    {
        ShowWindow(SW_SHOW);
    }
}

BOOL CFDiskDlg::DestroyWindow() 
{
    
//::UnregisterHotKey(m_hWnd,199);//释放注册的热键
    
//::UnregisterHotKey(m_hWnd,201);//释放注册的热键
    return CDialog::DestroyWindow();
}

void CFDiskDlg::OnTimer(UINT nIDEvent) 
{
        
//定时执行的任务  
    CDialog::OnTimer(nIDEvent);
}
////////////////////////////////////////////////////////////////////////////
/*向记事本文件发消息*/
HWND hwnd=::FindWindow(NULL,"无标题 - 记事本");  
//HWND hedit = ::GetDlgItem(hwnd, 0x0000000F);
HWND hedit = FindWindowEx(hwnd, NULL, "edit", NULL);
::PostMessage(hedit,WM_KEYUP,'1',0); /*向记事本发消息*/
::SendMessage(hwnd,WM_CLOSE,0,0);    /*关闭记事本文件*/
原创粉丝点击