一个清除自定义通知的小程序【原创.附源代码】
2007-05-12 00:26
381 查看
一些程序或者是网络连接,在使用的时候会出现在右下角的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
以上是这个程序的源代码,希望有高手能够帮我指点一下,特别是容错方面的,这个程序的容错性特别的差,发行版几乎没有检查和提示,没有窗口出现,主要是偶比较菜鸟。
第一个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
以上是这个程序的源代码,希望有高手能够帮我指点一下,特别是容错方面的,这个程序的容错性特别的差,发行版几乎没有检查和提示,没有窗口出现,主要是偶比较菜鸟。
相关文章推荐
- 写了一个能自定义并自动按照规则生成单据号码的程序及相关存储过程和表,及示范,附全部源代码!
- 编一个程序,从它标准输入读取c源代码,并验证所有的花括号都是成对出现的
- 【原创】广告群发程序源代码大放送了
- //4.编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现。
- [原创]用JS做的一个打字程序(为网友qixiao)
- 编写一个程序,它从标准输入(终端)读取C源代码,并验证所有的花括号都正确的成对出现。
- c语言:编写一个程序,它从标准输入(终端)读取C源代码,并验证所有的花括号都正确的成对出现。
- 建立一个任务栏通知程序
- 第一个java小程序 applet 画一个圆 获取网页自定义的参数来输出
- 一个换肤程序的源代码
- (原创)c++primer(第五版)--1.1 一个简单的c++程序
- androidUI设计之旅 ----自定义EditText(多了一个清除按钮)
- Android程序 类QQ通知常驻在Notification栏 点击Notification正确回调到之前已经放置在后台的Task中的对应Activity,而不是创建它的一个新实例
- 通过程序自定义按钮皮肤.-一个复杂的例子。
- 一个分析Linux ARP日志的源代码程序
- [原创]公布读取瑞星注册码的小程序源代码
- [原创]WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构
- 编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现
- 1.编写一个程序,他从标准输入读取C源代码,并验证所有的花括号都正确的成对出现。
- Python:通过自定义系统级快捷键来控制程序开始或停止记录日志(使用小技巧解决一个貌似无解的问题)