VC 在雙顯示器間,移動最大化的視窗

2021-08-24 20:03:50 字數 1600 閱讀 9371

最近公升級成了雙顯示器,

以前只是知道雙顯示器爽,但用過之後才知道,原來這麼爽。

然而美中不足,我也發現了一點小問題,就是我經常有這樣乙個需求:

有乙個程式,已經被最大化了,我要將它從乙個顯示器移動到另乙個顯示器上面,同時仍然保持最大化。

以前要完成這個事情,我需要首先將此程式還原,移動到另乙個顯示器,再將其最大化。

這回的目的就是將這一系列繁瑣的過程自動化掉。 使用vc++ 2008實現。

程式的功能是只要一執行它,就將當前的活動視窗移動到另乙個顯示器上面,並實現最大化。

至於這個程式的執行時機,叫給autohotkey,或者launchy來完成。

首先建立乙個工程,我覺得最合適的模板是:

其實這個型別本無所謂。但我之所以喜歡這個模板是因為:

首先,我不想看到那個黑呼呼的dos視窗,執行這個命令的時候他不美觀不要緊,

更關鍵的是在我去取活動視窗的時候, 會取到他自己。

其次我也不喜歡我這小小的功能還要弄出乙個視窗來(vs2008中mfc的入口貌似又一次被封裝了,我找不到頭了。)

也正因為此,我在建立完上述模板後,做的第一件事情就是將入口:_twinmain的函式體,替換為下面**。

int const width_move  = ::getsystemmetrics(sm_cxscreen);

//if used in autohotkey( set this flag to false.

//if used in launchy ( set this flag to true.

int use_launchy = 0;

if (use_launchy)

//step 02, normalize the target window

hwnd hwnd = ::getforegroundwindow();

::showwindow(hwnd,sw_normal);

//step 03, move window

rect rect;

::getwindowrect(hwnd,&rect);

if (rect.left>=0)

else

::setwindowpos(hwnd,hwnd_top,rect.left, rect.top , rect.right - rect.left ,rect.bottom - rect.top , swp_showwindow);

//step 04, maximize target window again.

::showwindow(hwnd,sw_showmaximized);

這就一切ok啦~ 編譯,然後放到autohotkey,或者launchy裡面行啦~

需要說明的是:

1. 關於上述程式中的常量: width_move

我沒有做仔細的調查,如果兩個顯示器大小不一樣,可能需要調整。

對於我目前的需求,設定成主顯示器的寬度夠用。

2. 關於上述程式中的變數: use_launchy

如果在launchy中使用,我要去的視窗其實是除了launchy以外的最前視窗。

所以我要先把launchy隱藏掉。

ubuntu 連線雙顯示器

我的是雙顯示卡,單顯示卡應該也適用 兩個顯示器的輸入線同時插在主顯示卡我最右邊兩個口就可以了 每個顯示卡自帶4個插口,3個dp,乙個hdmi 我乙個插的dp介面,另乙個插得的hdmi 使用命令檢視連線情況 xrandr screen 0 minimum 8 x 8,current 3840 x 14...

UBUNTU下雙顯示器設定

ubuntu下雙顯示器設定 ubuntu gnome 現在已經能很好的處理雙屏了,無論是轉殖方式還是擴充套件方式!但有時我們需要乙個不同的管理器如awesome fluxbox這類簡單的視窗管理器中又如何設定成雙顯呢?其實也很容易 xrandr就可以了!1 了解設定的名稱 直接執行xrandr 不帶...

Ubuntu下雙顯示器設定

自8.10後的版本,系統自帶了xrandr工具,可以很好的實現雙顯示器。配置與使用如下 介紹 x windows 中有乙個顯示解析度的概念,在預設情況下,這個顯示解析度為 max max max等於你的所有連線上的顯示器中最大解析度中的最大值。例如我的筆記本液晶屏最大解析度為 1024 768,外接...