• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 設定系統熱鍵關閉當前窗口

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    - WINDOWS 中有一系統熱鍵Alt+F4用來關閉當前窗口,筆者最近出于興趣,用VC++ 6編寫了一個程序用來實現此熱鍵功能.實現思想如下: ---- 1.創建一個不在任務欄顯示圖標的窗口. ---- 2.在程序中注冊一個系統熱鍵,并在通知欄為程序創建一個圖標.. ---- 3.禁止多個
    - WINDOWS中有一系統熱鍵Alt+F4用來關閉當前窗口,筆者最近出于興趣,用VC++ 6編寫了一個程序用來實現此熱鍵功能.實現思想如下:
    ---- 1.創建一個不在任務欄顯示圖標的窗口.
    ---- 2.在程序中注冊一個系統熱鍵,并在通知欄為程序創建一個圖標..
    ---- 3.禁止多個程序同時運行.
    ---- 4.通過枚舉窗口函數關閉當前窗口.

    ---- 一、創建一個不在任務欄顯示圖標的窗口

    ----利用AppWizard生成一個最簡單的SDI窗口,不要狀態條、工具條、ActiveX 支持、 3D 控件、打印和打印預覽。

    ---- 打開資源編輯器,插入一個空對話框,ID號為IDD--DIA,并在主框類中添寫代碼。

    BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
    if( !CFrameWnd::PreCreateWindow(cs) )
    return FALSE;

    //m_bCreate 是CmainFrame類中的一個
    protected型BOOL變量,初始值為false。
    if( !m_bCreate )
    {
    //dlg是CmainFrame類中的
    一個public型CDialog變量。
    m_bCreate=dlg.Create( IDD_DIA );
    if(m_bCreate )
    {
    dlg.ShowWindow( SW_HIDE );
    }
    };
    if(m_bCreate)
    cs.hwndParent=dlg.GetSafeHwnd();
    cs.cx=330;
    cs.cy=100;
    return TRUE;
    }


    二、在程序中注冊一個系統熱鍵并在通知欄為程序創建一個圖標


    在視類OnOnInitialUpdate函數中添加代碼如下:
    void CKillView::OnInitialUpdate()
    {
    CView::OnInitialUpdate();

    // TODO: Add your specialized
    code here and/or call the base class
    //id和nid是CkillView類的成員變量,
    id類型為ATOM型,nid類型為NOTIFYICONDATA

    id=::GlobalAddAtom( "#123" );
    //SHIFT+ALT+Z為熱鍵,盡量使用比較生疏的鍵.
    if(!::RegisterHotKey
    ( m_hWnd,id,MOD_SHIFT| MOD_ALT,'Z' ) )
    MessageBox( "hot key register failed!" );

    HICON hIcon=AfxGetApp()->LoadIcon( IDI_ICON1 );
    nid.hIcon=hIcon;
    nid.hWnd=m_hWnd;
    nid.cbSize=sizeof( NOTIFYICONDATA );
    // WM_MYMESSAGE在文件頭中定義:
    #define WM_MYMESSAGE WM_USER+10
    nid.uCallbackMessage=WM_MYMESSAGE;
    nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
    nid.uID=IDR_MENU1;
    sprintf(nid.szTip,"系統監視器" );
    Shell_NotifyIcon(NIM_ADD,&nid );
    }
    在視類重載WM_DESTORY消息函數
    void CKillView::OnDestroy()
    {
    CView::OnDestroy();

    // TODO: Add your message handler code here
    Shell_NotifyIcon( NIM_DELETE ,&nid );
    ::GlobalDeleteAtom( id );
    ::GlobalDeleteAtom(
    ::GlobalFindAtom( "unique_zxd" ) );

    }

    ---- 三、禁止多個程序同時運行.
    ---- 在應用程序類中添加代碼:

    BOOL CKillApp::InitInstance()
    {
    if(::GlobalFindAtom( "unique_zxd" )==0)
    ::GlobalAddAtom( "unique_zxd" );
    else
    {
    AfxMessageBox( "已有實例運行!" );
    return false;
    }
        .
             .
             .
    }

    四、通過枚舉窗口函數關閉當前窗口
    ---- 為響應熱鍵消息,在消息映射入口添加代碼:

    BEGIN_MESSAGE_MAP( CKillView, CView )
    //{{AFX_MSG_MAP( CKillView )
         .
         .
         .
    ON_MESSAGE( WM_HOTKEY,OnHotkey )
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    在視類添加成員函數:
    afx_msg void OnHotkey
    ( WPARAM wParam,LPARAM lParam );
    在函數體中添加代碼:
    void CKillView::OnHotkey
    ( WPARAM wParam,LPARAM lParam )
    {
    //sign是CKillView類中的一個
    protected型int變量,初始值為0。
    sign=0;
    ::EnumWindows( ( WNDENUMPROC  )EnumWindowP,0 );
    }

    ---- 關于EnumWindows()函數在各類雜志中均有介紹,此處不多作介紹.要詳知看msdn. EnumWindowP()函數為一全局函數,代碼如下:
    BOOL CALLBACK EnumWindowP
    ( HWND hWnd,LPARAM lParam )
    {
    CWnd *pWnd=CWnd::
    FromHandle( hWnd );
    if( pWnd->IsWindowVisible() )
    {

    CString str;
    pWnd->GetWindowText(str);
    if(!str.IsEmpty()&&
    ( str.CompareNoCase( "program manager" )!=0 ) )
    {
    sign++;
    if( sign==1 )
    {
           pWnd>SendMessage( WM_SYSCOMMAND,
                                 SC_CLOSE, MAKELPARAM( 123,123 ) );
              }
    }
    return true;
    }



    ---- 此外還需為通知欄圖標響應消息,添加菜單并響應菜單函數,因不是本文主題,在此不作介紹.
    ---- 以上程序在win97,win98,win2000中均獲通過

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>