2012-04-03 1 views
5

Можно ли показывать в одном окне приложения (максимально) живые экраны других приложений, которые работают одновременно.Показать живые экраны других приложений в одном окне приложения

У меня есть следующая концептуальная идея (см. Ниже снимок экрана): основное приложение отображается, пока несколько приложений excel работают одновременно. Вместо того, чтобы нажимать (или накладывать табуляции) между приложениями или изменять размер этих окон, которые будут отображаться на экране, я хотел бы просто увеличить максимальное приложение, чтобы показать жизненные экраны всех этих открытых книг Excel.

enter image description here

+0

Мне нравится эта идея. Как-то это должно быть возможно, панель задач в W7 имеет (несколько) функциональность, подобную этой. –

+0

Для моего приложения мне нужно будет определить, что делать дальше в соответствии с «поведением» других приложений или «взглядами», которые не поддаются количественной оценке данными и т. Д. И должны определяться визуально. Будет болью постоянно перелистывать приложения (или табуляции). – KMC

ответ

3

Я использую периодические вызовы на PrintWindow для этого.

Я не совсем доволен этим решением, поскольку он кажется немного взломанным. Но он также сканирует скрытые окна.

Код

[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 
Смежные вопросы