零、需求

  • 希望在Windows开机后自动弹出个对话框提示一下,过8秒后自动关闭

一、解决

1.建项目和源文件

  • 在VC6.0中新建Win32项目



  • 新建C++源文件

2.编写代码

  • 基础结构
#include <windows.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
return 0;
}
  • 添加弹窗
#include <windows.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
if(IDCANCEL == MessageBox(NULL, TEXT ("弹窗消息"), TEXT ("弹窗1"), MB_OKCANCEL))
{
//如果点击了取消
MessageBox (NULL, TEXT ("弹窗消息"), TEXT ("弹窗2"), MB_OK);
}
return 0;
}
  • 添加多线程
#include <windows.h>

// 线程的运行函数
DWORD WINAPI CloseDialog(LPVOID param)
{
ExitThread(0);
return 0;
} int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
DWORD parameter = 0;
DWORD id;
//创建线程
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)CloseDialog, &parameter, 0, &id); if(IDCANCEL == MessageBox(NULL, TEXT ("弹窗消息"), TEXT ("弹窗1"), MB_OKCANCEL))
{
//如果点击了取消
MessageBox (NULL, TEXT ("弹窗消息"), TEXT ("弹窗2"), MB_OK);
}
return 0;
}
  • 完善关闭功能
#include <windows.h>

static TCHAR title[] = TEXT ("弹窗1");

// 线程的运行函数
DWORD WINAPI CloseDialog(LPVOID param)
{
//休眠8000ms
Sleep(8000);
HANDLE hWnd = ::FindWindowEx(NULL, NULL, NULL,title);
if (hWnd)
{
//关闭对话框
::EndDialog((HWND)hWnd, IDNO);
}
ExitThread(0);
return 0;
} int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
DWORD parameter = 0;
DWORD id;
//创建线程
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)CloseDialog, &parameter, 0, &id); if(IDCANCEL == MessageBox(NULL, TEXT ("8秒后关闭"), title, MB_OKCANCEL))
{
//如果点击了取消
MessageBox (NULL, TEXT ("不会关闭"), TEXT ("弹窗2"), MB_OK);
}
return 0;
}

3.效果

  • 窗口



    什么都不做8s后自动关闭,点确认后立即关闭,点取消后立即关闭并且弹出窗口2,窗口2不会自动关闭。

二、总结

下面的内容收集自互联网。

1.CreateThread

产生一个线程(并因而成就一个多线程程序),是以CreateThread()作为一切行动的开始。

原型

HANDLE CreateThread(
 LPSECURITY_ATTRIBUTES lpThreadAttributes,
 SIZE_T dwStackSize,
 LPTHREAD_START_ROUTINE lpStartAddress,
 LPVOID lpParameter,
 DWORD dwCreationFlags,
 LPDWORD lpThreadId
);

参数

lpThreadAttributes:描述施行于这一新线程的security属性。NULL表示使用缺省值。

dwStatckSize : 新线程拥有自几的堆栈,0表示使用缺省大小。

lpStartAddress: 新线程将开始的起始地址,这是一个函数指针(在C语言中函数名成即代表函数指针)。

lpParameter:此值将被传送到上述所指定的新线程函数去,作为参数(唯一的参数)。

dwCreationFlags:允许你产生一个暂时挂起的线程,默认情况是“立即开始执行”。

lpThreadId :新线程的ID会被传回到这里。

返回值

如果CreateThread()成功,传回一个handle,代表新线程,否则传回一个FALSE。如果失败,你可以调用GetLastError()获知原因。

2.MessageBox

弹出一个对话框。

原型

int MessageBox(
HWND hWnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT uType
);

参数

hWnd

处理要创建的消息框的所有者窗口。如果该参数为空,则消息框没有所有者窗口。

lpText

指向一个包含要显示的消息的null终止字符串的指针

lpCaption

指向一个包含对话框标题的空终止字符串的指针。如果该参数为空,则使用默认的标题Error。

uType

指定对话框的内容和行为。这个参数可以是来自以下几组标志的组合。要指出在消息框中显示的按钮。

按钮

MB_OK

默认值。有一个确认按钮在里面。

MB_YESNO

有是和否在里面。

MB_ABORTRETRYIGNORE

有Abort(放弃),Retry(重试)和Ignore(跳过)

MB_YESNOCANCEL

消息框含有三个按钮:Yes,No和Cancel

MB_RETRYCANCEL

有Retry(重试)和Cancel(取消)

MB_OKCANCEL

消息框含有两个按钮:OK和Cancel

图标

X 错误 MB_ICONHAND、MB_ICONSTOP、MB_ICONERROR

? 询问 MB_ICONQUESTION

! 警告 MB_ICONEXCLAMATION、MB_ICONWARNING

i 信息 MB_ICONASTERISK、MB_ICONINFORMATION

上面这些东西在msdn可以看到。

返回值

如果一个消息框有一个取消按钮,那么如果按下ESC键或者取消了取消按钮,函数将返回IDCANCEL值。

如果消息框没有取消按钮,按ESC键就没有效果。

如果函数失败,则返回值为0。

如果函数成功,则返回值是下列菜单项的值之一。

IDABORT Abort按钮被选中。

IDCANCEL Cancel按钮被选中。

IDCONTINUE Continue按钮被选中。

IDIGNOR EIgnore按钮被选中。

IDNO No按钮被选中。

IDOK OK按钮被选中。

IDRETRY Retry按钮被选中。

IDYES Yes按钮被选中。

3.FindWindowEx

在窗口列表中寻找与指定条件相符的第一个子窗口 。

该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。

原型

HWND FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
);

参数

hwndParent:要查找的子窗口所在的父窗口的句柄(如果设置了hwndParent,则表示从这个hwndParent指向的父窗口中搜索子窗口)。

如果hwndParent为 0 ,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。

Windows NT5.0 and later:如果hwndParent是HWND_MESSAGE,函数仅查找所有消息窗口。

hwndChildAfter :子窗口句柄。查找从在Z序中的下一个子窗口开始。子窗口必须为hwndParent窗口的直接子窗口而非后代窗口。如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始。如果hwndParent 和 hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。

lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobaIAddAtom函数产生的全局成员。该成员为16位,必须位于lpClassName的低16位,高位必须为0。

lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为 NULL,则为所有窗口全匹配。

返回值

Long,找到的窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError

如果函数成功,返回值为具有指定类名和窗口名的窗口句柄。如果函数失败,返回值为NULL。

若想获得更多错误信息,请调用GetLastError函数。

4.EndDialog

该函数清除一个模态对话框,并使系统中止对对话框的任何处理。

原型

BOOL EndDialog(HWND hDlg,int nResult);

参数

hDlg:表示要被清除的对话框窗口。

NResult:指定从创建对话框函数返回到应用程序的值。

返回值

如果函数调用成功,则返回值为非零值;如果函数调用失败则返回值为零。若想获得错误信息请调用GetLastError函数。

【Win32】通过多线程自动关闭对话框的方法的更多相关文章

  1. js弹出对话框的方法总结

    九种js弹出对话框的方法总结,需要的朋友可以参考一下 [1.最基本的js弹出对话框窗口代码] 这是最基本的js弹出对话框,其实代码就几句非常简单: <script LANGUAGE=" ...

  2. js 弹出对话框的方法总结

    原文:http://www.cnblogs.com/xiaofengfeng/archive/2012/10/20/2732784.html <!DOCTYPE html PUBLIC &quo ...

  3. 在Android的webview中定做js的alert,confirm和prompt对话框的方法

    在Android的webview中定制js的alert,confirm和prompt对话框的方法 http://618119.com/archives/2010/12/20/199.html 1.首先 ...

  4. iOS开发进阶-实现多线程的3种方法

    相关文章链接: 1.多线程简介 2.实现多线程的3种方法 ......待续 前言 在多线程简介中,我已经说明过了,为了提高界面的流畅度以及用户体验.我们务必要把耗时的操作放到别的线程中去执行,千万不要 ...

  5. Visual c++例子,可不使用常规的对话框资源模板的情况下,动态创建对话框的方法

    详细说明:Visual c++例子,可不使用常规的对话框资源模板的情况下,动态创建对话框的方法.该方法可以在运行时在内存中直接建立对话框资源,使用起来更为灵活.适用于多个开发项目共享有界面的公用程序模 ...

  6. 双击CAD对象(具有扩展数据),显示自定义对话框实现方法

    转自:Cad人生 链接:http://www.cnblogs.com/cadlife/p/3463337.html 题目:双击CAD对象,显示自定义对话框实现方法 内容粘贴如下: 主要是绑定两个事件: ...

  7. jenkins 通过shell启动tomcat会随着job完成而被自动关闭的解决方法

    jenkins 通过shell启动tomcat会随着job完成而被自动关闭的解决方法 填入BUILD_ID=随便填什么 原理是:我不知道

  8. JavaScrip——初学(三个常用对话框及方法调用)

    一. 三个常用对话框: 1.都必须写在<scrip></scrip> <body> <font>alert("报错")</fo ...

  9. MFC对话框程序 屏蔽ESC和ENTER键关闭对话框的方法

    http://blog.csdn.net/xgx198831/article/details/6713651 MFC对话框程序  屏蔽ESC和ENTER键关闭对话框的方法 或许还有其它更好的办法,但下 ...

  10. 牛客网Java刷题知识点之多线程同步的实现方法有哪些

    不多说,直接上干货! 为何要使用同步?      java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),  将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避 ...

随机推荐

  1. 直播预览层(AVCaptureVideoPreviewLayer)底层实现

    分析sampleBuffer(帧数据) 通过设置AVCaptureVideoDataOutput的代理,就能获取捕获到一帧一帧数据 [videoOutput setSampleBufferDelega ...

  2. Qml 中实现时间轴组件

    [写在前面] 时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件. 本文将介绍如何使用 Qml 实现一个灵活且可定制的时间轴组件,并探讨其设计思路和实现细节. [正文开始] 效果图 组件概述 ...

  3. Codeforces Round 957 (Div. 3)

    题目链接:Codeforces Round 957 (Div. 3) 总结:E不懂,F差一个set去重 A. Only Pluses fag:枚举 B. Angry Monk fag:模拟 Solut ...

  4. ESP32 idf常用脚本命令及git命令

    一.Linux环境 1.下载并安装相关的工具 ./install.sh 2.添加ESP-IDF工具到PATH中 . ./export.sh 3.打开配置界面 idf.py menuconfig 4.设 ...

  5. 小程序之按钮你不知道的v2

    <button type="primary">提交</button> <button type="primary" loading ...

  6. 从理念到实践,解构HBlock降本增效黑科技!

    "新存储  更轻量" 天翼云存储资源盘活系统HBlock 2024年线上技术分享会来啦! 在2023年HBlock分享会之后 不少小伙伴积极参与了1PB免费尝鲜活动 好评如潮的同时 ...

  7. 蝉联第一,天翼云电脑持续领跑中国DaaS市场!

    近日,IDC发布的<中国虚拟桌面软件及云服务市场半年跟踪报告>数据显示,中国电信天翼云在2023年上半年中国桌面即服务(Desktop as a Service,以下简称"Daa ...

  8. Django-Admin和第三方插件Xadmin

    Admin django内置了一个强大的组件叫Admin,提供给网站管理员快速开发运营后台的管理站点. 站点文档: https://docs.djangoproject.com/zh-hans/2.2 ...

  9. 1 使用ollama完成DeepSeek本地部署

    1 ollama 1.1 什么是ollama ollama是一个开源的 LLM(大型语言模型)服务工具,用于简化在本地运行大语言模型,降低使用大语言模型的门槛,使得大模型的开发者.研究人员和爱好者能够 ...

  10. 发那科FANUC机器人M-710iC减速机维修看这几步

     发那科作为全球知名的工业机器人制造商,其M-710iC型号机器人在工业界享有盛誉.然而,即便是最顶尖的设备也难免会遇到维修问题,其中四轴传动齿轮箱的维修尤为关键.本文将深入探讨发那科FANUC机器人 ...