码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-07-24 00:44:11      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:tar   nil   nap   shell   pts   pop   模块   指定   比较   

#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表示执行错误。
 

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

标签:tar   nil   nap   shell   pts   pop   模块   指定   比较   

原文地址:https://www.cnblogs.com/M-Anonymous/p/9357632.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!