vfp结束系统进程

结束系统进程 ntsd -c q -p PID   把最后那个PID,改成你要终止的进程的ID。如果你不知道进程的ID,任务管理器->进程选项卡->查看->选择列->勾上"PID(进程标识符)",然后就能看见了。   XP下还有两个好用的工具tasklist和tskill。tasklist能列出所有的进程,和相应的信息。tskill能查杀进程,语法很简单:tskill 程序名!! Exit_ProFileName='RUNDLL32.EXE' && RUNDLL32.EXE为要结束的系统进程名称 IF GetAllProcessID('Process_CurTable') SELECT Pth32ProcessID INTO ARRAY Exit_id FROM Process_CurTable WHERE ALLTRIM(UPPER(PszExeFile))=UPPER(Exit_ProFileName) IF ExitProcessId(Exit_id) &&只有System、SMSS.EXE和CSRSS.EXE不能杀。前两个是纯内核态的,最后那个是Win32子系统 MESSAGEBOX('结束进程成功!',64,'信息提示') ELSE MESSAGEBOX('结束进程失败!',16,'信息提示') ENDIF ENDIF * ------------------------------------- * 枚举当前所有进程 * ------------------------------------- FUNCTION GetAllProcessID ( lpProcTable ) lpProcTable = IIF(PARAMETERS()=1 AND TYPE([lpProcTable])=[C], lpProcTable, [AllProclists] ) DECLARE INTEGER CreateToolhelp32Snapshot IN kernel32 INTEGER lFlags, INTEGER lProcessID DECLARE INTEGER Process32First IN kernel32 INTEGER hSnapShot, STRING @PROCESSENTRY32_uProcess DECLARE INTEGER Process32Next IN kernel32 INTEGER hSnapShot, STRING @PROCESSENTRY32_uProcess DECLARE INTEGER CloseHandle IN kernel32 INTEGER hObject DECLARE INTEGER GetLastError IN kernel32 CREA CURSOR (lpProcTable) (PdwSize N(3), PcntUsage N(12), ; Pth32ProcessID N(12), Pth32DefaultHeapID N(12), ; Pth32ModuleID N(12), PcntThreads N(12), ; Pth32ParentProcessID N(12), PpcPriClassBase N(3), ; PdwFlags N(3), PszExeFile C(254) ) lnHand = 0 lnHand = CreateToolhelp32Snapshot(3,0) IF lnHand>0 dwSize = Num2Dword(296) cntUsage = Num2Dword(0) th32ProcessID = Num2Dword(0) th32DefaultHeapID = Num2Dword(0) th32ModuleID = Num2Dword(0) cntThreads = Num2Dword(0) th32ParentProcessID = Num2Dword(0) pcPriClassBase = Num2Dword(0) dwFlags = Num2Dword(0) szExeFile = REPLI(CHR(0), 260) lcTitle = dwSize + cntUsage + th32ProcessID + th32DefaultHeapID ; + th32ModuleID + cntThreads + th32ParentProcessID ; + pcPriClassBase + dwFlags + szExeFile IF Process32First(lnHand,@lcTitle) > 0 && 第一个进程是 kernel32.dll,没必要列出 DO WHILE Process32Next(lnHand,@lcTitle)> 0 INSERT INTO (lpProcTable) (PdwSize, PcntUsage, Pth32ProcessID, Pth32DefaultHeapID, ; Pth32ModuleID, PcntThreads, Pth32ParentProcessID, ; PpcPriClassBase, PdwFlags, PszExeFile) ; VALUES ( ; Dword2Num(SUBSTR(lcTitle, 1,4)), ; Dword2Num(SUBSTR(lcTitle, 5,4)), ; Dword2Num(SUBSTR(lcTitle, 9,4)), ; Dword2Num(SUBSTR(lcTitle,13,4)), ; Dword2Num(SUBSTR(lcTitle,17,4)), ; Dword2Num(SUBSTR(lcTitle,21,4)), ; Dword2Num(SUBSTR(lcTitle,25,4)), ; Dword2Num(SUBSTR(lcTitle,29,4)), ; Dword2Num(SUBSTR(lcTitle,33,4)), ; SUBSTR(SUBSTR(lcTitle, 37), 1, AT(CHR(0),SUBSTR(lcTitle, 37))-1) ) ENDDO ENDIF = CloseHandle(lnHand) RETURN .T. ELSE RETURN .F. ENDIF ENDFUNC FUNCTION Num2Dword ( lpnNum ) DECLARE INTEGER RtlMoveMemory IN kernel32 AS RtlCopyDword STRING @pDeststring, INTEGER @pVoidSource, INTEGER nLength lcDword = SPACE(4) = RtlCopyDword(@lcDword, BITOR(lpnNum,0), 4) RETURN lcDword ENDFUNC FUNCTION Dword2Num ( tcDword ) DECLARE INTEGER RtlMoveMemory IN kernel32 AS RtlCopyNum INTEGER @DestNumeric, STRING @pVoidSource, INTEGER nLength lnNum = 0 =RtlCopyNum(@lnNum, tcDword, 8) RETURN lnNum ENDFUNC * ------------------------------------- * 从 ProcessId 关闭进程 * ------------------------------------- FUNCTION ExitProcessId ( lpnProcessId ) DECLARE INTEGER TerminateProcess IN kernel32 INTEGER hProcess , INTEGER uExitCode DECLARE INTEGER OpenProcess IN kernel32 INTEGER dwDesiredAccess, INTEGER binheritHandle, INTEGER dwProcessId DECLARE INTEGER GetCurrentProcessId IN kernel32 IF lpnProcessId = GetCurrentProcessId() RETURN .F. ELSE hproc = OpenProcess(2035711, 0, lpnProcessId) && 从进程 ID 获得进程句柄 IF hproc = 0 RETURN .F. ELSE = TerminateProcess(hproc, 0) && 关闭进程 RETURN .T. ENDIF ENDIF ENDFUNC 修正: 上面那个有时结束系统进程时不能成功,最好用过结束非系统进程 这个可以结束除System、SMSS.EXE和CSRSS.EXE外所有进程 ******只有System、SMSS.EXE和CSRSS.EXE不能结束。前两个是纯内核态的,最后那个是Win32子系统 Exit_ProFileName='sqlservr.exe' && sqlservr.exe为要结束的系统进程名称 IF GetAllProcessID('Process_CurTable') SELECT Pth32ProcessID INTO ARRAY Exit_id FROM Process_CurTable WHERE ALLTRIM(UPPER(PszExeFile))=UPPER(Exit_ProFileName) lcString='RUN /N7 ntsd -c q -p '+ALLTRIM(STR(Exit_id)) &lcString ENDIF * ------------------------------------- * 枚举当前所有进程 * ------------------------------------- FUNCTION GetAllProcessID ( lpProcTable ) lpProcTable = IIF(PARAMETERS()=1 AND TYPE([lpProcTable])=[C], lpProcTable, [AllProclists] ) DECLARE INTEGER CreateToolhelp32Snapshot IN kernel32 INTEGER lFlags, INTEGER lProcessID DECLARE INTEGER Process32First IN kernel32 INTEGER hSnapShot, STRING @PROCESSENTRY32_uProcess DECLARE INTEGER Process32Next IN kernel32 INTEGER hSnapShot, STRING @PROCESSENTRY32_uProcess DECLARE INTEGER CloseHandle IN kernel32 INTEGER hObject DECLARE INTEGER GetLastError IN kernel32 CREA CURSOR (lpProcTable) (PdwSize N(3), PcntUsage N(12), ; Pth32ProcessID N(12), Pth32DefaultHeapID N(12), ; Pth32ModuleID N(12), PcntThreads N(12), ; Pth32ParentProcessID N(12), PpcPriClassBase N(3), ; PdwFlags N(3), PszExeFile C(254) ) lnHand = 0 lnHand = CreateToolhelp32Snapshot(3,0) IF lnHand>0 dwSize = Num2Dword(296) cntUsage = Num2Dword(0) th32ProcessID = Num2Dword(0) th32DefaultHeapID = Num2Dword(0) th32ModuleID = Num2Dword(0) cntThreads = Num2Dword(0) th32ParentProcessID = Num2Dword(0) pcPriClassBase = Num2Dword(0) dwFlags = Num2Dword(0) szExeFile = REPLI(CHR(0), 260) lcTitle = dwSize + cntUsage + th32ProcessID + th32DefaultHeapID ; + th32ModuleID + cntThreads + th32ParentProcessID ; + pcPriClassBase + dwFlags + szExeFile IF Process32First(lnHand,@lcTitle) > 0 && 第一个进程是 kernel32.dll,没必要列出 DO WHILE Process32Next(lnHand,@lcTitle)> 0 INSERT INTO (lpProcTable) (PdwSize, PcntUsage, Pth32ProcessID, Pth32DefaultHeapID, ; Pth32ModuleID, PcntThreads, Pth32ParentProcessID, ; PpcPriClassBase, PdwFlags, PszExeFile) ; VALUES ( ; Dword2Num(SUBSTR(lcTitle, 1,4)), ; Dword2Num(SUBSTR(lcTitle, 5,4)), ; Dword2Num(SUBSTR(lcTitle, 9,4)), ; Dword2Num(SUBSTR(lcTitle,13,4)), ; Dword2Num(SUBSTR(lcTitle,17,4)), ; Dword2Num(SUBSTR(lcTitle,21,4)), ; Dword2Num(SUBSTR(lcTitle,25,4)), ; Dword2Num(SUBSTR(lcTitle,29,4)), ; Dword2Num(SUBSTR(lcTitle,33,4)), ; SUBSTR(SUBSTR(lcTitle, 37), 1, AT(CHR(0),SUBSTR(lcTitle, 37))-1) ) ENDDO ENDIF = CloseHandle(lnHand) RETURN .T. ELSE RETURN .F. ENDIF ENDFUNC FUNCTION Num2Dword ( lpnNum ) DECLARE INTEGER RtlMoveMemory IN kernel32 AS RtlCopyDword STRING @pDeststring, INTEGER @pVoidSource, INTEGER nLength lcDword = SPACE(4) = RtlCopyDword(@lcDword, BITOR(lpnNum,0), 4) RETURN lcDword ENDFUNC FUNCTION Dword2Num ( tcDword ) DECLARE INTEGER RtlMoveMemory IN kernel32 AS RtlCopyNum INTEGER @DestNumeric, STRING @pVoidSource, INTEGER nLength lnNum = 0 =RtlCopyNum(@lnNum, tcDword, 8) RETURN lnNum ENDFUNC
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值