주로

[fabric] 현재 활성화된 윈도우의 핸들을 PID를 통해 구하기 본문

게임/마인크래프트

[fabric] 현재 활성화된 윈도우의 핸들을 PID를 통해 구하기

_주로 2024. 10. 1. 17:44
반응형
    private static boolean isinitializedHandle = false;
    public static WinDef.HWND hMinecraft;
    public static void inithMinecraft() {
        if(isinitializedHandle)
            return;

        isinitializedHandle = true;
        System.out.println("initialized mincraft handle");

        // 자신의 PID를 얻기
        long pid = ProcessHandle.current().pid();

        // PID로 HWND 얻기
        HWND hwnd = findWindowByPID(pid);
        hMinecraft = hwnd;
        // 여기에 원하는 로직을 추가
    }
    private static HWND findWindowByPID(long pid) {
        final HWND[] hwnd = new HWND[1];

        User32.INSTANCE.EnumWindows((hWnd, arg1) -> {
            // 프로세스 ID를 가져오기
            int processId = getWindowProcessId(hWnd);
            if (processId == pid) {
                hwnd[0] = hWnd;
                return false; // 찾으면 열거를 중지합니다.
            }
            return true; // 계속 열거합니다.
        }, null);

        return hwnd[0];
    }

    // HWND로 프로세스 ID를 얻는 메서드
    private static int getWindowProcessId(HWND hWnd) {
        IntByReference processId = new IntByReference(); // IntByReference 사용
        User32.INSTANCE.GetWindowThreadProcessId(hWnd, processId);
        return processId.getValue(); // 프로세스 ID 반환
    }
반응형
Comments