Development Tip

내 앱이 실행되는 모니터를 결정하는 것은 무엇입니까?

yourdevel 2020. 10. 14. 21:20
반응형

내 앱이 실행되는 모니터를 결정하는 것은 무엇입니까?


Windows를 사용하고 있으며 두 대의 모니터가 있습니다.

일부 응용 프로그램은 언제 닫았는지에 관계없이 항상 기본 모니터에서 시작됩니다.

다른 모니터는 내가 닫았을 때 어디에 있든 상관없이 항상 보조 모니터에서 시작됩니다 .

기본적으로 실행되는 모니터 응용 프로그램을 제어하기 위해 조작 할 수있는 레지스트리 설정이 어딘가에 묻혀 있습니까?

@rp : 저는 Ultramon을 가지고 있으며 Microsoft가 그것을 구입하고 OS에 통합해야 할 때까지 Ultramon이 필수적이라는 데 동의합니다. 그러나 말했듯이 프로그램이 시작되는 기본 모니터를 제어 할 수 없습니다.


실행될 때마다 위치를 저장하려는 올바르게 작성된 Windows 앱은 GetWindowPlacement()종료 전의 결과를 저장 한 다음 SetWindowPlacement()시작시 사용 하여 위치를 복원합니다.

종종 앱은 쉽게 사용할 수 있도록 GetWindowPlacement()레지스트리에 결과를 저장합니다 REG_BINARY.

WINDOWPLACEMENT경로는 다른 방법에 비해 많은 장점이 있습니다.

  • 마지막 실행 이후 화면 해상도가 변경된 경우 처리 : SetWindowPlacement()창이 완전히 화면을 벗어나지 않도록 자동으로 확인합니다.
  • 상태 (최소화 / 최대화)를 저장하지만 복원 된 (일반) 크기 및 위치도 저장합니다.
  • 데스크탑 메트릭을 올바르게 처리하고 작업 표시 줄 위치 등을 보상합니다 (예 : "화면 좌표"대신 "작업 공간 좌표"사용-화면 좌표 저장에 의존하는 기술은 창이 항상 나타나는 "보행 창"문제로 어려움을 겪을 수 있음) 사용자가 화면 상단에 도구 모음이있는 경우 매번 조금씩 낮 춥니 다).

마지막으로 창 복원을 올바르게 처리하는 프로그램 nCmdShow은 쉘에서 전달 된 매개 변수 를 고려합니다 . 이 매개 변수는 애플리케이션을 시작하는 바로 가기 (일반, 최소화, 최대화)에서 설정됩니다.

if(nCmdShow != SW_SHOWNORMAL)
    placement.showCmd = nCmdShow; //allow shortcut to override

Win32가 아닌 응용 프로그램의 경우 창 위치를 저장 / 복원하는 데 사용하는 방법이 결국 동일한 기본 호출을 사용하는지 확인하는 것이 중요합니다. 그렇지 않으면 Java Swing의 setBounds()/ getBounds()문제 와 같이 많은 추가 코드를 작성하게됩니다. 기능에 이미있는 기능을 다시 구현 WINDOWPLACEMENT합니다.


여기 내가 찾은 것이 있습니다. 기본적으로 보조 모니터에서 앱을 열려면 다음을 수행하십시오.

1. Open the application.
2. Re-size the window so that it is not maximized or minimized.
3. Move the window to the monitor you want it to open on by default.
4. Close the application.  Do not re-size prior to closing.
5. Open the application.
   It should open on the monitor you just moved it to and closed it on.
6. Maximize the window.

이제 애플리케이션이 기본적으로이 모니터에서 열립니다. 다른 모니터로 변경하려면 1-6 단계를 다시 따르십시오.


UltraMon을 받으세요. 빨리.

http://realtimesoft.com/ultramon/

앱이 시작되는 모니터를 지정할 수는 없지만 한 번의 마우스 클릭으로 앱을 다른 모니터로 이동하고 종횡비를 그대로 유지할 수 있습니다. 매우 편리한 유틸리티입니다.

대부분의 프로그램은 마지막으로 남겨둔 곳에서 시작됩니다. 따라서 직장에 두 대의 모니터가 있지만 집에 한 대만 있다면 집에서 노트북을 시작하고 다른 모니터 (현재는 존재하지 않음)에서 실행중인 앱을 볼 수 없습니다. UltrMon을 사용하면 고아 앱을 기본 화면으로 빠르고 쉽게 다시 이동할 수 있습니다.


이 질문에 대한 답은 아니지만 Shift + Win + [left,right] arrow keys지름길 로이 문제를 다루었습니다 . 현재 활성 창을 다른 모니터로 이동할 수 있습니다.


기본 모니터가 기본값이라고 확신합니다. 앱이 적절하게 코딩 된 경우 닫히면 마지막 위치를 기억하고 다시 열릴 것이지만, 아시다시피 기본 동작은 아닙니다.

편집 : 내가 일반적으로하는 방법은 앱의 설정에 위치를 저장하는 것입니다. 로드시 값이 없으면 기본값은 화면 중앙입니다. 양식을 닫을 때 위치를 기록합니다. 이렇게하면 열릴 때마다 마지막 위치에 있습니다. 그러나 처음에 두 번째 모니터에서 자동으로 실행되도록하는 간단한 방법을 모르겠습니다.

-케빈 페어차일드


중요 참고 사항 : 응용 프로그램의 위치를 ​​기억하고 종료 한 다음 해당 위치에서 다시 시작하는 경우 응용 프로그램이 닫힌 동안 사용자의 모니터 구성이 변경되었을 수 있습니다.

예를 들어 노트북 사용자는 디스플레이 구성을 자주 변경합니다. 도킹하면 도킹 해제시 사라지는 두 번째 모니터가있을 수 있습니다. 사용자가 두 번째 모니터에서 실행 중이던 응용 프로그램을 닫고 모니터 연결이 끊어졌을 때 응용 프로그램을 다시 열면 창을 이전 좌표로 복원하면 화면이 완전히 사라집니다.

디스플레이가 실제로 얼마나 큰지 알아 보려면 GetSystemMetrics를 확인하십시오.


그래서 Adobe Reader 9.0에서이 문제가 발생했습니다. 어떻게 든 프로그램이 오른쪽 모니터에서 열리는 것을 잊고 왼쪽 모니터에서 지속적으로 열렸습니다. 대부분의 프로그램을 사용하면 드래그하여 화면을 최대화 한 다음 닫을 수 있습니다. 음, Adobe에서는 Windows가 다음에 열 화면을 기억하기 위해 Adobe를 끌어서 최대화하기 전에 닫아야했습니다. 올바른 모니터로 설정하면 최대화 할 수 있습니다. 거의 모든 Windows 프로그램이 XP가 기억할 방법을 조작하지 않고 자동으로 기억하기 때문에 이것은 어리석은 일이라고 생각합니다.


따라서 화면을 최대화하거나 마우스 오른쪽 버튼으로 클릭하고 이동 / 크기 조정하여 한 화면에서 열도록 구성한 다음 닫았다가 다시 열도록 구성 할 수있는 앱이 있다는 데 동의합니다. 그러나 메인 화면에서만 열리는 다른 것들이 있습니다.

해결을 위해 내가 한 일 : 완고한 앱을 열기를 선호하는 모니터를 모니터 1로 설정하고 다른 모니터를 2로 설정 한 다음 모니터 2를 기본으로 변경하여 데스크탑 설정과 시작 표시 줄을 유지하십시오. 도움이 되었기를 바랍니다.


저를 붙들 지 마십시오. 그러나 그것은 응용 프로그램 자체에 달려 있다고 확신합니다. 나는 많은 사람들이 항상 메인 모니터에서 열려 있다는 것을 알고 있으며, 일부는 이전에 실행되었던 동일한 모니터로 다시 열리고 일부는 설정할 수 있습니다. 예를 들어 특정 디렉터리에 대한 명령 창을 열 수있는 바로 가기가 있고 각 디렉터리에는 해당 속성에 창을 열 위치에 대한 옵션이 있습니다. Outlook은 마지막으로 열린 화면에서 기억하고 열립니다. 그런 다음 다른 앱 현재 포커스가있는 창에서 엽니 다.

따라서 모든 프로그램을 열어야 할 위치를 알려주는 방법이 있는지 잘 모르겠습니다. 희망이 있습니다.


I've noticed that if I put a shortcut on my desktop on one screen the launched application may appear on that screen (if that app doesn't reposition itself).

This also applies to running things from Windows Explorer - if Explorer is on one screen the launched application will pick that monitor to use.

Again - I think this is when the launching application specifies the default (windows managed) position. Most applications seem to override this default behavior in some way.

A simple window created like so will do this:

hWnd = CreateWindow(windowClass, windowTitle, WS_VISIBLE | WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, SW_SHOW, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL);


Right click the shortcut and select properties. Make sure you are on the "Shortcut" Tab. Select the RUN drop down box and change it to Maximized.

This may assist in launching the program in full screen on the primary monitor.

참고URL : https://stackoverflow.com/questions/52755/what-determines-the-monitor-my-app-runs-on

반응형