一个清除自定义通知的小程序【原创.附源代码】
来源:互联网 发布:json的数据交换接口 编辑:程序博客网 时间:2024/05/01 17:09
一些程序或者是网络连接,在使用的时候会出现在右下角的system tray区域显示一个小图标,例如QQ、杀毒软件、宽带连接等。就算是程序退出或者是连接断开,仍然可以在“自定义通知”看见历史记录。删除这些记录需要修改注册表,并且结束explorer.exe进程,才能起效果。这几天利用业余的时间写了个小程序,可以帮助清除“自定义通知”里面的历史记录。这个程序在mingw+codeblocks(Night build)下面编译通过,不想编译源代码,怕麻烦又信任我的朋友可以通过qq(18753821)向我索取。这里提供源代码,共四个源代码文件:
第一个main.cpp:
//#define _DEBUG_
#include <windows.h>
#include <stdio.h>
#include "search_proc.h"
#include "debug.h"
#define SUB_KEY "Software//Microsoft//Windows//CurrentVersion//Explorer//TrayNotify" //将要被清理的子键值
#define ICONSTREAMS "IconStreams" //清理的键值
#define PASTICONSSTREAM "PastIconsStream" //清理的键值
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nCmdShow)
{
//显示作者:
if(!strcmp("-v",lpszArgument)){
MessageBox(NULL,"作者:天涯剑客(QQ:18753821)","自定义通知清理V0.11",MB_OK);
return 0;
}
DWORD procId=SearchProcess("EXPLORER.EXE"); //查找并得到explorer.exe进程ID
DEBUG(printf("Terminate Process ID=%d",procId))
HANDLE hExplorer=OpenProcess(PROCESS_TERMINATE,FALSE,procId); //取得explorer进程句柄
//结束explorer.exe进程
if(!TerminateProcess(hExplorer,0)){
INFO("进程结束失败!")
}
LONG LStatue;
HKEY hkOperation=HKEY_CURRENT_USER; //定义主键
PHKEY phkOperation=&hkOperation;
//打开键:
LStatue=RegOpenKeyEx(HKEY_CURRENT_USER,
SUB_KEY,0,KEY_ALL_ACCESS,phkOperation);
if(LStatue!=ERROR_SUCCESS){
INFO("注册表键打开失败!")
}
//删除键值IconStreams:
LStatue=RegDeleteValue(hkOperation,ICONSTREAMS);
if(LStatue!=ERROR_SUCCESS){
INFO("注册表键值IconStreams删除失败!")
}
//删除键值PastIconsStream:
LStatue=RegDeleteValue(hkOperation,PASTICONSSTREAM);
if(LStatue!=ERROR_SUCCESS){
INFO("注册表键值PastIconsStreams删除失败!")
}
return 0;
}
第二个search_proc.h:
//#define _DEBUG_
#ifndef SEARCH_PROC_H_INCLUDED
#define SEARCH_PROC_H_INCLUDED
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
#include "debug.h"
//常量定义部分:
#define NOT_FOUND 0
#define SNAP_GET_FAILED 0
#define BALANCE ('a'-'A')
//进程查找函数:
DWORD SearchProcess(char*);
#endif // SEARCH_PROC_H_INCLUDED
第三个search_proc.cpp
#include "search_proc.h"
DWORD SearchProcess(char* szFilename)
{
//定义存储快照信息所用的两个结构:
PROCESSENTRY32 processEntry={0};
MODULEENTRY32 moduleEntry={0};
HANDLE hProcessSnap=
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //取得系统进程快照
if(hProcessSnap==INVALID_HANDLE_VALUE)
return SNAP_GET_FAILED;
processEntry.dwSize=sizeof(PROCESSENTRY32);
moduleEntry.dwSize=sizeof(MODULEENTRY32);
BOOL bFlag=Process32First(hProcessSnap,&processEntry);//取得第一个快照结构
while(bFlag)
{
//取得系统进程模块快照:
HANDLE hModuleSnap=
CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,
processEntry.th32ProcessID);
DEBUG(printf("ProcessID:%d=======%s/n",
processEntry.th32ProcessID,processEntry.szExeFile))
if(!strcasecmp(szFilename,processEntry.szExeFile)){//如果找到指定进程则返回
DEBUG(printf("ProcessID:%d=======%s/n",
processEntry.th32ProcessID,processEntry.szExeFile))
CloseHandle(hProcessSnap);
return processEntry.th32ProcessID;//返回进程ID号
}
bFlag=Process32Next(hProcessSnap,&processEntry);//取得下一个结构
}
CloseHandle(hProcessSnap);
return NOT_FOUND;
}
第四个debug.h(主要是调试程序时用到的宏):
#ifndef DEBUG_H_INCLUDED
#define DEBUG_H_INCLUDED
#ifdef _DEBUG_
#define INFO(STR) MessageBox(NULL,STR,"程序调试",MB_OK);
#define DEBUG(CODE) {CODE;}
#else
#define INFO(STR)
#define DEBUG(CODE)
#endif //_DEBUG_
#endif // DEBUG_H_INCLUDED
以上是这个程序的源代码,希望有高手能够帮我指点一下,特别是容错方面的,这个程序的容错性特别的差,发行版几乎没有检查和提示,没有窗口出现,主要是偶比较菜鸟。
- 一个清除自定义通知的小程序【原创.附源代码】
- [原创] 如何通过自定义MessageFilter的方式利用按键方式操作控件滚动条[附源代码]
- 写了一个能自定义并自动按照规则生成单据号码的程序及相关存储过程和表,及示范,附全部源代码!
- Http下载Ftp上传的小程序已经完成(附源代码,交流)
- 个人写的一个小程序(提供源代码)
- 求个C语言源代码~一个简单的小程序
- 一个无聊的小程序源代码,轻松打败…
- 一个ORM的实现(附源代码)
- 一个消息提示托盘程序的开发历程(采用socket技术,附源代码)一
- Nokia系列手机上的一个手电筒J2ME程序(附源代码)
- windows下的一个socket多人聊天程序(附源代码)
- 清除自定义通知里的过去的项目
- [原创]一个C#病毒源代码的分析
- 节约内存:清除任务栏“自定义通知”里的图标
- 如何清除任务栏中自定义通知里的图标
- 一个消息提示托盘程序的开发历程(采用socket技术,附源代码)二---服务端源代码
- 一个消息提示托盘程序的开发历程(采用socket技术,附源代码)三---客户端源代码
- 一个股票分析小程序及源代码
- 提示该盘CD-ROM来自于比您当前使用的windows更旧的版本 该盘上的安装功能已被禁用
- 转摘:《南方人物周刊》——已经太晚了 作者:醉琴
- 我的slackware10.2硬盘安装方法
- SQL Server 2005 中能够使用 Try...Catch语句
- J2EE Architecture(6)
- 一个清除自定义通知的小程序【原创.附源代码】
- C# 用Enter代替Tab 实现方法
- Hibernate OneToOne
- Ruby & Rails Resources
- swf文件结构解析
- 定居CSDN
- SQL Server 2005 添加了nvarchar(max),varchar(max)
- 也弄一个试试
- 程序员