1. 截图
'''实现屏幕截图'''
import win32gui, win32ui, win32con, win32api, win32com
import time
def get_window_pos(name):
name = name
handle = win32gui.FindWindow(0, name)
if handle == 0:
return None
else:
return win32gui.GetWindowRect(handle), handle
def window_capture(hwnd, filename):
hwndDC = win32gui.GetWindowDC(hwnd)
mfcDC = win32ui.CreateDCFromHandle(hwndDC)
saveDC = mfcDC.CreateCompatibleDC()
saveBitMap = win32ui.CreateBitmap()
MoniterDev = win32api.EnumDisplayMonitors(None, None)
w = MoniterDev[0][2][2]
h = MoniterDev[0][2][3]
saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)
saveDC.SelectObject(saveBitMap)
saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY)
saveBitMap.SaveBitmapFile(saveDC, filename)
win32gui.DeleteObject(saveBitMap.GetHandle())
saveDC.DeleteDC()
mfcDC.DeleteDC()
win32gui.ReleaseDC(hwnd,hwndDC)
if __name__ == '__main__':
hWnd_location, hWnd = get_window_pos('同花顺(v8.90.91) - 1号方案')
print(hWnd_location)
win32gui.SendMessage(hWnd, win32con.WM_SYSCOMMAND, win32con.SC_RESTORE, 0)
win32gui.SetForegroundWindow(hWnd)
win32gui.ShowWindow(hWnd, win32con.SW_SHOWMAXIMIZED)
time.sleep(1)
window_capture(hWnd, "1.png")
2. 获取所有句柄及窗口名称
'''获取所有句柄及窗口名称'''
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)})
win32gui.EnumWindows(get_all_hwnd, 0)
for h,t in hwnd_title.items():
if t is not "":
print(h, t)
3. 根据进程标题名称隐藏运行进程
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)
4. 根据程序名称来获取进程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)
p = psutil.Process(PID)
p.terminate()
if __name__ in "__main__":
win32gui.EnumWindows(handle_window, None)
5. 根据PID查询,返回句柄ID
import win32gui
import win32process
def get_hwnds_for_pid(pid):
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值)
6. 根据进程的模糊名字获取其完整名字
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)})
win32gui.EnumWindows(get_all_hwnd, 0)
THS_name = ''
for h,t in hwnd_title.items():
if str(t).find('同花顺')!=-1:
THS_name = t
print(THS_name)
7. 封装的接口
import win32gui, win32ui, win32con, win32api, win32com
import pythoncom
import win32com.client
class Win_api_handler():
def __init__(self, name):
self.name = name
def _get_window_pos(self, name):
handle = win32gui.FindWindow(0, name)
if handle == 0:
return None
else:
return win32gui.GetWindowRect(handle), handle
def get_hwnd(self):
'''
获取窗口句柄
'''
hWnd_location, hWnd = self._get_window_pos(self.name)
return hWnd
def set_foregroundwindow(self):
'''
窗口置顶
'''
hWnd_location, hWnd = self._get_window_pos(self.name)
if hWnd == None:
print('未找到该句柄')
return hWnd
pythoncom.CoInitialize()
shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys('%')
win32gui.SendMessage(hWnd, win32con.WM_SYSCOMMAND, win32con.SC_RESTORE, 0)
win32gui.SetForegroundWindow(hWnd)
win32gui.ShowWindow(hWnd, win32con.SW_SHOWMAXIMIZED)
return hWnd
def window_capture(self, hwnd, filename):
'''
截图
'''
hwndDC = win32gui.GetWindowDC(hwnd)
mfcDC = win32ui.CreateDCFromHandle(hwndDC)
saveDC = mfcDC.CreateCompatibleDC()
saveBitMap = win32ui.CreateBitmap()
MoniterDev = win32api.EnumDisplayMonitors(None, None)
w = MoniterDev[0][2][2]
h = MoniterDev[0][2][3]
saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)
saveDC.SelectObject(saveBitMap)
saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY)
saveBitMap.SaveBitmapFile(saveDC, filename)
win32gui.DeleteObject(saveBitMap.GetHandle())
saveDC.DeleteDC()
mfcDC.DeleteDC()
win32gui.ReleaseDC(hwnd,hwndDC)