NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    Python 파이썬을 이용해서 메모장 프로그램 만들기. (with ChatGPT)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. ChatGPT에 대해 엄청난 관심과 뉴스 및 유튜브 동영상들이 쏟아지고 있습니다. 저도 ChatGPT가 나올 때 간단하게 테스트를 해봤었는데요. 엔지엠 매크로에도 인공지능을 탑재할 수 있을지에 대해 여러가지로 고민중에 있습니다. 지금은 딥러닝, 머신러닝을 이용한 비전 관련한 기능만 들어가 있지만~ 언젠가는 자동으로 업무 자동화 RPA 매크로를 만들어주는 기능을 추가해야 하지 않을까 하는 생각을 하고 있습니다. 물론, 몇년이 걸릴지는 잘 모르겠네요^^;

    [ ChatGPT를 이용한 채팅 만들기 ]

    ESOLV3p.png

     

     

    OpenAI의 답변

    대단히 어렵다. 인공지능은 복잡한 소프트웨어를 구축하거나 기존의 프로그램을 보완하기 위해 프로그래밍 언어를 사용하는 능력이 없다. 
    그러나 인공지능이 미래에 개발자를 완전히 대체하지는 않을 것으로 예상된다. 
    인공지능은 개발자의 일부 업무를 대신해줄 수 있고, 개발자가 개발 작업을 더 효율적으로 수행할 수 있도록 돕는 데 큰 도움이 될 것이다.

     

    우선, 이 글은 파이썬 코딩을 어느정도 할 수 있는 분들을 대상으로 작성되었습니다. Visual Studio Code(VSCode)를 실행하고, 파이썬 환경을 만드세요. 파이썬 개발 환경을 만들려면 아래 글을 참고하세요. 개발 환경이 있다면~ ChatGPT도 실행하세요. 그리고, 아래 그림처럼 검색 해봅니다. 참고로, 답변은 매번 다를 수 있어요^^

    [ 파이썬 개발 하기 ]

    McsyBgA.png

     

     

    잠시 기다리면 파이썬으로 메모장을 만들 수 있는 코딩을 작성 해줍니다. 내용을 볼까요?

     

    ChatGPT

    안녕하세요! 파이썬으로 메모장을 만드는 방법에 대해 설명해드리겠습니다.

    우선, 파이썬에서 파일 입출력을 다루는 기본 함수인 open() 함수를 사용하여 파일을 열고, 사용자가 입력한 내용을 파일에 저장하도록 하겠습니다.

    아래는 간단한 코드 예시입니다.

    # 파일 열기
    file = open("memo.txt", "w", encoding="utf-8")
    
    # 사용자 입력 받기
    memo = input("메모를 입력하세요: ")
    
    # 파일에 쓰기
    file.write(memo)
    
    # 파일 닫기
    file.close()
    

     

    위 코드에서 파일 이름은 "memo.txt"로 설정했으며, 파일 모드는 "w"로 설정하여 쓰기 모드로 열었습니다. 사용자로부터 입력받은 메모는 input() 함수를 사용하여 받았고, 파일에 쓰기 위해 write() 함수를 사용했습니다. 마지막으로 파일을 닫기 위해 close() 함수를 호출했습니다.

    이제는 메모장을 실행시켰을 때, 사용자에게 여러 가지 메뉴를 제공하고 각각의 기능을 수행하는 방식으로 확장해보겠습니다.

    import os
    
    def show_menu():
        print("1. 메모 작성")
        print("2. 메모 열기")
        print("3. 종료")
        menu_choice = input("원하는 메뉴를 선택하세요: ")
        return menu_choice
    
    def write_memo():
        memo = input("메모를 입력하세요: ")
        file = open("memo.txt", "w", encoding="utf-8")
        file.write(memo)
        file.close()
        print("메모가 저장되었습니다.")
    
    def read_memo():
        if os.path.exists("memo.txt"):
            file = open("memo.txt", "r", encoding="utf-8")
            memo = file.read()
            file.close()
            print(memo)
        else:
            print("메모가 존재하지 않습니다.")
    
    while True:
        menu_choice = show_menu()
        if menu_choice == "1":
            write_memo()
        elif menu_choice == "2":
            read_memo()
        elif menu_choice == "3":
            break
        else:
            print("잘못된 입력입니다. 다시 입력해주세요.")
    

     

    위 코드에서는 show_menu() 함수를 통해 메뉴를 보여주고, 사용자가 선택한 메뉴에 따라 write_memo() 함수 또는 read_memo() 함수를 호출합니다. write_memo() 함수는 사용자로부터 메모를 입력받아 파일에 저장하고, read_memo() 함수는 파일을 열어서 저장된 메모를 출력합니다. 마지막으로 사용자가 3번 메뉴를 선택하면 while 루프를 종료합니다.

    이제 위 코드를 실행시키면 간단한 메모장이 실행되며, 사용자는 메모를 작성하거나 저장된 메모를 확인할 수 있습니다.

     

    여기까지가 ChatGPT가 만들어준 내용입니다. 요즘 유튜브를 보면, 블로그 글이나 컨텐츠를 ChatGPT를 이용해서 마구 마구 찍어낼 수 있다고 하더라고요. 위의 내용을 보시면 아시겠지만, 큰 노력없이 기본적인 내용을 ChatGPT로부터 받고 살을 좀 붙이면 근사한 컨텐츠가 뚝딱 만들어질거 같긴합니다. 코드를 Visual Studio Code에 붙여넣기 하고 실행 해볼까요?

     

     

    동영상을 보면 아시겠지만, 간단한 콘솔 프로그램입니다. GUI가 있는 코드를 작성 해달라고 해볼까요? 첫번째 질문에 연장선상이라서 굳이 파이썬을 언급할 필요는 없습니다.

    IeVDJX8.png

     

     

    내용이 방대하지만, 모든 내용을 Visual Studio Code에 붙여넣기하고 실행 해보세요.

    gDqqlJ1.png

     

     

    그럼 이번에는~ HDD/SSD의 시리얼 번호를 변경하는 스푸퍼(Spoofer) 프로그램을 한번 만들어 볼까요? 흠... 예상밖이군요. ChatGPT가 윤리적이기까지 합니다. 놀랍네요-_-;

    efCbAuk.png

     

     

    그러면 이번에는 오토핫키를 우회시켜주는 프로그램을 만들어 달라고 해보겠습니다. 이건 만들어주겠죠?

    gTyy5Ic.png

     

     

    포기하지 않고, 계속해서 필요한(?) 프로그램을 만들어달라고 요구 해봅시다.

    InsqVwO.png

     

     

    ChatGPT는 저랑 안맞는거 같습니다. 전체적인 프로그램은 만들어줄 수 없겠지만~ 어디에 사용할지 알 수 없는 상황에서 각각의 기능들만 만들어달라고 요구 해보겠습니다. 각각의 기능들을 조합해서 완성된 프로그램을 만드는건 쉬운 일이니까요. 오~ 이건 해주는군요^^

    WuMG26U.png

     

    PostMessage 함수를 사용하여 마우스 클릭 함수를 만들 수 있습니다. 아래는 간단한 예제 코드입니다.

    import win32api
    import win32con
    import win32gui
    
    # 클릭할 위치의 좌표값(x, y) 설정
    x = 500
    y = 500
    
    # 마우스를 클릭할 위치로 이동
    win32api.SetCursorPos((x, y))
    
    # 마우스 클릭 이벤트 생성
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, x, y, 0, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, x, y, 0, 0)
    
    # 포스트 메시지를 사용한 마우스 클릭 이벤트 생성
    WM_LBUTTONDOWN = 0x0201
    WM_LBUTTONUP = 0x0202
    w_handle = win32gui.FindWindow(None, "창 제목")  # 클릭할 창의 제목 입력
    win32gui.PostMessage(w_handle, WM_LBUTTONDOWN, 0, x + y*65536)
    win32gui.PostMessage(w_handle, WM_LBUTTONUP, 0, x + y*65536)
    

     

    위 코드에서는 먼저 SetCursorPos 함수를 사용하여 마우스를 클릭할 위치로 이동합니다. 그 다음 mouse_event 함수를 사용하여 마우스 클릭 이벤트를 생성합니다. 마지막으로 PostMessage 함수를 사용하여 생성한 이벤트를 포스트합니다. 이를 통해 WM_LBUTTONDOWNWM_LBUTTONUP 메시지를 이용해 마우스 클릭 이벤트를 생성할 수 있습니다. 코드에서는 클릭할 창의 제목을 입력하여 해당 창에서 마우스 클릭을 실행합니다.

     

    C#으로 만들어달라고 해봤습니다.

    C#으로 마우스 클릭 함수를 만들기 위해서는 Win32 API를 사용해야 합니다. 아래는 C# 코드 예시입니다.

    using System;
    using System.Runtime.InteropServices;
    
    namespace MouseClickExample
    {
        class Program
        {
            [DllImport("user32.dll")]
            private static extern bool SetCursorPos(int x, int y);
    
            [DllImport("user32.dll")]
            private static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, IntPtr dwExtraInfo);
    
            [DllImport("user32.dll")]
            private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    
            [DllImport("user32.dll")]
            private static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
    
            private const uint WM_LBUTTONDOWN = 0x0201;
            private const uint WM_LBUTTONUP = 0x0202;
            private const uint MOUSEEVENTF_LEFTDOWN = 0x0002;
            private const uint MOUSEEVENTF_LEFTUP = 0x0004;
    
            static void Main(string[] args)
            {
                int x = 500; // 클릭할 위치의 X 좌표
                int y = 500; // 클릭할 위치의 Y 좌표
    
                // 마우스를 클릭할 위치로 이동
                SetCursorPos(x, y);
    
                // 마우스 클릭 이벤트 생성
                mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, x, y, 0, IntPtr.Zero);
    
                // 포스트 메시지를 사용한 마우스 클릭 이벤트 생성
                IntPtr hWnd = FindWindow(null, "창 제목"); // 클릭할 창의 제목 입력
                PostMessage(hWnd, WM_LBUTTONDOWN, IntPtr.Zero, new IntPtr(x + y * 65536));
                PostMessage(hWnd, WM_LBUTTONUP, IntPtr.Zero, new IntPtr(x + y * 65536));
            }
        }
    }
    

     

    위 코드에서는 DllImport를 사용하여 Win32 API 함수를 선언합니다. SetCursorPos 함수를 사용하여 마우스를 클릭할 위치로 이동하고, mouse_event 함수를 사용하여 마우스 클릭 이벤트를 생성합니다. 마지막으로 PostMessage 함수를 사용하여 WM_LBUTTONDOWNWM_LBUTTONUP 메시지를 이용해 마우스 클릭 이벤트를 생성합니다. 클릭할 창의 제목을 입력하여 해당 창에서 마우스 클릭을 실행합니다.

     

    코드는 완벽합니다. 훼이크나 어떤 문제가 발생할만한 코드는 없네요. 다만, 써먹기에는 무리가 있어서 위 코드를 참고해서 함수 정도는 만들 수 있을거 같습니다. 매크로 프로그램을 만드는게 이렇게 쉽다니~ 이제 간단하게 조합해서 만들 수 있는 프로그램들은 설자리를 잃어갈거 같습니다. 이제 개발자들은 코딩 기술이 느는게 아니라 ChatGPT에 질문하는 요령? 기술? 이런것들이 늘어날거 같네요. 하는김에 C++도 코드를 짜달라고 해봤습니다.

    C++로 마우스 클릭 함수를 만들기 위해서는 Win32 API를 사용해야 합니다. 아래는 C++ 코드 예시입니다.

    #include <Windows.h>
    
    void MouseClick(int x, int y) {
        // 마우스를 클릭할 위치로 이동
        SetCursorPos(x, y);
    
        // 마우스 클릭 이벤트 생성
        INPUT input = {};
        input.type = INPUT_MOUSE;
        input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP;
        input.mi.dx = x;
        input.mi.dy = y;
        SendInput(1, &input, sizeof(INPUT));
    
        // 포스트 메시지를 사용한 마우스 클릭 이벤트 생성
        HWND hWnd = FindWindow(NULL, L"창 제목"); // 클릭할 창의 제목 입력
        PostMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x, y));
        PostMessage(hWnd, WM_LBUTTONUP, 0, MAKELPARAM(x, y));
    }
    
    int main() {
        int x = 500; // 클릭할 위치의 X 좌표
        int y = 500; // 클릭할 위치의 Y 좌표
    
        MouseClick(x, y);
    
        return 0;
    }
    

     

    위 코드에서는 SetCursorPos 함수를 사용하여 마우스를 클릭할 위치로 이동하고, SendInput 함수를 사용하여 마우스 클릭 이벤트를 생성합니다. 마지막으로 PostMessage 함수를 사용하여 WM_LBUTTONDOWNWM_LBUTTONUP 메시지를 이용해 마우스 클릭 이벤트를 생성합니다. 클릭할 창의 제목을 입력하여 해당 창에서 마우스 클릭을 실행합니다.

     

    완벽합니다-_-; 정말 개발자가 사라질지도 모르겠네요. 몇년 후에는 코딩 학원에서 ChatGPT로 프로그램을 제작하기 위한 질문 방법과 코드를 어떻게 합쳐서 제품을 만들지에 대해 알려주지 않을까 생각합니다. 얼마 남지 않은 미래에 창의적이지 않은 직업들은 대부분 사라지지 않을까하는 걱정도 있지만, 한편으로는 사람이 일하지 않아도 살아갈 수 있는 세상이 오지 않을까하는 희망도 가지고 있습니다. 빨리 귀농(귀촌)해서 작은 텃밭을 가꾸면서 등산, 자전거 여행등등... 남은 시간들을 보냈으면 좋겠네요^^

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.