VC实现广告窗口自动关闭

合集下载

用HOOK函数自动关闭IE广告窗口

用HOOK函数自动关闭IE广告窗口

用HOOK函数自动关闭IE广告窗口在用IE浏览某些网站的时候,网站主页会弹出一些广告网页。

所以每当打开这样的网页时,总得手动关闭广告页,感觉比较麻烦。

那么,是否可以编写程序来判断打开的网页是否是弹出广告,然后自动关闭这些广告,避免每次手动关闭弹出窗口的麻烦?在一些报刊上介绍了某些解决方法,以下就通过钩子(HOOK)函数截获消息的方法进行讨论:1、弹出式广告框也是IE浏览窗口,一般来说,它是一个无菜单、无工具栏窗口。

所以可以在桌面上打开一个窗口时,首先判断该窗口类型是否是“IEFrame”,接着判断IEFrame的子窗口类型“WorkerW”的属性是否是不可见(这是一般弹出式广告窗口的特征),这样就可以向该窗口发出关闭的消息,以上步骤一般能自动关闭大部分弹出广告框。

2、通过WINDOWS编程中的钩子(HOOK)函数解决截获在桌面上打开窗口的消息。

钩子函数的基本原理就是对WINDOWS系统的某些动作注册,当发生这些事件时首先调用预先设置的回调函数,回调函数处理后,再由原来的函数处理。

这里回调函数的作用正是实现1中叙述的功能。

因为这里实现的钩子函数是监视其它进程窗口产生的消息,所以必须用动态链接库实现。

主要代码如下:在动态链接库中,实现钩子回调函数。

LRESULT CALLBACK CallWndProc(int nCode, // hook codeWPARAM wParam, // current-process flagLPARAM lParam // address of structure with message data){CWPSTRUCT *pCwp = NULL;CString strClassName;HWND hWnd = NULL;unsigned long ulStyle = 0;BOOL bIsClosed = FALSE;if (nCode < 0){return CallNextHookEx(gHook, nCode, wParam, lParam);}if (NULL != lParam){pCwp = (CWPSTRUCT *)lParam;if (WM_SHOWWINDOW == pCwp->message){::GetClassName(pCwp->hwnd, strClassName.GetBufferSetLength(128), 128);//IE窗口的类型为IEFrameif (0 == pareNoCase("IEFrame")){hWnd = ::GetWindow(pCwp->hwnd, GW_CHILD);if (NULL == hWnd){bIsClosed = TRUE;}while (NULL != hWnd){::GetClassName(hWnd, strClassName.GetBufferSetLength(127), 127); //IEFrame的子窗口包含窗口类型WorkerWif (0 == pareNoCase("WorkerW")){//若WorkerW不可见,则一般是广告弹出窗口if (0 == (::GetWindowLong(hWnd, GWL_STYLE) & WS_VISIBLE)) {bIsClosed = TRUE;break;}break;}else{bIsClosed = TRUE;}hWnd = ::GetWindow(hWnd, GW_HWNDNEXT);}//若是IE广告弹出窗口,则关闭if (TRUE == bIsClosed){::PostMessage(pCwp->hwnd, WM_CLOSE, 0, 0);}}}}return CallNextHookEx(gHook, nCode, wParam, lParam);}在主程序中,调用DLL中的CallWndProc。

VC创建定时关闭的MessageBox

VC创建定时关闭的MessageBox

1、第一种方法:用微软提供的官方文档From : /kb/181934/en-us/Generally, when you want to display a message box for a limited amount of time, you must implement a regular dialog box that closes itself after a specified amount of time. The problem with this method is that you lose the standard message box functionality that Windows provides.The following example shows how to use the MessageBox function to cre ate a message box that automatically closes after a specified amount of ti me. Note the following about the example:∙The example uses a Windows timer that fires an event after the spe cified amount of time has elapsed.∙When the timer event occurs, the PostQuitMessage API is used to break out of the modal message loop that MessageBox uses.∙Note The WM_QUIT message must be removed from the message queue to prevent it from being retrieved in the main message queue.view plaincopy to clipboardprint?1./***********************************************************************2. THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF3. ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO4. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A5. PARTICULAR PURPOSE.6.7. Copyright 1998 Microsoft Corporation. All Rights Reserved.8.***********************************************************************/9.10./***********************************************************************11.*12.* MsgBox.c13.*14.* Abstract:15.*16.* Sample program to demonstrate how a program can display a17.* timed message box.18.*19.***********************************************************************/20.21.#define STRICT22.#include <windows.h>23.24./***********************************************************************25.*26.* Overview27.*28.* The key to creating a timed message box is exiting the dialog29.* box message loop internal to the message box. Because the30.* message loop for a message box is part of USER, you cannot31.* modify the message loop without using hooks and other such methods.32.*33.*34.* However, all message loops exit when they receive a35.* WM_QUIT message. Additionally, if a nested message loop36.* receives a WM_QUIT message, the nested message loop must break37.* the loop and then re-post the quit message so that the next38.* outer layer can process it.39.*40.* Therefore, you can make the nested message loop exit by41.* calling the PostQuitMessage function. The nested message loop will42.* clean up and post a new quit message. When the MessageBox43.* returns, you peek to see if there is a quit message. If so,44.* it means that the message loop was abnormally terminated.45.* You also consume the WM_QUIT message instead of re-posting it46.* so that the application continues to run.47.*48.* Essentially, you have "tricked" the nested message loop into49.* determining that the application is terminating. When the quit message50.* returns, you consume the quit message. This method effectively cancels51.* the fake quit message that you generated.52.*53.***********************************************************************/54.55./***********************************************************************56.*57.* Global variables58.*59.***********************************************************************/60.61.HWND g_hwndTimedOwner;62.BOOL g_bTimedOut;63.64./***********************************************************************65.*66.* MessageBoxTimer67.*68.* The timer callback function that posts the fake quit message.69.* This function causes the message box to exit because the message box70.* has determined that the application is exiting.71.*72.***********************************************************************/73.void CALLBACK MessageBoxTimer(HWND hwnd,74.UINT uiMsg,75.UINT idEvent,76.DWORD dwTime)77.{78. g_bTimedOut = TRUE;79. if (g_hwndTimedOwner)80. EnableWindow(g_hwndTimedOwner, TRUE);81. PostQuitMessage(0);82.}83.84./***********************************************************************85.*86.* TimedMessageBox87.*88.* The same as the standard MessageBox, except that TimedMessageBox89.* also accepts a timeout. If the user does not respond within the90.* specified timeout, the value 0 is returned instead of one of the91.* ID* values.92.*93.***********************************************************************/94.int TimedMessageBox(HWND hwndOwner,95.LPCTSTR pszMessage,96.LPCTSTR pszTitle,97.UINT flags,98.DWORD dwTimeout)99.{100.UINT idTimer;101.int iResult;102.103. g_hwndTimedOwner = NULL;104. g_bTimedOut = FALSE;105.106. if (hwndOwner && IsWindowEnabled(hwndOwner))107. g_hwndTimedOwner = hwndOwner;108.109. // Set a timer to dismiss the message box.110. idTimer = SetTimer(NULL, 0, dwTimeout, (TIMERPROC)MessageBoxT imer);111.112. iResult = MessageBox(hwndOwner, pszMessage, pszTitle, flags); 113.114. // Finished with the timer.115. KillTimer(NULL, idTimer);116.117. // See if there is a WM_QUIT message in the queue if we timed out.118. // Eat the message so we do not quit the whole application.119. if (g_bTimedOut)120. {121. MSG msg;122. PeekMessage(&msg, NULL, WM_QUIT, WM_QUIT, PM_REMOVE); 123. iResult = -1;124. }125.126. return iResult;127.}128.129./******************************************************** ***************130.*131.* WinMain132.*133.* Program entry point. Demonstrate TimedMessageBox().134.*135.******************************************************** ***************/136.int WINAPI WinMain(HINSTANCE hinst,137.HINSTANCE hinstPrev,138.LPSTR pszCmdLine,139.int nCmdShow)140.{141.142.UINT uiResult;143.144. // Ask the user a question. Give the user five seconds to 145. // answer the question.146. uiResult = TimedMessageBox(NULL,147. "Does a triangle have three s ides?",148. "Quiz",149. MB_YESNO,150. // NULL first parameter is important.151. 5000);152.153. switch (uiResult) {154. case IDYES:155. MessageBox(NULL,156. "That's right!",157. "Result",158. MB_OK);159. break;160.161. case IDNO:这种山寨版的效果,确实看起来有些猥琐....3、源码下载(SDK、MFC共两种)官方下载:/source/1808835网盘下载:/files/c07e4600-ce99-11de-82ad-001422 1b798a/。

Vc++6.0 定时器的创建和关闭

Vc++6.0  定时器的创建和关闭

Vc++6.0 定时器的创建和关闭如下实现的是:在工程运行后,每5秒定时弹出一个MessageBox窗口MFC工程dialog中的使用:(工程创建:打开VC6.0---菜单file---new---projects----MFC AppWizard(exe) 工程命名为:XS )*****************在进入Dialog画面时,设置定时器::SetTimer(~~~~~~)*****************如下是在CXSDlg类中成员函数OnInitDialog设置************************** CXSDlg::OnInitDialog函数里{::SetTimer(this->hWnd,8,5000,NULL) //(this->hWnd为当前Dialog)(8为ID)(5000为5秒),NULL~~~~~ return TRUE;}***********以下:菜单view---ClassWizard---会弹出一个MFC ClassWizard画面,在画面Messages:中找到WM_TIMER选中后---MFC ClassWizard画面右手边单击Add Function---单击下面的Edit Codes************************************ 此后会进入到:void CTestkbDlg::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call default //在这里写入每一段时间里你想实现的代码就可以,现在,我只实现弹出“你好!XS”MessageBox("你好!XS");CDialog::OnTimer(nIDEvent);}**************************************运行试试看~~你会发现,一进入介面,就每5秒弹出一个窗口“你好!XS”************************如果你想实现按下一个控件BUTTEN来实现定时器,可以把::SetTimer(this->hWnd,8,5000,NULL) 这个写入到你的BUTTEN控件函数中,就可以实现,记住,在用完Timer定时器后用KillTimer()把定时器关掉o(^_^)o*************************************************** ******************************************************* **************************************************** **************************最后,如果你不是用ClassWizard来创建OnTimer()函数,而是自己创建:1. CXSDlg.h文件中,写入afx_msg void OnTimer(UINT nIDEvent);声明的,2. CXSDlg.cpp文件:写入OnTimer()函数代码段的,3. 记得也要在CXSDlg.cpp文件中的如下位置写入 ON_WM_TIMER():~~~~~~~~~~~~~~~~~~~~~~~~~~~~BEGIN_MESSAGE_MAP(CTestkbDlg, CDialog)//{{AFX_MSG_MAP(CTestkbDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_TIMER()//}}AFX_MSG_MAPEND_MESSAGE_MAP()。

VC显示,关闭,销毁模态与非模态对话框技巧

VC显示,关闭,销毁模态与非模态对话框技巧
hWnd :将被销毁的窗口的句柄。
返回值:如果函数成功,返回值为非零:如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
备注:一个线程不能使用本函数销毁别的线程创建的窗口。如果这个窗口是一个不具有WS_EX_NOPARENTNOTIFY 样式的子窗口,则销毁窗口时将发WM_PARENTNOTIFY 消息给其父窗口。
dlg->Create(IDD_GENERAL_CONTROL);
dlg->ShowWindow(SW_SHOW);
二、关闭对话框:
1.CDialog::OnOK(); //确定按钮按下 CDialog::OnCancel(); //取消按钮被按下
2.CDialog::DestoryWindow();
Windows CE: 本函数将不发送 WM_NCDESTROY 消息.
EndDialog
函数功能:该函数清除一个模态对话框,并使系统中止对对话框的任何处理。
函数原型:BOOL EndDialog(HWND hDlg,int nResult);
参数:
hDlg:表示要被清除的对话框窗口。
NResult:指定从创建对话框函数返回到应用程序的值。
返回值:如果函数调用成功,则返回值为非零值;如果函数调用失败则返回值为零。若想获得错误信息请调用GetLastError函数。
备注:由DialogBox,DialogBoxParam、DialogBoxlndirect和DialogBoxlndirectParam函数创建的对话框一定要用EndDialog函数来清除。应用程序从对话框应用程序内部调用EndDialog函数,该函数不能为其他目的而供使用。对话框应用程序可以在任何时间调用EndDialog函数;甚至在WM_INITDIALOG消息处理过程中。如果应用程序在WM_INTDIALOG消息处理过程中调用该函数,则对话框在显示和输入焦点被设置之前对话框被清除。EndDialog函数并不立即清除对话框。而是设置一个标志,并且允许对话框应用程序把控制权返回系统。系统在试图从应用程序队列检索下一个消息之前检测标志。如果已经设置了标志则系统中止消息循环,清除对话框,且用nResUlt中的值作为从创建对话框的函数中返回的值。

C# 窗体的关闭及移动

C# 窗体的关闭及移动

C# 窗体的关闭及移动首先,设置窗体的背景从而建立窗体形状。

1.在窗体设计器中选中窗体使之获得焦点。

2.在属性对话框中进行如下设置:●将FormBorderStyle属性设置为None。

该属性去掉了程序的标题栏,同时也除去了标题栏的功能,不过我在后面还会向大家介绍如何添加代码以恢复这些功能的。

●将BackgroundImage属性设置为你创建的位图文件。

你不必在工程中添加该文件,因为你一旦指定了该文件,它就会自动被添加到工程中。

●将TransparencyKey属性设置为位图文件的背景颜色值(在本例中是蓝色)。

该属性使得位图的背景即上图中的蓝色部分不可见,从而窗体就呈现出一个不规则的椭圆形。

特别要注意的是:如果监视器的颜色深度设置大于 24 位,则不管 TransparencyKey 属性是如何设置的,窗体的非透明部分都会产生显示问题。

若要避免出现这种问题,请确保“显示”控制面板中的监视器颜色深度的设置小于 24 位。

当开发具有这种透明功能的应用程序时,请牢记应使您的用户意识到此问题。

3.保存工程。

先Ctrl+S保存,然后按Ctrl+F5可以运行此程序。

(注:因为没有标题栏,所以你可以通过Alt+F4来关闭程序)将FormBorderStyle属性设置为None后,程序的标题栏就被去掉了。

这样,为了获得原来标题栏的功能,我们必须手动添加代码。

下面我就向大家介绍如何添加代码实现关闭功能以及移动窗体的功能。

实现窗体的关闭及移动1.往窗体上拖放一个按钮控件。

2.在属性对话框中,将该控件的Text属性设置为“关闭”。

3.双击按钮添加一个Click事件处理函数。

4.在代码编辑器中添加如下代码:。

c语言关闭运行窗口的函数

c语言关闭运行窗口的函数

c语言关闭运行窗口的函数C语言是一种广泛应用于程序开发领域的编程语言,具有灵活、高效的特点。

在C语言中,有时候我们需要通过关闭运行窗口的方式来结束程序的运行。

本文将介绍C语言中关闭运行窗口的函数。

在C语言中,关闭运行窗口的函数是`exit()`函数。

该函数的原型如下:```cvoid exit(int status);````exit()`函数可以终止程序的执行,并返回一个状态码给操作系统。

通过调用`exit()`函数,我们可以在程序执行的任意位置终止程序的运行。

在调用`exit()`函数时,我们可以传递一个整数值作为参数,这个整数值可以作为程序的返回状态码。

在大多数操作系统中,返回状态码为0表示程序正常结束,非0值表示程序异常结束。

下面是一个使用`exit()`函数关闭运行窗口的简单示例:```c#include <stdio.h>#include <stdlib.h>int main() {printf("程序开始执行...\n");// 执行一些操作printf("程序将要结束...\n");exit(0); // 使用exit()函数结束程序// 下面的代码不会被执行printf("程序已经结束...\n");return 0;}```上述示例中,程序会先输出"程序开始执行...",然后执行一些操作,最后输出"程序将要结束..."。

在调用`exit(0)`后,程序会立即终止运行,不会执行后面的代码。

所以最后的输出语句"程序已经结束..."不会被执行。

需要注意的是,`exit()`函数不会立即关闭运行窗口,而是通知操作系统程序已经结束。

最终关闭运行窗口的动作由操作系统负责。

在调用`exit()`函数后,程序会返回到操作系统,然后操作系统会关闭运行窗口。

VC显示关闭销毁模态与非模态对话框技巧

VC显示关闭销毁模态与非模态对话框技巧

VC显示关闭销毁模态与非模态对话框技巧VC++是一种用于Windows平台开发应用程序的集成开发环境,用于构建图形用户界面和控制应用程序的行为。

在VC++中,对话框是一种常用的用户界面元素,可以用于显示和获取用户输入。

在使用对话框时,要注意对话框的显示、关闭和销毁。

1.显示对话框在VC++中,显示一个对话框可以通过以下几种方式实现:a. 使用DoModal函数DoModal函数是CDialog类的一个成员函数,用于显示对话框,并返回对话框的返回值。

例如,可以使用下面的代码显示一个对话框:CMyDialog dlg;dlg.DoModal(;b. 使用Create函数Create函数是CDialog类的另一个成员函数,用于创建对话框,并显示它。

使用Create函数时,需要先调用Create函数创建对话框,然后调用ShowWindow函数显示对话框。

以下是使用Create函数显示对话框的示例代码:CMyDialog dlg;dlg.Create(IDD_MYDIALOG);dlg.ShowWindow(SW_SHOW);c.使用模态对话框模态对话框是一种阻塞式对话框,显示模态对话框时,在对话框关闭之前,用户无法与其他应用程序进行交互。

要显示一个模态对话框,可以通过调用DoModal函数,并传递对话框的资源ID来实现。

以下是使用模态对话框的示例代码:CMyDialog dlg;INT_PTR nResponse = dlg.DoModal(;2.关闭对话框在VC++中,可以使用以下几种方式关闭对话框:a. 使用EndDialog函数EndDialog函数是CDialog类的一个成员函数,用于关闭对话框,并返回对话框的返回值。

以下是使用EndDialog函数关闭对话框的示例代码:OnOKEndDialog(IDOK);b.使用DestroyWindow函数DestroyWindow函数是CWnd类的一个成员函数,用于销毁窗口,并关闭对话框。

基于VC.Net实现弹出式菜单的界面编程技术

基于VC.Net实现弹出式菜单的界面编程技术

如果 Ve i w类检测到没对该 菜单项 消息做 响应 ,则 V e i w类把菜
单 项 消 息 交 由文 档 类 D c类 进 行 处 理 ;如 果 D c 检 测 到 D c o o类 o 类 中 也 没 对 该 菜 单 项 消 息 做 响 应 ,则 D c 又把 该 菜单 项 消 息 o类 交 还给 Ve iw类 , 由 Ve i w类 再 交 还 给 C iFa e 处 理 。 如 Man rm 类 果 C an r 类 查 看 到 C an rm M iFa me M i a e类 中 也 没 对 该 消 息 做 响 F 应 ,则 最 终 交 给 A p类 进 行 处 理 。 p
界 i 酊鲻嗣鏊技 术 的 .

管建和




针 对一 个 应 用程序 的边框 、客 户 区和对 话 框 中的控 件 上 实现 弹 出式 菜单 的 编程 是
实现 复 杂应 用 系统 用 户界 面 必 须掌握 的 编程 技 能 。本 文通 过 一 个示例 程 序 给 出多 种 弹 出式 菜单 的 实现过 程和 步 骤 ,讨论 实现 G I用户界 面一 弹 出式 菜单 的技 术 细 D
项 消 息 的是 C i rm Ma Fa e框 架 类 , C i rm n Ma Fa e框 架 类 将 会 把 菜 n 单 项消息交给它的子窗 口 Ve i w类 , 由 Ve i w类 首 先 进 行 处 理 ;
的用 户 界 面 。菜 单 、工 具 栏 和状 态 栏 是 Wi o s应用 程 序 中 不 n w d 可 缺 少 的界 面 元 素 ,它 们 的风 格 和外 观 有 时直 接影 响 用 户 对 软 件 的评 价 ,如 果 想 编 写 一 个 美 观 、简 洁 、易 于 使 用 的 Widw no s 应用 程 序 ,就 必 须 认 真 地设 计 以上 三 个 界 面 元 素 。Wi o s n w 应 d

vbscript编写的定时自动关闭的提示窗口函数

vbscript编写的定时自动关闭的提示窗口函数

vbscript编写的定时自动关闭的提示窗口函数VBScript是一种微软开发的脚本语言,它被用于在Windows操作系统中进行自动化任务,例如管理文件、处理文本、执行系统操作等。

在VBScript中,我们可以使用WScript对象创建和控制Windows脚本主机,包括显示消息框、执行命令等。

定时自动关闭提示窗口是一种常见的需求,可以通过VBScript编写实现。

以下是一个示例代码,实现了在指定时间后关闭提示窗口:```'设置消息框的内容和标题message = "这是一个自动关闭的提示窗口!"title = "提示窗口"'设置关闭窗口的延迟时间(毫秒)delay = 5000 '延迟5秒关闭窗口'创建消息框Set objShell = WScript.CreateObject("WScript.Shell")objShell.Popup message, delay / 1000, title, 0 + 64 ' 0表示只有确定按钮,64表示显示默认的信息图标'等待指定的延时时间WScript.Sleep delay'关闭消息框Set objShell = Nothing```以上代码中,首先设置了消息框的内容和标题,然后通过创建WScript.Shell对象来创建一个消息框。

`Popup`方法用于显示一个消息框,该方法有四个参数:消息文本、显示时间(以秒为单位)、标题和选项。

在示例代码中,我们设置了`0 + 64`选项,表示只显示确定按钮并显示默认的信息图标。

接下来,通过`WScript.Sleep`方法等待指定的延时时间,这里使用了`delay`变量,它表示延时时间(毫秒)。

最后,通过将`objShell`对象设置为`Nothing`来关闭消息框。

如果你想要自定义消息框的显示时间、按钮类型、图标等,可以根据需要调整代码中的参数。

VC++控制台程序不弹出窗口的方法

VC++控制台程序不弹出窗口的方法

VC++控制台程序不弹出窗口的方法大家都知道,当编写一个win32 console application时,当运行此类程序的时候默认情况下会有一个类似dos窗口的console窗口,但是有的时候我们只想在程序中运行一段功能代码,不希望显示这个console窗口,让代码执行完毕之后程序自动退出.下面就介绍一下,如何隐藏win32 console application的console窗口因为此种方法是通过设置编译器的链接开关来实现,所以让我们来看一下编译器的链接开关选项(也就是linker选项).首先我们来看一下linker的 /subsystem 选项该选项的语法形式如下:/subsystem:{console|efi_application|efi_boot_service_driver| efi_rom|efi_runtime_driver|native|posix|windows|windowsce} [,major[.minor]]这个链接选项告诉操作系统如何运行可执行文件console:win32 字符模式应用程序,此种类型的应用程序在运行的时候会产生一个类似dos窗口的控制台窗口,如果在应用程序的主函数为main()或者wmain(),在默认情况下该应用程序就是一个控制台应用程序extensible firmware interface和cpu具体架构相关的一个参数选项,并不常用,在这里暂不详细介绍.如果对此有兴趣的可以访问intel主页来查看相关内容native;设备驱动器选项,如果/driver:wdm选项被设定的话,该链接选项(native)就为默认选项posix:在windows nt 种运行在posix子系统上的应用程序windows:该类型的应用程序不产生console窗口,该类型的应用程序的窗口由用户自己创建,简而言之就是一个标准的win32 application,其入口地址为winmain()函数或者wwinmain()函数的地址如果你在应用程序种定义的主函数为winmain或者wwinmain,在默认情况下该应用程序就是一个win32 application !windowsce:运行在windows ce上的应用程序major and minor (optional):主版本号和次版本号,该选项为可选,该选项为0~65535之间的十进制整数从上面可以看出如果我们建立一个win32 console application的话,linker的/subsystem选项应该为console,可以在vc开发环境的project->setting->link->project option中看到!接下来我们再看看应用程序是如何运行的!我们知道用vc编写的程序,运行的时候是需要 cc 运行库支持的.当我们运行一个c/c 程序的时候链接器会首先寻找应用程序的启动函数,例如:如果你建立了一个console程序的话,编译器得链接开关会是以下这种形式/subsystem:console /entry:maincrtstartup (ansi)/subsystem:console /entry:wmaincrtstartuup (unicode)如果你建立了一个win32 application,编译器得链接开关则会是一下形式/subsystem:windows /entry:winmain (ansi)/sbusystem:windows /entry:wwinmain (uincode)上面的两种形式可以再project->setting->link->project option 中看到上面的subsystem和entry并不需要都设置,如果你只设置了/subsystem:console的话,那么默认的entry开关在默认情况下应为/entry:maincrtstartup反之,如果你在应用程序中定义了main函数的话,默认情况下,你的/subsystem开关应该为/system:console在默认情况下/subsystem 和/entry开关是匹配的,也就是console对应maincrtstartup或者wmaincrtstartupwindows对应winmain或者wwinmain但是我们也可以通过手动改动的方式使他们不匹配例如我们可以这样改动#pragma comment( linker, /subsystem:windows /entry:maincrtstartup ) // 设置入口地址int main(int argc, char* argv[]){messagebox(null, hello, notice, mb_ok);return 0;}在默认情况下链接器看到/subsystem下是windows选项的时候,它会自动寻找winmain或者wwinmain但我们强制指定入口地址,这样运行程序的时候默认的console窗口就会隐藏!上面是在代码中使用#pragma指令来设置,还有一种就是直接在开发环境的project->setting->link->project option中手工改动!写了这么多,自己都有点感觉乱,没有办法,以前没写过什么文章,所以措辞可能不太好,希望大家见谅。

广告栏 关闭规则

广告栏 关闭规则

广告栏关闭规则
一、明确关闭时间
1.1本规则适用于在我们的平台上运行的广告栏。

1.2广告栏的关闭时间将根据具体的情况而定,一般将在平台发布提前指定的时间段内执行。

二、确定关闭方式
2.1广告栏的关闭将通过平台提供的广告栏管理界面进行操作。

2.2关闭方式包括立即关闭和定时关闭两种方式。

立即关闭即点击关闭按钮后广告栏立即停止展示;定时关闭即设置特定的时间段后,广告栏自动停止展示。

三、确认关闭步骤
3.1用户通过广告栏管理界面选择需要关闭的广告栏。

3.2选择关闭时间,可以选择立即关闭或定时关闭,并设置具体的关闭时间段。

3.3确认关闭操作,系统将记录关闭操作并按照设置的时间段停止广告栏的展示。

四、定义异常处理
4.1若用户在关闭广告栏的过程中遇到任何异常情况,可以及时联系我们的技术支持团队进行咨询和处理。

4.2若由于系统原因导致广告栏无法正常关闭,我们将尽快修复问题,并在问题解决后重新执行关闭操作。

五、设定权限要求
5.1只有具有相应权限的用户才能进行广告栏的关闭操作。

5.2不同权限的用户拥有不同的操作权限,包括创建、编辑、删除等操作。

六、规范关闭状态
6.1广告栏关闭后,其状态将被标记为“已关闭”。

6.2所有已关闭的广告栏将在界面上显示为不可点击状态,用户无法再次将其打开。

七、禁止恶意关闭
7.1用户不得以任何恶意手段关闭其他用户的广告栏。

7.2若发现恶意关闭行为,我们将对此进行处理,并可能暂停或终止涉及用户的权限。

广告栏 关闭规则

广告栏 关闭规则

广告栏关闭规则广告栏关闭规则是指在网页或应用程序中的广告横幅上提供给用户关闭该广告的功能或按钮。

这样的功能可以提高用户体验,让用户更好地控制自己的浏览体验。

1. 明显且易于寻找的关闭按钮:广告栏应提供一个明显且易于寻找的关闭按钮,用户可以直观地感知到其存在。

该按钮的位置应该在广告栏的顶部、底部或旁边,以便用户一眼就能找到。

2. 稳定的关闭按钮位置:关闭按钮应该在不同页面或浏览器窗口中保持相对稳定的位置,这样用户就能习惯性地找到它。

如果关闭按钮总是在不同的位置出现,用户将难以找到并关闭广告。

因此,建议将关闭按钮放置在页面的固定位置,例如右上角或右下角。

3. 大型关闭按钮:为了方便用户在不小心点击广告时关闭它,建议将关闭按钮设计得比较大。

这样即使用户误触广告,也能够快速找到并关闭它。

4. 可回收的广告栏:在一些情况下,广告栏可以通过拖动或折叠的方式进行关闭。

用户可以将广告栏拖回到屏幕边缘,或者将其折叠成一个较小的图标,从而将其暂时关闭并腾出更多的浏览空间。

这种方式可以在用户需要时再次打开广告栏,避免了不必要的干扰。

5. 永久关闭广告的选项:一些用户对特定广告或广告类型可能非常反感,因此广告栏还应提供一个选项让用户永久关闭某个广告或某类广告。

这样,用户不必每次都关闭广告,提高了整体的使用体验。

6. 提供反馈选项:在某些情况下,用户关闭广告可能是因为对广告内容或形式的不满意。

广告栏可以提供一个反馈选项,让用户可以表达他们的不满或提出建议。

这样,广告主就能够获得反馈信息并根据用户的反馈进行调整,提升广告的质量。

7. 自动关闭选项:如果广告栏上的广告是可以自动关闭的,建议提供一个设置选项,让用户可以自行选择是否允许自动关闭。

有时,用户可能对某些类型的广告感兴趣,希望能够更长时间地浏览或了解。

因此,给予用户这样的选择权,能够充分尊重用户的个人喜好和习惯。

总结起来,广告栏关闭规则可以通过提供明显且易于寻找的关闭按钮、稳定的关闭按钮位置、大型关闭按钮、可回收的广告栏、永久关闭广告的选项、提供反馈选项以及自动关闭选项等方式来提高用户体验。

一种暂时关闭Windows弹窗函数程序的设计实现

一种暂时关闭Windows弹窗函数程序的设计实现

一种暂时关闭Windows弹窗函数程序的设计实现张晶瑜[1]陈僴璀[2]([1]成都信息工程大学四川·成都610225;[2]成都中车电机有限公司四川·成都610051)摘要本文介绍了一种在程序运行过程当中,暂时关闭Windows系统中MessageBox()弹窗函数的方法。

该方法能够处理程序运行过程中Windows弹窗函数弹出过多导致的程序运行效率低下问题,进而实现程序运行过程中的无人值守。

关键词MessageBox弹窗函数程序中图分类号:TP311文献标识码:A0引言MessageBox()消息框函数是指user32.dll中MessageBox ()API提供的弹出消息提示框,其作用主要为显示文本消息。

某些程度上,MessageBox()函数还明确了程序运行的步骤,促进了使用者对程序本身的了解,也使得使用者与程序开发者之间的交流变得更加顺畅。

然而,MessageBox()函数的使用,有时也会给程序的运行效率带来一些影响。

1研究背景和意义计算机用户经常使用的应用软件(如办公软件、行业专用软件)通常是软件开发商针对某一类用户的普遍需求所设计。

如遇用户有一些特殊需求,应用软件不能很好满足时,用户自己通常会在原有软件基础上进行二次开发。

为了便于用户进行二次开发,部分应用会软件设计一些API接口,供二次开发用户调用。

在二次开发过程中,往往会遇到MessageBox API 所带来的一些负面影响。

举例如下,假设有一个运行于Windows系统中的应用软件APP1.0,开发商为其设计了一个API,可供用户使用。

API 所属模块DLL文件为“C:\APP1.0\abcapi.dll”,API对应函数名称为Function,该API的主要功能是对指定文件进行特定操作(如读取文件内容、修改文件内容)。

该API声明如下:void Function(lpsz path);其中path代表需要处理文件的完整路径。

VC++编程实现广告窗口自动关闭

VC++编程实现广告窗口自动关闭

VC++编程实现广告窗口自动关闭
青岛郎锐
【期刊名称】《软件》
【年(卷),期】2005(000)010
【摘要】我们在上网浏览时,有时访问到某些网站的网页时会自动弹出一些广告窗口,甚至有不少个人主页为了利用网络广告来赚钱一下同时弹出几个甚至十几个广告窗口。

这些窗口一个一个的关掉十分麻烦,而且如果不关的话又会占用大量系统资源,本文就对如何通过软件编程来实现对广告窗口的自动关闭进行介绍,以期能起到抛砖引玉之效。

【总页数】1页(P89)
【作者】青岛郎锐
【作者单位】无
【正文语种】中文
【中图分类】TP393.092
【相关文献】
1.在WinPE环境中获取计算机名和IP地址的VC++编程实现 [J], 宋伟东
2.VC++编程实现多模式近似匹配 [J], 张研;韩露
3.用VC++编程实现Web文本资料的抓取 [J], 马创新
4.VC++编程实现生成任意形状的窗口程序 [J], 王鹏程
5.下载进程窗口自动关闭 [J],
因版权原因,仅展示原文概要,查看原文内容请购买。

c语言关闭窗口代码

c语言关闭窗口代码

c语言关闭窗口代码在C语言中,关闭窗口通常是由图形用户界面(GUI)库或操作系统提供的功能。

如果你正在使用图形界面库,比如GTK、Qt、WinAPI等,关闭窗口的代码会依赖于具体的库和平台。

以下是一个使用C语言和WinAPI关闭窗口的简单示例:```c#include <windows.h>LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {switch (uMsg){case WM_CLOSE:DestroyWindow(hwnd);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}return 0;}int main(){// 注册窗口类WNDCLASS wc = { 0 };wc.lpfnWndProc = WindowProc;wc.hInstance = GetModuleHandle(NULL);wc.lpszClassName = L"MyWindowClass";RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindow(L"MyWindowClass",L"My Window",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,800, 600,NULL, NULL,GetModuleHandle(NULL),NULL);// 显示窗口ShowWindow(hwnd, SW_SHOWNORMAL);UpdateWindow(hwnd);// 消息循环MSG msg;while (GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return 0;}```在这个例子中,当用户点击窗口右上角的关闭按钮时,`WM_CLOSE`消息将被捕获,窗口会被销毁。

vc++之定制窗口

vc++之定制窗口

VC++6.0定制窗口的方法VC++6.0是Microsoft新近推出的可视化C++集成开发环境。

它在继承以前VC++的基础上增加了许多新的功能,用于支持Win32平台应用程序、服务程序和控件的开发。

VC++5.0提供了强大、快捷的编程工具,其中最基本的是三个导航:AppWizard用于程序框架的生成,AppStudio用于资源的编辑,ClassWizard用于类的编辑和管理。

其中,窗口、菜单等无需用户编写程序,而由系统自动生成。

但在许多情况下,用户要设置自己希望的窗口(即定制窗口)。

一、如何在多文档界面下去掉开始的子窗口在多文档界面下,自动生成一个新的子窗口,而一个实际的应用系统往往是由用户操作后再生成新的窗口。

为了去掉开始的子窗口,可在应用程序文件分析命令行的语句CcommandLineInfo cmdInfo;ParseCommandLine(cmdInfo);后加入:cmdInfo.m_nShellCommand=CcommandLineInfo::FileNothing;去掉子窗口后,就只剩下主框架窗口了。

因为在多文档界面中,系统生成两个菜单:一个是用户的菜单,另一个是系统主框架菜单。

通常用户工作在用户菜单。

为了保证菜单界面不变,可修改主框架菜单资源,使其与用户菜单保持一致。

二、修改窗口标题栏在缺省情况下,窗口标题栏中显示的文档名为文件名。

若要在标题栏显示一个长字符串,而又不修改文件名,则可将项目工作区转换到Resource View面版,选择串表(StringTable)资源,在StringTable中双击IDR-MAIN-FRAME项,caption中显示一字符串xx\n\yy......,将第一个参数修改为用户自己希望见到的主窗口标题即可。

三、修改主框架窗口、子窗口及其显示性质可通过覆盖CWnd的成员函数PreCreateWindow来修改主窗口和子窗口。

PreCreateWind ow函数在即将创建窗口前被调用,函数原型为:Virtual BOOL PreCreateWindow函数(CREATESTRUCT cs)。

C#实现winform自动关闭MessageBox对话框的方法

C#实现winform自动关闭MessageBox对话框的方法

C#实现winform⾃动关闭MessageBox对话框的⽅法本⽂实例讲述了C#实现winform⾃动关闭MessageBox对话框的⽅法。

分享给⼤家供⼤家参考。

具体实现⽅法如下:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;namespace WindowsApplication1{public partial class AutoDeleteMessageBox : Form{[DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)]private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);[DllImport("user32.dll", CharSet = CharSet.Auto)]public static extern int PostMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);public const int WM_CLOSE = 0x10;public AutoDeleteMessageBox(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){StartKiller();MessageBox.Show("3秒钟后⾃动关闭MessageBox窗⼝", "MessageBox");}private void StartKiller(){Timer timer = new Timer();timer.Interval = 3000; //3秒启动timer.Tick += new EventHandler(Timer_Tick);timer.Start();}private void Timer_Tick(object sender, EventArgs e){KillMessageBox();//停⽌Timer((Timer)sender).Stop();}private void KillMessageBox(){//按照MessageBox的标题,找到MessageBox的窗⼝IntPtr ptr = FindWindow(null, "MessageBox");if (ptr != IntPtr.Zero){//找到则关闭MessageBox窗⼝PostMessage(ptr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);}}}}希望本⽂所述对⼤家的C#程序设计有所帮助。

C#弹出窗体教程

C#弹出窗体教程

弹出窗口杀手是一个可以自动关闭IE弹出窗口的程序,它工作在系统的托盘中,按照一定的间隔来检测IE窗口,然后关闭弹出窗体。

最后,还提供了用热键来杀掉弹出窗口的功能。

虽然已经有类似的用C++写的程序,但是本文讲述的是用C#来实现这些功能,并且本文所讲的方案在查找窗口上的方法要比更快一些。

这是一个崭新的话题,在Internet上我们还可以看到许多类似的程序。

但是我也还是要借这个机会来讲述一些下面的技术在C#中如何实现:系统托盘程序切换计时控件查找窗口系统热键生成一个系统托盘程序首先,产生一个新的C# Windows Form程序,将NotifyIcon控件从工具箱中拖到窗体中,如下图所示:在C# windows Form程序中添加托盘为了保证系统托盘的图标和应用程序的图标一致,我们用一个共同的图标文件a.ico来设置系统托盘的图标和应用程序的图标。

为了使程序不显示在工具栏上,我们可以设置窗体的visible属性为false. 这个可以在窗体属性窗口中直接实现。

this.ShowInTaskbar = false;到目前为止,系统托盘已基本好了,但是我们还没有设置右键菜单,也没有使程序显示和隐藏的功能。

程序切换首先,程序的主窗体可以根据不同的状态来选择显示或者是隐藏,除此之外,我们可以用WindowState设置窗体的状态:public void HideApp(){this.WindowState = FormWindowState.Minimized;Hide();}public void ShowApp(){Show();this.WindowState = FormWindowState.Normal;}一个非常有趣的功能是让用户关闭窗体的时候程序并不是退出,为了实现这个功能,我们必须要重写窗体的OnClosing事件。

protected override void OnClosing(CancelEventArgs e){// 用最小化来代替关闭操作de.Cancel = true;// 最小化,并且隐藏窗体this.WindowState = FormWindowState.Minimized;Hide();}当然,我们必须要提供一个必须的退出方法.这个可以在托盘的右键菜单的exit中实现,private void menu_App_Exit(object sender,System.EventArgs e){NativeWIN32.UnregisterHotKey(Handle,100);//隐藏托盘notifyIcon1.Visible = false;Application.Exit();}添加右键菜单添加一个右键菜单和添加托盘基本一样,从工具箱中添加context menu就可以.右键菜单在你鼠标右键按下的时候是会自动弹出的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、引言
我们在上网浏览时,有时访问到某些网站的网页时会自动弹出一些广告窗口,甚至有不少个人主页为了利用网络广告来赚钱一下同时弹出几个甚至十几个广告窗口。

这些窗口一个一个的关掉十分麻烦,而且如果不关的话又会占用大量的系统资源,所以不少人对此深恶痛绝,作为程序员可以利用自身技术优势根据自己的实际需要编制一些很适合自己的小工具。

因此本文就对如何通过软件编程来实现对广告窗口的自动关闭进行介绍,以期能起到抛砖引玉之效。

二、程序设计思路与实现
首先要分析一下广告窗口的一般特性。

广告窗口一般是通过主页面里的Javascript脚本或VBScript 脚本语言来动态弹出的,其实质还是一个IE窗口。

但绝大多数窗口在创建出来后是没有菜单,工具条等其它东西的,因此我们可以先搜寻IE窗口,然后判断其窗口是否有菜单和工具条等东西,如果没有就认为是广告窗口了,虽然这样的判断不是十分的严格,但从实际使用情况来看虽然有时会误关一些正常窗口,但发生的几率是相当小的。

完全可以忽略。

而且这种情况多发生在聊天室中,所以只需在聊天之前将其关闭,只在浏览网页的时候运行程序就一般不会发生误操作了。

程序的实现并不复杂,由于程序运行起来后任意时刻弹出的广告窗体都要随时关闭,所以就应当通过设置定时器,每隔一段时间就搜寻以下当前是否有广告窗口,如果有就将其关闭,否则继续监视。

因此可以在程序的初始化入口函数中用SetTimer()函数启动定时器。

下面就结合实际代码对部分关键代码进行讲解:
从第一个窗口开始对每一个窗口进行枚举搜索,如果第一个窗口存在那么就可以通过在while循环里的GetWindow(GW_HWNDNEXT);来搜寻下一个窗口,并在其内判断是否是广告窗体,直至搜寻完最后一个窗体为止:
CWnd* pMainWnd = AfxGetMainWnd()->GetWindow(GW_HWNDFIRST);
while (pMainWnd)
{
……
pMainWnd = pMainWnd->GetWindow(GW_HWNDNEXT);
}
对于判断是否是广告窗口,可以用GetClassName()函数获取窗口类型来判断是否是IE窗口:
CString strClassName;
GetClassName(pMainWnd->m_hWnd,strClassName.GetBufferSetLength(100),100);
对于那些不是IE类型的窗体根本不用加以考虑,可以将刚才得到的strClassName窗口类型同"IEFrame"进行比较来进行判断,如果是IE窗口才可以进行下一步的判断:
//根据句柄获取子窗口指针
CWnd* pChildWnd=CWnd::FromHandle(FindWindowEx(pMainWnd->m_hWnd,NULL,"Worker",NULL));
if(!pChildWnd)
pChildWnd=CWnd::FromHandle(FindWindowEx(pMainWnd->m_hWnd,NULL,"WorkerA",NULL));
如果子窗口存在,用类似的方法获取下一个子窗口指针:
CWnd*
pChildNextWnd=CWnd::FromHandle(FindWindowEx(pMainWnd->m_hWnd,pChildWnd->m_hWnd,"Worker",N ULL));
if(!pChildNextWnd)
pChildNextWnd=CWnd::FromHandle(FindWindowEx(pMainWnd->m_hWnd,pChildWnd->m_hWnd,"WorkerA", NULL));
如果该窗口存在,那么下步只要验证当前窗口可视就可以断定其的确属于广告窗口,可以通过GetWindowLong()获取到当前的窗口风格,然后通过逻辑运算可以判断出当前窗口是否具有WS_VISIBLE 可视效果:
if(pChildNextWnd)
{
if(!(GetWindowLong(pChildWnd->m_hWnd,GWL_STYLE)&WS_VISIBLE))
{
pTempWnd=NULL;
pTempWnd=pMainWnd;
//关闭广告窗口
……
return;
}
}
现在已经可以准确判断出哪个是广告窗口了,只需将其关闭即可,前段代码已经将我们想关闭的窗口指针保存到变量pTempWnd中,因此我们可以通过简单的向其发送WM_CLOSE消息就可以彻底将其关闭了:
pTempWnd->PostMessage(WM_CLOSE,0,0);
三、小结
本文仅对于关闭广告窗口的核心代码作了介绍,在实际编程中需要考虑到许多实际的因素,比如为了节省屏幕占用空间,最好将其做成系统托盘模式;由于需要长期驻留内存所以要尽量把程序大小控制好,并且采用Release发行版本等等。

本文所述内容有一定的通用性,可以将其用于监视某项进程,当该进程启动后由程序来触发某个事件来对其进行处理等等。

相关文档
最新文档