2012-04-03 30 views
5

Có thể hiển thị trong một cửa sổ ứng dụng (tối đa) màn hình trực tiếp của một ứng dụng khác đang chạy đồng thời.Hiển thị màn hình trực tiếp của các ứng dụng khác trong một cửa sổ ứng dụng

Tôi có ý tưởng khái niệm sau đây (xem ảnh chụp màn hình bên dưới): ứng dụng chính đang hiển thị trong khi nhiều ứng dụng excel đang chạy đồng thời. Thay vì nhấp (hoặc tabbing) giữa các ứng dụng hoặc thay đổi kích thước các cửa sổ này để được hiển thị trên màn hình, tôi muốn đơn giản chỉ có ứng dụng chính được phóng to để hiển thị màn hình cuộc sống của tất cả các sổ làm việc excel đã mở này.

enter image description here

+0

Tôi thích ý tưởng. Bằng cách nào đó nó sẽ là có thể, thanh tác vụ trong W7 có (phần nào) chức năng như thế này. –

+0

Đối với ứng dụng của tôi, tôi sẽ cần phải xác định phải làm gì tiếp theo theo "hành vi" hoặc "ngoại hình" của ứng dụng khác không được định lượng bằng dữ liệu vv và phải được xác định bằng mắt. Nó sẽ là một nỗi đau liên tục lật qua các ứng dụng (hoặc tabbing). – KMC

Trả lời

3

tôi sử dụng các cuộc gọi định kỳ để PrintWindow cho điều đó.

Tôi không hoàn toàn hài lòng với giải pháp này vì có vẻ hơi khó hiểu. Nhưng nó cũng quét các cửa sổ ẩn.

Mã này là

[DllImport("User32.dll")] 
public static extern bool PrintWindow(IntPtr hWnd, IntPtr hdcBlt, int nFlags 

[StructLayout(LayoutKind.Sequential)] 
struct RECT 
{ 
    public int Left; 
    public int Top; 
    public int Right; 
    public int Bottom; 
} 

public static Bitmap GetWindow(IntPtr hWnd) 
{ 
    RECT rect; 
    GetWindowRect(hWnd, out rect); 

    int width = rect.Right - rect.Left; 
    int height = rect.Bottom - rect.Top; 
    if (width > 0 && height > 0) 
    { 
     // Build device context (dc) 
     Bitmap bmp = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 
     Graphics gfxBmp = Graphics.FromImage(bmp); 
     IntPtr hdcBitmap = gfxBmp.GetHdc(); 

     // drawing options 
     int nFlags = 0; 

     // execute call 
     PrintWindow(hWnd, hdcBitmap, nFlags); 

     // some clean-up 
     gfxBmp.ReleaseHdc(hdcBitmap); 
     gfxBmp.Dispose(); 

     return bmp; 
    } 
    else 
    { 
     return null; 
    } 

} // end function getWindow 
Các vấn đề liên quan