C 自删除技术---批处理方式

#include<stdio.h>
#include<windows.h>
int main(void)
{
    FILE *fp;
    TCHAR buffer[MAX_PATH];
    GetModuleFileName(NULL,buffer,MAX_PATH);
    fp = fopen("del.bat","w");
    fprintf(fp,"@echo off\r\n");
    fprintf(fp,":start\r\n\tif not exist %s goto done\r\n",buffer);
    fprintf(fp,"\tdel /f /q %s\r\n",buffer);
    fprintf(fp,"goto start\r\n");
    fprintf(fp,":done\r\n");
    fprintf(fp,"\tdel /f /q %0\r\n");
    fclose(fp);
    ShellExecuteA(NULL,"open","del.bat",NULL,NULL,SW_HIDE);
    return 0;
}
bat 文件如下:
 
@echo off
:start
if not exist del.exe goto done del /f /q del.exe goto start :done del /f /q %0 // 0% 代表自身

GetModuleFileName() 介绍:

功能:获取当前进程已加载模块的文件的完整路径,该模块必须由当前进程加载。

函数原型:DWORD WINAPI GetModuleFileName( HMODULE  hModule, LPTSTR  lpFilename, DWORD  nSize) ; 

参数:hModule 表示正在被加载模块的句柄,如果为 NULL,则将当前可执行文件的完整路径复制到 lpFilename 中

           nSize 表示复制到 lpFilename 的最大字符数量。

返回值:如执行成功,返回复制到lpFileName的实际字符数量;零表示失败。

ShellExecute() 介绍:

功能:运行一个外部程序 (或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。

函数原型:HINSTANCE ShellExecuteA(
  HWND   hwnd,               //指定父窗口句柄。
  LPCSTR lpOperation,    //指定动作, 譬如: open、runas、print、edit、explore、find   (提示,可以打开网址
  LPCSTR lpFile,              //指定要打开的文件或程序
  LPCSTR lpParameters,  //给要打开的程序指定参数; 如果打开的是文件这里应该是 nil
  LPCSTR lpDirectory,       //缺省目录
  INT    nShowCmd           //打开选项  ---  SB_HIDE 代表隐藏窗口。
);

返回值:执行成功会返回应用程序句柄。
              返回的HINSTANCE可以将它转换为一个整数(%d),并比较它的值大于还是小于32或比较它的错误代码
              返回值大于32表示执行成功,返回值小于32表示执行错误。
 

猜你喜欢

转载自www.cnblogs.com/M-Anonymous/p/9357632.html