2012-04-03 4 views
5

Ist es möglich, in einem Anwendungsfenster (maximierte) Live-Bildschirme von anderen Anwendungen anzuzeigen, die gleichzeitig ausgeführt werden.Live-Bildschirme anderer Anwendungen in einem Anwendungsfenster anzeigen

Ich habe die folgende konzeptionelle Idee (siehe Screenshot unten): Die Hauptanwendung wird angezeigt, während mehrere Excel-Anwendungen gleichzeitig ausgeführt werden. Anstatt zwischen den Anwendungen zu klicken (oder Tabstopps) oder die Größe dieser Fenster so zu ändern, dass sie auf dem Bildschirm angezeigt werden, möchte ich einfach die Hauptanwendung maximieren lassen, um die Lebensseiten aller geöffneten Excel-Arbeitsmappen anzuzeigen.

enter image description here

+0

Ich mag die Idee. Irgendwie sollte es möglich sein, die Taskleiste in W7 hat (etwas) Funktionalität wie diese. –

+0

Für meine Anwendung muss ich bestimmen, was als nächstes zu tun ist, entsprechend dem "Verhalten" oder "Aussehen" anderer Anwendungen, das durch Daten usw. nicht quantifizierbar ist und visuell bestimmt werden muss. Es wird ein Schmerz sein, ständig durch Anwendungen (oder Tabbing) zu blättern. – KMC

Antwort

3

Ich benutze regelmäßig Anrufe PrintWindow dafür.

Ich bin nicht ganz glücklich mit dieser Lösung für es scheint ein bisschen hacky. Aber es scannt auch versteckte Fenster.

Der Code ist

[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 
Verwandte Themen