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

Posted m-anonymous

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
");
    fprintf(fp,":start
	if not exist %s goto done
",buffer);
    fprintf(fp,"	del /f /q %s
",buffer);
    fprintf(fp,"goto start
");
    fprintf(fp,":done
");
    fprintf(fp,"	del /f /q %0
");
    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表示执行错误。
 








以上是关于C 自删除技术---批处理方式的主要内容,如果未能解决你的问题,请参考以下文章

C#VS快捷键

C#VS快捷键

C#VS快捷键

使用Visual Studio Code自定义代码模版

使用删除与隐藏时未调用自定义动画

从堆栈中弹出特定片段并删除其他片段