![](/img/trans.png)
[英]How do I clear a win32 cmd console window without using system() in C?
[英]How to create a win32 application without window in background with C?
该应用程序不需要任何窗口或控制台。 如果控制台窗口可以删除或可以置于后台,则它可以是控制台应用程序。 该应用程序将执行一些简单的任务(例如清理垃圾文件)并退出。
如果可能,我希望该应用程序不应是 Windows 服务。
我希望该应用程序可以在资源管理器窗口中双击启动并静默运行。
当应用程序运行时,我希望鼠标光标不要变成沙漏形状。 也就是说,在应用程序运行时不要打扰用户。 只需运行并默默退出。
不需要在 Windows 启动或用户登录时运行它。
如果可能的话,我希望这可以在 C 中完成。 我该怎么办?
task_finished = 0;
CreateThread(NULL, 65535, task_thread, para, 0, NULL);
MSG msg;
while(!task_finished){
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if(task_finished)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
IIRC,您可以通过编写不创建或显示窗口或控制台的 WinMain 函数来完成此操作。 如果您希望您的程序能够从其他程序发送或接收消息,Lambert 关于使用消息循环的回答将对您有所帮助,但是如果您只是在进行简单的后台处理,那么您只需要一个 WinMain 就可以了窗口。
您只需要一个消息循环——只需使用此代码(从此处修改):
MSG msg;
BOOL bRet;
while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
编辑:
对于 I/O 或其他任务,您可以 (1) 创建另一个线程,并从那里执行所有操作,或者 (2) 在循环内使用MsgWaitForMultipleObjects (在下一次GetMessage
() 调用之前)同时等待您的 I/O和消息,以便您可以在有消息或 I/O 完成时收到通知。
警告:
我还没有弄清楚如何使应用程序在启动时不显示沙漏形状。 如果您需要该功能,请考虑改为创建 Windows 服务。 您也可以编译为控制台应用程序,然后使用FreeConsole
来隐藏窗口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.