Quantcast
Channel: 簡睿隨筆
Viewing all articles
Browse latest Browse all 897

[AutoHotkey] 將特定視窗固定顯示在第2螢幕

$
0
0

專案有個需求:在網頁執行的過程中,要把特定的幾個PDF檔固定輸出到第2螢幕。討論後決定寫支公用程式,傳入檔案標題與輸出螢幕來達成這個需求。最後用AutoHotkey很快速的完成此功能(monitor.ahk),再用Ahk2Exe.exe轉成執行檔供需求的程式叫用。

由.ahk產生.exe

ahk2exe /in monitor.ahk /out monitor.exe /bin "Unicode 32-bit.bin"

使用範例

rem 將report1.pdf在第2螢幕顯示
monitor report1.pdf 2

Autohotkey腳本:

檔名為monitor.ahk:

#NoEnv
#NoTrayIcon
SetTitleMatchMode,2

  sFindWindowTitle = %1%  ;; 要輸出的檔案標題
  if (sFindWindowTitle = "") {
    sFindWindowTitle := "report1.pdf"
  }
  sSwitchToMonitor = %2%  ;; 參數2: 要輸出到那個螢幕,預設是第1個螢幕
  if (sSwitchToMonitor = "") {
    sSwitchToMonitor := "1"
  }
  ;;MsgBox 參數=%1% %2%
  SysGet, Mon1, Monitor, 1
  ;;MsgBox, Monitor1 Left: %Mon1Left% -- Top: %Mon1Top% -- Right: %Mon1Right% -- Bottom %Mon1Bottom%.
  SysGet, Mon2, Monitor, 2
  ;;MsgBox, Monitor 2 Left: %Mon2Left% -- Top: %Mon2Top% -- Right: %Mon2Right% -- Bottom %Mon2Bottom%.
  ;; 使用WinTitle找視窗
  IfWinExist, %sFindWindowTitle%
    WinActivate
  else {
    ;;MsgBox %sFindWindowTitle% 未開啟,無法顯示到另一個螢幕
    WinWait, %sFindWindowTitle%, Reader, 10
  }
  WinGetActiveStats, Title, WW, WH, X, Y
  WinGetClass, class, A

  if (sSwitchToMonitor = "1") {
    iWidth := Abs(Mon1Left+Mon1Right)
    if (WW > iWidth) {
      WW := iWidth
    }
    iTop := Mon1Top
    iLeft := (( Mon1Right-Mon1Left - WW ) / 2) +Mon1Left
    ;;MsgBox Monitor 1 WW=%WW%, iWidth=%iWidth%
  } else {
    iWidth := Abs(Mon2Left+Mon2Right)
    ;;MsgBox %WW%, %iWidth%
    if (WW > iWidth) {
      WW := iWidth
    }
    iTop := Mon2Top
    iLeft := (( Mon2Right-Mon2Left - WW ) / 2) +Mon2Left
    ;;MsgBox Monitor 2 WW=%WW%, iWidth=%iWidth%
  }
  ;;MsgBox 顯示 【%sFindWindowTitle%】 到螢幕%sSwitchToMonitor%
  if class != Shell_TrayWnd
    if class != Progman
      if class != DV2ControlHost
        WinMove, A, , iLeft, iTop, WW, WH
  return

##

您可能也會有興趣的類似文章


Viewing all articles
Browse latest Browse all 897

Trending Articles