您的位置:首页 > 移动开发 > 微信开发

一个清除自定义通知的小程序【原创.附源代码】

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

    以上是这个程序的源代码,希望有高手能够帮我指点一下,特别是容错方面的,这个程序的容错性特别的差,发行版几乎没有检查和提示,没有窗口出现,主要是偶比较菜鸟。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐