前言:实现并不直观,但是方法比较多,且最终实现的机理都有所不同。以下介绍几个实现方法:
方式一:主要设置将需要运行的程序以windows系统服务的方式启动,
这部分请关注《windows服务方式启动程序(后台程序) 》
方式二:针对VC控制台程序(Win32 Console Application)
其原理就是在控制台程序中加入MFC窗口程序的一些东西(例如程序入口使用了WinMain、使用了消息处理机制)。
简单实例如下
-
#include <Windows.h>
-
#include <tchar.h>
-
void OnHotKey(MSG& msg);
-
ATOM nAskMM;
-
ATOM nQuit;
-
int APIENTRY WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
-
{
-
nAskMM = GlobalAddAtom(_T("谁能介绍个妹子huangdi915103@gmail.com"));
-
nQuit = GlobalAddAtom(_T("不介绍我就退出"));
-
BOOL nRes = RegisterHotKey(NULL,nAskMM,MOD_CONTROL | MOD_ALT,VK_NUMPAD0);// ctrl+alt+0(小键盘的0)
-
nRes = RegisterHotKey(NULL,nQuit,MOD_CONTROL | MOD_ALT,VK_NUMPAD1); //ctrl+alt+1(小键盘的1)
-
-
MSG msg;
-
while (GetMessage(&msg,NULL,0,0))
-
{
-
TranslateMessage(&msg);
-
DispatchMessage(&msg) ;
-
if (WM_HOTKEY == msg.message)
-
{
-
OnHotKey(msg);
-
}
-
}
-
return 0;
-
}
-
void OnHotKey(MSG& msg)
-
{
-
WORD keyCode = LOWORD(msg.lParam);
-
WORD vk = HIWORD(msg.lParam);
-
if (msg.wParam == nAskMM)
-
{
-
MessageBox(NULL,_T("有多余妹子请介绍给我"),_T("求妹子"),MB_OK);
-
}
-
else if (msg.wParam == nQuit)
-
{
-
MessageBox(NULL,_T("别忘了"),_T("求妹子"),MB_OK);
-
PostQuitMessage(0);
-
}
-
}
其实方式二也可直接应用于MFC的程序实现后台运行,这里介绍下另一种方式实现:
1.新建一个基于对话框的应用程序,
1.在OnInitDialog()函数中添加:ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);
2.相应对话框的WM_NCPAINT,添加如下代码:
static int i = 2;
if (i <= 2) {
ShowWindow(SW_HIDE);
i--;
}
else
CDialog::OnNcPaint();
最后运行程序,你会发现你程序就是在后台运行了
至于相应键盘消息,可以重写虚函数PreTranslateMessage()中检测;如果想实现快捷键,可以用虚拟键的方法,在资源视图中添加一个Accelerator资源。
方式四:可以使用别人已经写好的后台程序模版直接套用自己的代码实现后台程序
阅读(6495) | 评论(0) | 转发(0) |