1. 程式人生 > >C 自刪除技術---批處理方式

C 自刪除技術---批處理方式

sta 錯誤 目錄 函數 str to do () 數量 std

#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 自刪除技術---批處理方式