博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C 自删除技术---批处理方式
阅读量:4590 次
发布时间:2019-06-09

本文共 2635 字,大约阅读时间需要 8 分钟。

#include
#include
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 设置入口地址实现隐藏窗口。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"); // 两个%%显示一个%,%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.exegoto start:done         del /f /q %0

 

GetModuleFileName() 介绍:

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

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

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

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

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

 

ShellExecute() 介绍:

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

函数原型:HINSTANCE ShellExecute(

  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表示执行错误。
 
ShellExecuteEX() 介绍:
功能:ShellExecute() 的扩展,对指定的文件进行操作。
函数原型:BOOL ShellExecuteEx(
                  SHELLEXECUTEINFO *pExecInfo  // 一个指向 SHELLEXECUTEINFO 结构的指针。
                  );
返回值:返回 TRUE 表示成功,FALSE 表示失败。
 
SHELLEXECUTEINFO 结构体:
typedef struct _SHELLEXECUTEINFO {  DWORD     cbSize;  // 该结构体大小。  ULONG     fMask;  // 指示其他结构成员的内容和有效性的标志,默认为 0。  HWND      hwnd;  // 父窗口句柄(用于显示执行该函数时可能出现的任何消息框),可以为 NULL。  LPCSTR    lpVerb; // 指定要执行的操作,可以为 NULL。同上 lpOperation,runas 代表以管理员身份运行。  LPCSTR    lpFile; // 指定将执行由 lpVerb 参数指定的操作的文件或对象的名称。  LPCSTR    lpParameters; // 执行参数,可以为 NULL。   LPCSTR    lpDirectory; // 工作目录,可以为 NULL。  int       nShow; // 窗体显示方式。  HINSTANCE hInstApp; // 出参,用于了解该函数是否调用成功,可以为 NULL。  void      *lpIDList; // ITEMIDLIST结构的地址,存储成员的特别标识符。  LPCSTR    lpClass; // 指明文件类别的名字或 GUID,可以为 NULL。  HKEY      hkeyClass; // 文件类型的注册表项的句柄,可以为 NULL。  DWORD     dwHotKey;  // 与应用程序关联的键盘快捷键,可以为 NULL。  union {    HANDLE hIcon;  // 取得对应文件类型的图标的Handle,可以为 NULL。    HANDLE hMonitor; // 将文档显示在显示器上的Handle,可以为 NULL。  } DUMMYUNIONNAME;  HANDLE    hProcess; // 指向新启动的程序的句柄,可以为 NULL。} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;

 

 

转载于:https://www.cnblogs.com/M-Anonymous/p/9357632.html

你可能感兴趣的文章
webService 客户端 以wsimport方式生成对应java文件
查看>>
springmvc的请求流程
查看>>
local unversioned, incoming add upon update问题
查看>>
linux基础nfs服务和计划任务crond服务
查看>>
bzoj3998[TJOI2015]弦论
查看>>
leetcode:Pascal's Triangle II【Python版】
查看>>
2019 HL SC day10
查看>>
[IE编程] 多页面基于IE内核浏览器的代码示例
查看>>
对不同型号开发板的认识及环境搭建
查看>>
web.xml配置详解之listener
查看>>
tarjan模板
查看>>
请让本题永远沉睡于此(东方化改题+给的标程)
查看>>
第二第三周暑期集训总结
查看>>
C#屏幕截图
查看>>
JQuery模仿a标签的点击事件
查看>>
github hexo 搭建博客
查看>>
JS调用百度地图API获取地理位置
查看>>
BZOJ 1103 [POI2007]大都市meg(树状数组+dfs序)
查看>>
BZOJ 4260 Codechef REBXOR(字典树)
查看>>
idea使用maven逆向mybitis的文件
查看>>