본문 바로가기
프로그래밍/파이썬

파이썬 윈도우 프로세스의 핸들을 사용하여 마우스 좌표 및 RGB 체크

by 젤리씨 2023. 8. 18.
728x90

파이썬 윈도우 프로세스의 핸들을 사용하여 선택한 핸들의 마우스 좌표 및 RGB 체크 하는 법입니다

 

아래코드를 실행하면 윈도우 프로세스 핸들을 선택하는 드랍다운박스가 보입니다.

 

 

클릭하여 원하는 핸들 선택 후

 

좌표나 RGB 값 을 확인할수 있으며 그아래에는 해당 색상을 확인할수 있습니다

 

파섹의 휴지통 옆에 빨간 동그라미 부분에 커서를 가져갔을때 입니다

 

파섹 프로그램 안에서의 좌표 입니다

 

파이썬으로 비활성 매크로를 만들때 유용하게 쓰일듯 합니다.

import tkinter as tk
from tkinter import ttk
import win32gui
import win32api
from tkinter.font import Font
from PIL import ImageGrab

def get_window_coordinates(hwnd):
    rect = win32gui.GetWindowRect(hwnd)
    x, y, _, _ = rect
    return x, y

def get_rgb_color(x, y):
    screen = ImageGrab.grab(bbox=(x, y, x + 1, y + 1))
    rgb = screen.getpixel((0, 0))
    return rgb

def rgb_to_hex(rgb):
    return "#{:02X}{:02X}{:02X}".format(rgb[0], rgb[1], rgb[2])

def update_coordinates():
    selected_index = combo_box.current()
    if selected_index != -1:
        selected_window = window_info[selected_index][0]
        x_window, y_window = get_window_coordinates(selected_window)
        
        x_cursor, y_cursor = win32gui.GetCursorPos()
        x_relative = x_cursor - x_window
        y_relative = y_cursor - y_window
        
        coordinates_label.config(text=f"X: {x_relative}, Y: {y_relative}")
        
        rgb = get_rgb_color(x_cursor, y_cursor)
        rgb_label.config(text=f"RGB: {rgb}")
        
        hex_color = rgb_to_hex(rgb)
        color_canvas.config(bg=hex_color)
    else:
        coordinates_label.config(text="윈도우를 선택하세요")
        rgb_label.config(text="RGB: ")
        color_canvas.config(bg="white")

    window.after(100, update_coordinates)  # 업데이트 주기(ms)마다 좌표 업데이트

# 윈도우 정보 가져오기
def get_window_info():
    def callback(hwnd, info):
        if win32gui.IsWindowVisible(hwnd):
            window_text = win32gui.GetWindowText(hwnd)
            if window_text:
                info.append((hwnd, window_text))
        return True

    info = []
    win32gui.EnumWindows(callback, info)
    return sorted(info, key=lambda x: x[1])  # 핸들명 오름차순으로 정렬

# GUI 창 생성
window = tk.Tk()
window.title("마우스 커서의 상대 좌표 및 RGB 값 보기")
window.geometry("400x200")  # 크기 조정

# 스타일 설정
style = ttk.Style()
font = Font(size=14)  # 폰트 크기를 14로 설정
style.configure("TCombobox", font=font)
style.configure("TCombobox.Listbox", font=font)  # 드롭다운 목록의 폰트 설정

# 콤보박스 생성
window_info = get_window_info()
combo_box_values = [f"{title} - {hwnd}" for hwnd, title in window_info]
combo_box = ttk.Combobox(window, values=combo_box_values, width=30, height=15)  # 높이를 15로 설정
combo_box.pack(padx=10, pady=10)

# 좌표 표시 레이블
coordinates_font = Font(size=16)  # 폰트 크기를 16으로 설정
coordinates_label = tk.Label(window, text="X: 0, Y: 0", font=coordinates_font)
coordinates_label.pack(padx=10, pady=5)

# RGB 표시 레이블
rgb_font = Font(size=14)  # 폰트 크기를 14로 설정
rgb_label = tk.Label(window, text="RGB: ", font=rgb_font)
rgb_label.pack(padx=10, pady=5)

# 색상 표시 캔버스
color_canvas = tk.Canvas(window, width=50, height=30)
color_canvas.pack(padx=10, pady=5)

# 업데이트 함수 호출
update_coordinates()

# GUI 이벤트 루프 시작
window.mainloop()

 

728x90

댓글