2008-09-09 23 views
72

Tôi đang sử dụng Windows và tôi có hai màn hình.Điều gì quyết định màn hình ứng dụng của tôi chạy?

Một số ứng dụng sẽ luôn luôn bắt đầu trên màn hình chính của tôi, bất kể chúng ở đâu khi tôi đóng chúng.

Các thiết bị khác sẽ luôn bắt đầu trên màn hình phụ phụ, bất kể chúng ở đâu khi tôi đóng chúng.

Có cài đặt đăng ký được chôn ở đâu đó, mà tôi có thể thao tác để kiểm soát ứng dụng màn hình nào được khởi chạy theo mặc định không?

@rp: Tôi có Ultramon và tôi đồng ý rằng điều đó là không thể thiếu, đến mức mà Microsoft nên mua và kết hợp nó vào hệ điều hành của họ. Nhưng như bạn đã nói, nó không cho phép bạn điều khiển màn hình mặc định mà chương trình khởi chạy.

+2

Ultramon là một tiện ích phải có. Tôi đã sử dụng nó trong nhiều năm. – AMissico

+0

Câu hỏi có lưu lượng truy cập cao này bắt đầu giống như một quảng cáo cho Ultramon. DisplayFusion cũng nên được đề cập. Tôi không liên kết với công ty, chỉ yêu thích những gì sản phẩm làm cho tôi. Một thứ ba nổi tiếng là "Nhiều màn hình thực tế" – zx81

+1

@ zx81: Điều đáng chú ý là khi tôi viết lại vào năm '08, tôi đã có cửa sổ xp. UltraMon là hữu ích sau đó, nhưng tôi không thể xác minh cho nó theo các phiên bản mới hơn của Windows. – JosephStyons

Trả lời

38

Các ứng dụng Windows được viết chính xác muốn lưu vị trí của chúng từ khi chạy đến sẽ lưu kết quả của GetWindowPlacement() trước khi tắt, sau đó sử dụng SetWindowPlacement() khi khởi động để khôi phục vị trí của chúng.

Thông thường, các ứng dụng sẽ lưu trữ kết quả của GetWindowPlacement() trong sổ đăng ký dưới dạng REG_BINARY để dễ sử dụng.

Tuyến WINDOWPLACEMENT có nhiều ưu điểm so với các phương pháp khác:

  • Xử lý trường hợp độ phân giải màn hình đã thay đổi kể từ khi chạy lần cuối: SetWindowPlacement() sẽ tự động đảm bảo rằng cửa sổ không phải là hoàn toàn offscreen
  • Tiết kiệm nhà nước (giảm thiểu/tối đa) nhưng cũng lưu kích thước và vị trí đã được khôi phục (bình thường)
  • Xử lý chính xác số liệu máy tính để bàn, bù cho vị trí thanh tác vụ, v.v. (tức là sử dụng "tọa độ không gian làm việc" thay vì "tọa độ màn hình") trên màn hình tiết kiệm tọa độ có thể gặp phải sự cố "cửa sổ đi bộ" nơi cửa sổ sẽ luôn xuất hiện thấp hơn một chút nếu người dùng có thanh công cụ ở đầu màn hình).

Cuối cùng, các chương trình xử lý khôi phục cửa sổ đúng cách sẽ tính đến thông số nCmdShow được truyền từ trình bao. Thông số này được thiết lập trong các phím tắt mà ra mắt ứng dụng (Bình thường, Giảm thiểu, Maximize):

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

Đối với các ứng dụng phi-Win32, điều quan trọng là phải chắc chắn rằng phương pháp mà bạn đang sử dụng để lưu/khôi phục vị trí cửa sổ cuối cùng sử dụng cùng một cuộc gọi cơ bản, nếu không (như vấn đề setBounds()/của Java Swing), bạn sẽ phải viết nhiều mã bổ sung để triển khai lại chức năng đã có trong các chức năng WINDOWPLACEMENT.

+0

Cảm ơn câu trả lời hay. Sử dụng thông tin này, ít nhất tôi có thể tự thiết lập một số chương trình để khởi chạy ở một nơi cụ thể, nếu tôi muốn. – JosephStyons

+0

Cũng cần lưu ý rằng SetWindowPlacement() nên kiểm tra xem vị trí đó có thực sự tồn tại hay không.Một kịch bản phổ biến là đặt một máy tính xách tay vào giấc ngủ trong khi nó kết nối với màn hình kép, và sau đó đánh thức nó lên sau với chỉ một, trong trường hợp không gian màn hình ảo nhỏ hơn đáng kể. – JosephStyons

4

Tôi khá chắc chắn màn hình chính là mặc định. Nếu ứng dụng được mã hóa một cách rõ ràng, khi ứng dụng được đóng, nó sẽ nhớ vị trí cuối cùng và sẽ mở lại ở đó, nhưng - như bạn đã nhận thấy - đó không phải là hành vi mặc định.

EDIT: Cách tôi thường làm là đặt vị trí được lưu trữ trong cài đặt của ứng dụng. Khi tải, nếu không có giá trị cho chúng, nó mặc định là trung tâm của màn hình. Khi đóng biểu mẫu, nó ghi lại vị trí của nó. Bằng cách đó, bất cứ khi nào nó mở ra, đó là nơi mà nó là cuối cùng. Tôi không biết một cách đơn giản để nói với nó để khởi động vào màn hình thứ hai lần đầu tiên tự động, tuy nhiên.

- Kevin Fairchild

0

Đừng ôm em này nhưng tôi khá chắc chắn nó phụ thuộc vào ứng dụng nó tự. Tôi biết nhiều người luôn luôn mở trên màn hình chính, một số sẽ mở lại cho cùng một màn hình mà họ đã từng chạy, và một số bạn có thể thiết lập. Tôi biết ví dụ tôi có các phím tắt để mở cửa sổ lệnh đến các thư mục cụ thể, và mỗi có một tùy chọn trong thuộc tính của họ đến vị trí để mở cửa sổ. Trong khi Outlook chỉ nhớ và mở trong màn hình cuối cùng nó được mở. mở trong cửa sổ bao giờ mà tiêu điểm hiện tại đang ở.

Vì vậy, tôi không chắc chắn có cách nào để nói cho mọi chương trình mở. Hy vọng rằng sẽ giúp một số.

10

Tải UltraMon. Mau.

http://realtimesoft.com/ultramon/

Nó không cho phép bạn chỉ định những gì giám sát một ứng dụng bắt đầu từ ngày, nhưng nó cho phép bạn di chuyển một ứng dụng vào màn hình khác, và giữ tỉ lệ của nó còn nguyên vẹn, với một cú click chuột. Nó là một tiện ích rất tiện dụng.

Hầu hết các chương trình sẽ bắt đầu từ nơi bạn cuối cùng rời khỏi chúng. Vì vậy, nếu bạn có hai màn hình tại nơi làm việc, nhưng chỉ có một ở nhà, nó có thể bắt đầu bạn máy tính xách tay ở nhà và không nhìn thấy các ứng dụng đang chạy trên màn hình khác (mà bây giờ không có). UltrMon cũng cho phép bạn di chuyển các ứng dụng mồ côi đó trở lại màn hình chính một cách nhanh chóng và dễ dàng.

+0

Tôi sử dụng UltraMon tại nhà riêng và cơ quan. Không biết làm thế nào mọi người sống mà không có nó, thực sự. lol. Đôi khi có thể hơi lúng túng khi sử dụng Thanh tác vụ thông minh nhưng hoạt động đủ tốt và thường đủ để tôi gắn bó với nó. - Kevin Fairchild –

+0

Trang web tacky là gì. Đó là năm 2009 người! Nhưng sản phẩm thú vị. Cảm ơn bạn đã liên kết :) – nlaq

+0

Tôi đang ở trong tình huống chính xác này - một máy tính xách tay được gắn với màn hình kép tại nơi làm việc, nhưng chỉ một màn hình máy tính xách tay nhỏ khi tôi vắng mặt. Thật đáng ngạc nhiên khi một ứng dụng tải trong một khu vực được sử dụng để hiển thị - MS Outlook là một trong những kẻ phạm tội lớn nhất. Tôi sẽ nhận được một bản sao của Ultramon và hy vọng nó làm cho cuộc sống dễ dàng hơn một chút. Cảm ơn! – SqlRyan

0

tôi đã nhận thấy rằng nếu tôi đặt một shortcut trên desktop của tôi trên một màn hình ứng dụng đưa ra có thể xuất hiện trên màn hình (nếu ứng dụng mà không đặt lại vị trí riêng của mình).

Điều này cũng áp dụng để chạy những thứ từ Windows Explorer - nếu Explorer ở trên một màn hình, ứng dụng được khởi chạy sẽ chọn màn hình đó để sử dụng.

Một lần nữa - Tôi nghĩ đây là khi ứng dụng khởi chạy chỉ định vị trí mặc định (cửa sổ được quản lý). Hầu hết các ứng dụng dường như ghi đè hành vi mặc định này theo một cách nào đó.

Một cửa sổ đơn giản tạo ra như vậy sẽ làm điều này:

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

3

Lưu ý quan trọng: Nếu bạn nhớ vị trí của ứng dụng và tắt máy rồi khởi động lại ở vị trí đó, hãy nhớ rằng cấu hình màn hình của người dùng có thể đã thay đổi trong khi ứng dụng của bạn bị đóng.

Người dùng máy tính xách tay, ví dụ, thường xuyên thay đổi cấu hình hiển thị của họ. Khi được cập nhật, có thể có màn hình thứ 2 biến mất khi không được khóa. Nếu người dùng đóng một ứng dụng đang chạy trên màn hình thứ 2 và mở lại ứng dụng khi màn hình bị ngắt kết nối, việc khôi phục cửa sổ về các tọa độ trước đó sẽ tắt hoàn toàn màn hình.

Để tìm hiểu xem màn hình hiển thị lớn như thế nào, hãy xem GetSystemMetrics.

53

Đây là những gì tôi đã tìm thấy.Nếu bạn muốn ứng dụng mở trên màn hình phụ theo mặc định, hãy thực hiện theo các bước sau:

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. 

Ứng dụng này giờ sẽ mở trên màn hình này theo mặc định. Nếu bạn muốn thay đổi nó sang màn hình khác, chỉ cần làm theo các bước 1-6 lần nữa.

+1

Cảm ơn điều này thực sự làm việc. một nhận xét tôi muốn thêm là nếu ứng dụng được khởi chạy bởi một chương trình, ví dụ: khởi chạy IE, bạn phải khởi chạy iexplore và làm theo những gì TryingToHelp được liệt kê. nó hoạt động. trong trường hợp của tôi, tôi có một chương trình được lập lịch tác vụ khởi chạy IE với một url nhất định làm tham số. thay đổi kích thước và di chuyển IE này được khởi chạy bởi công cụ lập lịch tác vụ không giúp ích gì. – yantaq

+0

Không làm việc cho tôi trên Win7, thật không may. Các bước 1-5 làm việc, và nếu tôi không tối đa hóa, chương trình (TeXstudio) bắt đầu trên màn hình thích hợp. Ngay sau khi tôi tối đa hóa và sau đó đóng, bắt đầu tiếp theo sẽ xảy ra trên màn hình khác. –

+0

Tôi có thể làm việc này cho một số ứng dụng, nhưng trên Windows 10 PowerShell luôn bắt đầu trên màn hình máy tính xách tay của tôi, không bao giờ trên màn hình bên ngoài mà tôi muốn nó bắt đầu. – Nate

2

Vì vậy, tôi đã gặp sự cố này với Adobe Reader 9.0. Bằng cách nào đó chương trình đã quên mở trên màn hình bên phải của tôi và luôn mở trên màn hình bên trái của tôi. Hầu hết các chương trình cho phép bạn kéo nó qua, phóng to màn hình, và sau đó đóng nó ra và nó sẽ nhớ. Vâng, với Adobe, tôi đã phải kéo nó qua và sau đó đóng nó trước khi tối đa hóa nó, để cho Windows để nhớ màn hình để mở nó trong thời gian tới. Một khi bạn đặt nó vào màn hình chính xác, sau đó bạn có thể tối đa hóa nó. Tôi nghĩ rằng điều này là ngu ngốc, vì hầu như tất cả các chương trình cửa sổ đều tự động nhớ nó mà không cần cố gắng sắp xếp một cách để XP nhớ.

+0

Đã không thực sự trả lời câu hỏi, nhưng đã giúp tôi :) –

1

Vì vậy, tôi đồng ý có một số ứng dụng bạn có thể định cấu hình để mở trên một màn hình bằng cách phóng to hoặc nhấp chuột phải và di chuyển/kích cỡ màn hình, sau đó đóng và mở lại. Tuy nhiên, có những người khác sẽ chỉ mở trên màn hình chính.

Những gì tôi đã làm để giải quyết: đặt màn hình bạn thích các ứng dụng bướng bỉnh để mở, như màn hình 1 và màn hình khác của bạn làm 2, sau đó thay đổi màn hình 2 thành thiết bị chính. thanh vẫn còn. Hi vọng điêu nay co ich.

9

Đó không phải là câu trả lời chính xác cho câu hỏi này nhưng tôi đã giải quyết vấn đề này với lối tắt Shift + Win + [left,right] arrow keys. Bạn có thể di chuyển cửa sổ hiện đang hoạt động sang một màn hình khác với nó.

+0

Điều này làm việc cho tôi nhưng không có phím Shift i.e Win + [trái, phải] - đã giúp tôi khi làm việc với một màn hình và ứng dụng mở trên một thiếu! – Dazed

+0

Lưu ý quan trọng: Nếu bạn sử dụng kỹ thuật này, cửa sổ sẽ không lưu vị trí cửa sổ hiện tại. Bạn phải di chuyển/thay đổi kích thước cửa sổ ít nhất một lần bằng chuột để đạt được điều này. –

-3

Nhấp chuột phải vào phím tắt và chọn thuộc tính. Đảm bảo bạn đang ở trên tab "Lối tắt". Chọn hộp thả xuống RUN và thay đổi thành Maximized.

Điều này có thể hỗ trợ khởi chạy chương trình ở chế độ toàn màn hình trên màn hình chính.

+3

Điều này không thực sự trả lời câu hỏi và đây là câu hỏi * cũ *. – Ajean

Các vấn đề liên quan