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
'프로그래밍 > 파이썬' 카테고리의 다른 글
[파이썬] MissingSchema: Invalid URL : No scheme supplied. Perhaps you meant 해결방법 (0) | 2024.04.17 |
---|---|
파이썬 이미지 서치 pyautogui (0) | 2023.06.28 |
파이썬 기초 문법 (0) | 2023.04.02 |
텔레그램 봇 메세지 발송 및 발송 오류 해결법 (0) | 2023.03.19 |
파이썬 python 괄호 안의 내용 모두 삭제 (0) | 2023.02.10 |
댓글