4
A
回答
7
試試這個:
import sys, os.path, ctypes, ctypes.wintypes
Psapi = ctypes.WinDLL('Psapi.dll')
EnumProcesses = Psapi.EnumProcesses
EnumProcesses.restype = ctypes.wintypes.BOOL
GetProcessImageFileName = Psapi.GetProcessImageFileNameA
GetProcessImageFileName.restype = ctypes.wintypes.DWORD
Kernel32 = ctypes.WinDLL('kernel32.dll')
OpenProcess = Kernel32.OpenProcess
OpenProcess.restype = ctypes.wintypes.HANDLE
TerminateProcess = Kernel32.TerminateProcess
TerminateProcess.restype = ctypes.wintypes.BOOL
CloseHandle = Kernel32.CloseHandle
MAX_PATH = 260
PROCESS_TERMINATE = 0x0001
PROCESS_QUERY_INFORMATION = 0x0400
count = 32
while True:
ProcessIds = (ctypes.wintypes.DWORD*count)()
cb = ctypes.sizeof(ProcessIds)
BytesReturned = ctypes.wintypes.DWORD()
if EnumProcesses(ctypes.byref(ProcessIds), cb, ctypes.byref(BytesReturned)):
if BytesReturned.value<cb:
break
else:
count *= 2
else:
sys.exit("Call to EnumProcesses failed")
for index in range(BytesReturned.value/ctypes.sizeof(ctypes.wintypes.DWORD)):
ProcessId = ProcessIds[index]
hProcess = OpenProcess(PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION, False, ProcessId)
if hProcess:
ImageFileName = (ctypes.c_char*MAX_PATH)()
if GetProcessImageFileName(hProcess, ImageFileName, MAX_PATH)>0:
filename = os.path.basename(ImageFileName.value)
if filename == 'notepad.exe':
TerminateProcess(hProcess, 1)
CloseHandle(hProcess)
9
這可能是欺騙,但它的工作原理,甚至沒有捲入ctypes的。
import subprocess
subprocess.call("taskkill /IM exename.exe")
taskkill
是一個Windows命令;這只是通過Python調用它。
+0
這是一個超優雅的解決方案!人們往往會忘記你可以在Python中運行任意進程。 +1 –
+0
@Matt - 哇,這很好,哈。謝謝你。 – Synapse
+1
我當然不是在做這樣的事情,但它是優雅的反面! ctypes代碼是醜陋的,但它直接調用OS例程而不是構建/解析/運行/拆除另一個程序來執行它。 –
相關問題
- 1. 提升:如何通過名稱查找進程的進程id?
- 2. 通過PID查找進程名稱
- 3. 如何通過PID查找應用程序名稱(進程ID)
- 4. KILL「Android.process.xxx」進程
- 5. 通過PID獲取進程名稱
- 6. 通過名稱獲取進程ID
- 7. 如何通過名稱或python中的標記調用進程
- 8. 通過進程名稱取消隱藏進程?
- 9. 通過圖像名稱獲取進程的進程句柄
- 10. Android:Android kill tcpdump進程
- 11. 如何通過在mac os上了解進程名稱來獲取進程?
- 12. 如何通過QNX cpp代碼中的進程名稱向進程發送SIGTERM?
- 13. 檢查進程是否正在運行(使用進程名稱)
- 14. 如何通過ProcessID查找進程?
- 15. 如何讓Python進程以正確的進程名稱運行?
- 16. 如何通過Python獲取進程名稱?
- 17. 在java中使用PID kill ubuntu進程
- 18. 如何通過表中的行進行迭代,並使用jQuery
- 19. 如何在linux中通過進程名獲取進程ID
- 20. 如何找到我不確切知道的進程名稱?
- 21. 如何從java中的pid中找到進程名稱?
- 22. 如何找到由Python產生的進程的名稱?
- 23. 兩個子進程通過命名管道進行通信
- 24. 如何用名稱啓動PHP進程?
- 25. 使用管道進行過程通信
- 26. 如何從進程名稱獲取應用程序名稱?
- 27. 如何找到MySQL進程列表並殺死這些進程?
- 28. 如何通過使用Java的tor代理進行DNS查找?
- 29. 如何通過java進程查找cpu使用情況
- 30. 使用OpenMp與ctypes進行鏈接
調用EnumProcesses然後TerminateProcess。 –
@David Heffernan - 呃,怎麼樣? – Synapse
你知道ctypes嗎?我只是想在你嘗試編寫這樣的代碼之前弄清楚你知道的和你不知道的。 –