安裝WIN32API和psutil第三方庫
pip install pypiwin32
pip install psutil
下面列出了四種應用場景:
一,獲取句柄及名稱
import win32gui
hwnd_title = dict()
def get_all_hwnd(hwnd, mouse):
if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):
hwnd_title.update({hwnd: win32gui.GetWindowText(hwnd)})
if __name__ in "__main__":
win32gui.EnumWindows(get_all_hwnd, 0)
for h, t in hwnd_title.items():
if t is not "":
print(h, t)
二,根據進程標題名稱隱藏運行進程
import win32gui
from win32.lib import win32con
def handle_window(hwnd, extra):
if win32gui.IsWindowVisible(hwnd):
if '需要隱藏的程序標題名稱' in win32gui.GetWindowText(hwnd):
win32gui.ShowWindow(hwnd, win32con.SW_HIDE)
if __name__ == '__main__':
win32gui.EnumWindows(handle_window, None)
# win32gui.EnumWindows(枚舉函數名稱, None) 語句是進行句柄ID枚舉
# win32gui.GetWindowText(句柄ID) 語句是通過句柄ID來獲取進程名稱
# win32gui.IsWindowVisible(句柄ID) 語句是查詢此句柄ID是否存在,存在返回1 否則返回0
# win32gui.ShowWindow(句柄ID, win32con.SW_HIDE) 語句是通過指定句柄ID來隱藏進程
三,根據程序名稱來獲取進程PID,然後通過PID殺掉進程
import win32gui
import win32process
import psutil
def handle_window(hwnd, extra):
if win32gui.IsWindowVisible(hwnd):
if '程序標題' in win32gui.GetWindowText(hwnd): # 判斷是否符合
_,PID = win32process.GetWindowThreadProcessId(hwnd) # 通過句柄ID查詢進程PID(第0個元素不管,第1個元素是PID)
p = psutil.Process(PID) # 實例化PID
p.terminate() # 關閉PID進程
if __name__ in "__main__":
win32gui.EnumWindows(handle_window, None) # 通過句柄ID查詢PID並關閉PID
四,根據PID查詢,返回句柄ID
import win32gui
import win32process
def get_hwnds_for_pid(pid):
# 通過PID查詢句柄ID
def callback(hwnd, hwnds):
if win32gui.IsWindowVisible(hwnd) and win32gui.IsWindowEnabled(hwnd):
_, found_pid = win32process.GetWindowThreadProcessId(hwnd)
if found_pid == pid:
hwnds.append(hwnd)
return True
hwnds = []
win32gui.EnumWindows(callback, hwnds)
hwndy = 0
if hwnds:
hwndy = hwnds[0]
return hwndy
if __name__ in "__main__":
get_hwnds_for_pid(傳入PID值) # 傳入PID值後返回句柄ID