[摘要]NIF_TIP; nid.uID=IDR_MENU1; sprintf(nid.szTip,"系统监视器" ); Shell_NotifyIcon(NIM_AD...
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中均获通过
关键词:设定系统热键关闭当前窗口