此代码是一个纯SDK代码,没有用到MFC,程序中只有一个函数SelfDelete(),读起来比较好懂,对于研究Shell编程有一定作用。 #include <windows.h> #include <tchar.h> #include <stdio.h> #include <shlobj.h> #include <shlwapi.h> BOOL SelfDelete() { TCHAR szModule [MAX_PATH], szComspec[MAX_PATH], szParams [MAX_PATH];
// get file path names: if((GetModuleFileName(0,szModule,MAX_PATH)!=0) && (GetShortPathName(szModule,szModule,MAX_PATH)!=0) && (GetEnvironmentVariable("COMSPEC",szComspec,MAX_PATH)!=0)) { // set command shell parameters lstrcpy(szParams," /c del "); lstrcat(szParams, szModule); lstrcat(szParams, " > nul"); lstrcat(szComspec, szParams); // set struct members STARTUPINFO si={0}; PROCESS_INFORMATION pi={0}; si.cb = sizeof(si); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_HIDE;
// increase resource allocation to program SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL); // invoke command shell if(CreateProcess(0, szComspec, 0, 0, 0,CREATE_SUSPENDED| DETACHED_PROCESS, 0, 0, &si, &pi)) { // suppress command shell process until program exits SetPriorityClass(pi.hProcess,IDLE_PRIORITY_CLASS); SetThreadPriority(pi.hThread,THREAD_PRIORITY_IDLE); // resume shell process with new low priority ResumeThread(pi.hThread); // everything seemed to work return TRUE; } else // if error, normalize allocation { SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL); } } return FALSE; } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { TCHAR sImeFile[MAX_PATH], szDir[MAX_PATH]; MessageBox(NULL, _T("now delete myselef ?/n"), "Warning", MB_OK);
// if(!DelIMEFile(hInstance, sImeFile)) // return FALSE; // DelReg(); SelfDelete(); }  
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
|