class WinWindow implements OsWindow {
		private HWND hWnd;

		public WinWindow(HWND hWnd) {
			this.hWnd = hWnd;
		}

		@Override
		public OsProcess getProcess() {
			IntByReference pid = new IntByReference();
			user32.GetWindowThreadProcessId(hWnd, pid);

			Optional<ProcessHandle> handle = ProcessHandle.of(pid.getValue());

			if (handle.isPresent()) {
				return new GenericOsProcess(ProcessHandle.of(pid.getValue()).get());
			}

			return null;
		}

		@Override
		public String getTitle() {
			char[] text = new char[1024];
			int length = user32.GetWindowText(hWnd, text, 1024);
			return length > 0 ? new String(text, 0, length) : "";
		}

		@Override
		public Rectangle getBounds() {
			RECT rect = new User32.RECT();
			boolean success = user32.GetWindowRect(hWnd, rect);
			return success ? rect.toRectangle() : null;
		}

		@Override
		public boolean focus() {<FILL_FUNCTION_BODY>}

		@Override
		public boolean minimize() {
			return user32.ShowWindow(hWnd, WinUser.SW_MINIMIZE);
		}

		@Override
		public boolean maximize() {
			return user32.ShowWindow(hWnd, WinUser.SW_MAXIMIZE);
		}

		@Override
		public boolean restore() {
			return user32.ShowWindow(hWnd, WinUser.SW_RESTORE);
		}

		@Override
		public boolean equals(Object other) {
			return other != null && other instanceof WinWindow && this.hWnd.equals(((WinWindow) other).hWnd);
		}
	}

			WinUser.WINDOWPLACEMENT lpwndpl = new WinUser.WINDOWPLACEMENT();

			user32.GetWindowPlacement(hWnd, lpwndpl);

			if (lpwndpl.showCmd == WinUser.SW_SHOWMINIMIZED || lpwndpl.showCmd == WinUser.SW_MINIMIZE) {
				user32.ShowWindow(hWnd, WinUser.SW_RESTORE);
			}

			boolean success = user32.SetForegroundWindow(hWnd);

			if (success) {
				return (user32.SetFocus(hWnd) != null);
			}

			return false;
		
<methods>public non-sealed void <init>() ,public List<org.sikuli.natives.OSUtil.OsProcess> findProcesses(java.lang.String) ,public List<org.sikuli.natives.OSUtil.OsWindow> findWindows(java.lang.String) ,public org.sikuli.natives.OSUtil.OsWindow getFocusedWindow() ,public org.sikuli.natives.OSUtil.OsProcess getProcess() ,public List<org.sikuli.natives.OSUtil.OsProcess> getProcesses() ,public List<org.sikuli.natives.OSUtil.OsWindow> getWindows(org.sikuli.natives.OSUtil.OsProcess) ,public List<org.sikuli.natives.OSUtil.OsWindow> getWindows() ,public void init() ,public boolean isUserProcess(org.sikuli.natives.OSUtil.OsProcess) ,public org.sikuli.natives.OSUtil.OsProcess open(java.lang.String[], java.lang.String) <variables>