๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ž๋™ํ™”

[202505] ํ™”๋ฉด ๋ณดํ˜ธ๊ธฐ ์ž๋™ ์ง„์ž… ๋ฐฉ์ง€ ํ”„๋กœ๊ทธ๋žจ(๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅ)

๐Ÿ–ฅ๏ธ ์ปดํ“จํ„ฐ ํ™”๋ฉด ๋ณดํ˜ธ๊ธฐ ์ž๋™ ์ง„์ž…์„ ๋ง‰์•„์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ (Python + Tkinter)

 

 

์žฅ์‹œ๊ฐ„ ํ”„๋ ˆ์  ํ…Œ์ด์…˜, ์˜์ƒ ๋…นํ™”, ์›๊ฒฉ ์—ฐ๊ฒฐ ๋“ฑ์œผ๋กœ ์ปดํ“จํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด ์ž์ฃผ ๋ฐœ์ƒํ•  ๋•Œ, ํ™”๋ฉด ๋ณดํ˜ธ๊ธฐ๊ฐ€ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋ฉด ์ •๋ง ๋ถˆํŽธํ•˜์ฃ ? ๐Ÿ˜“

์˜ค๋Š˜์€ Python์œผ๋กœ ๋งŒ๋“  ‘ํ™”๋ฉด ๋ณดํ˜ธ๊ธฐ ๋ฐฉ์ง€ ๋„๊ตฌ’๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
์ด ๋„๊ตฌ๋Š” ์ž๋™์œผ๋กœ ๋งˆ์šฐ์Šค๋ฅผ ๋ฏธ์„ธํ•˜๊ฒŒ ์›€์ง์ด๊ณ  ํ‚ค๋ณด๋“œ ์ž…๋ ฅ์„ ๋ฐœ์ƒ์‹œ์ผœ ํ™”๋ฉด ๋ณดํ˜ธ๊ธฐ๋‚˜ ์ ˆ์ „ ๋ชจ๋“œ ์ง„์ž…์„ ๋ฐฉ์ง€ํ•ด์ค๋‹ˆ๋‹ค.


๐Ÿ’ก ์–ด๋–ค ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์š”?

  • โœ… 5์ดˆ๋งˆ๋‹ค ๋งˆ์šฐ์Šค๋ฅผ ์•ฝ๊ฐ„ ์›€์ง์—ฌ ์‚ฌ์šฉ ์ค‘์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์ธ์‹์‹œํ‚ด
  • โœ… Shift ํ‚ค ์ž…๋ ฅ์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐœ์ƒ์‹œ์ผœ ํ‚ค๋ณด๋“œ ํ™œ๋™๋„ ๊ฐ์ง€์‹œํ‚ด
  • โœ… ์‹œ์ž‘/์ค‘์ง€ ๋ฒ„ํŠผ์œผ๋กœ ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์„ ์ˆ˜๋™ ์ œ์–ด
  • โœ… GUI๋กœ ์‰ฝ๊ฒŒ ์กฐ์ž‘ ๊ฐ€๋Šฅ (Tkinter ์‚ฌ์šฉ)

๐Ÿ”ง ์‚ฌ์šฉ๋œ ๊ธฐ์ˆ  ์Šคํƒ

ํ•ญ๋ชฉ ์„ค๋ช…
Python ๊ธฐ๋ณธ ์–ธ์–ด
Tkinter GUI ํ™”๋ฉด ๊ตฌ์„ฑ
PyAutoGUI ๋งˆ์šฐ์Šค ๋ฐ ํ‚ค๋ณด๋“œ ์ œ์–ด
threading ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ์ฒ˜๋ฆฌ
messagebox ์‚ฌ์šฉ์ž ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ

๐Ÿงช ์ฃผ์š” ์ฝ”๋“œ ์„ค๋ช…

๐Ÿ“Œ 1. ๋งˆ์šฐ์Šค ๋ฐ ํ‚ค๋ณด๋“œ ํ™œ๋™ ํ•จ์ˆ˜

5์ดˆ๋งˆ๋‹ค ๋งˆ์šฐ์Šค๋ฅผ ์‚ด์ง ์›€์ง์ด๊ณ , Shift ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ ์ปดํ“จํ„ฐ๊ฐ€ ์œ ํœด ์ƒํƒœ๋กœ ์ธ์‹๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

def prevent_screensaver():
    while preventing:
        pyautogui.move(1, 0)  # ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1ํ”ฝ์…€
        pyautogui.move(-1, 0) # ์™ผ์ชฝ์œผ๋กœ 1ํ”ฝ์…€
        pyautogui.press('shift')  # Shift ํ‚ค ์ž…๋ ฅ
        time.sleep(5)

๐Ÿ“Œ 2. ๋ฐฉ์ง€ ์‹œ์ž‘/์ค‘์ง€ ์ œ์–ด

"Start" ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ๋™์ž‘์„ ์‹œ์ž‘ํ•˜๊ณ , "Stop" ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์ž‘์—…์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

def start_prevention():
    global preventing
    preventing = True
    threading.Thread(target=prevent_screensaver, daemon=True).start()

๐Ÿ“Œ 3. GUI ๊ตฌ์„ฑ (Tkinter)

๋ฒ„ํŠผ ๊ตฌ์„ฑ:

  • โœ… Start Prevention
  • โŒ Stop Prevention
  • โ›” Exit
    root = tk.Tk()
    root.title("ํ™”๋ฉด ๋ณดํ˜ธ๊ธฐ ๋ฐฉ์ง€ ๋„๊ตฌ")
    root.geometry("700x380")

๐Ÿ–ผ๏ธ ์‹คํ–‰ ํ™”๋ฉด ๋ฏธ๋ฆฌ ๋ณด๊ธฐ

  • ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด ๊น”๋”ํ•œ ์ฐฝ์ด ๋œจ๊ณ  ๋ฒ„ํŠผ 3๊ฐœ๋กœ ์‰ฝ๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด์š”.
  • "Start" ํด๋ฆญ ์‹œ 5์ดˆ๋งˆ๋‹ค ์ž…๋ ฅ์ด ์ž๋™ ๋ฐœ์ƒํ•ด ํ™”๋ฉด ๋ณดํ˜ธ๊ธฐ๋ฅผ ๋ง‰์•„์ค๋‹ˆ๋‹ค.

๐Ÿ›ก๏ธ ์ฃผ์˜์‚ฌํ•ญ

  • pyautogui.FAILSAFE = False ์„ค์ •์œผ๋กœ ๋งˆ์šฐ์Šค๋ฅผ ๊ตฌ์„์— ์˜ฌ๋ ค๋„ ์ข…๋ฃŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋Šฅ์„ ๋ฉˆ์ถ”๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ "Stop Prevention"์„ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”.

๐Ÿ“ฅ ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์ข‹์•„์š”!

์šฉ๋„ ์˜ˆ์‹œ
๐Ÿ’ป ์›๊ฒฉ ๊ทผ๋ฌด ํšŒ์˜ ์ค‘ ํ™”๋ฉด ๊บผ์ง ๋ฐฉ์ง€
๐ŸŽž๏ธ ์˜์ƒ ์†ก์ถœ ๋ฐฉ์†ก ์ค‘๋‹จ ๋ฐฉ์ง€
๐ŸŽค ๋ฐœํ‘œ ์Šฌ๋ผ์ด๋“œ ๋ฐœํ‘œ ์ค‘ ์ ˆ์ „ ๋ชจ๋“œ ๋ฐฉ์ง€
๐Ÿ“ฝ๏ธ ๋ฌด์ธ ์‹œ์—ฐ ์†๋Œ€์ง€ ์•Š์•„๋„ ์‹œ์—ฐ ํ™”๋ฉด ์œ ์ง€

๐Ÿ“Ž ๊ฒฐ๋ก 

์ด ์ž‘์€ ํ”„๋กœ๊ทธ๋žจ ํ•˜๋‚˜๋ฉด ์ปดํ“จํ„ฐ๊ฐ€ ์œ ํœด ์ƒํƒœ๋กœ ๊ฐ„์ฃผ๋˜๋Š” ๊ฑธ ๋ง‰์„ ์ˆ˜ ์žˆ์–ด ์ •๋ง ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ดˆ๋ณด์ž๋ผ๋„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก GUI๊นŒ์ง€ ๊ตฌ์„ฑํ–ˆ์œผ๋‹ˆ, ์—…๋ฌด๋‚˜ ์‹ค์Šต ์ค‘ ๊ผญ ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”!


๐Ÿ“Œ ์ „์ฒด ์ฝ”๋“œ์™€ ์‹คํ–‰ ํŒŒ์ผ(.exe) ์ƒ์„ฑ ๋ฐฉ๋ฒ•์€ ์ถ”ํ›„ ๊ณต์œ ๋“œ๋ฆด ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•