python win32api獲取窗口句柄 根據窗口句柄隱藏、關閉進程

安裝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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章