2015-12-19 5 views
6

Ich möchte eine SS-Anwendung machen. Aber ich habe Probleme mit diesem Thema. Ich möchte, dass der Benutzer in der Lage ist, einen speziellen Bereich für die Bildschirmaufnahme auszuwählen. Ich möchte auch, dass der Desktop aktiv ist, während der Benutzer den Bereich auswählt. Zum Beispiel möchte der Benutzer ein SS eines Video-spezifischen Rahmens nehmen. Der Benutzer muss dazu in der Lage sein, während das Video abgespielt wird. Ich habe dies mit der Zeichnung direkt auf dem Desktop versucht. Aber es flackert so sehr. Wie kann ich das beheben oder gibt es einen alternativen Weg?Wie mache ich einen Screenshot Bereich Auswahl durch Zeichnen auf dem Desktop, um Screenshot zu machen?

Mein Code:

[DllImport("User32.dll")] 
    static extern IntPtr GetDC(IntPtr hwnd); 

    [DllImport("user32.dll")] 
    static extern bool InvalidateRect(IntPtr hWnd, IntPtr lpRect, bool bErase); 

    public Form1() 
    { 
     InitializeComponent(); 
     this.Load += Form1_Load; 
    } 

    void Form1_Load(object sender, EventArgs e) 
    { 
     Start(); 
    } 

    IntPtr handle; 
    Graphics grp; 

    void Start() 
    { 
     handle = GetDC(IntPtr.Zero); 
     grp = Graphics.FromHdc(handle); 
     grp.SmoothingMode = SmoothingMode.HighQuality; 
     timer2.Start(); 
    } 
    private void timer2_Tick(object sender, EventArgs e) 
    { 

     grp.DrawLine(Pens.Red, 0, Cursor.Position.Y, Screen.PrimaryScreen.Bounds.Width, Cursor.Position.Y); 
     InvalidateRect(IntPtr.Zero, IntPtr.Zero, false); 
    } 
+3

FYI - [Greenshot] (http://getgreenshot.org/) tut es, und es ist frei und Open-Source-.NET-Code. Sie können nur auf ihren Code "spähen". – ja72

Antwort

5

erstellen Form mit halbtransparenten (oder transparent) Hintergrund, die immer-on-top ist, randlos und in der Größe des Desktops. Erstellen Sie Screenshot-Rechteck-Auswahlgrafiken (z. B. ausgewähltes Rechteck + Hilfslinien + Lupe, vollständig undurchsichtig) auf diesem Formular. Wenn die Auswahl vom Benutzer getroffen wurde, blende das Formular aus und nimm den Screenshot.

+1

Wenn ich nicht falsch verstanden habe, ist das Zeichnen auf halbtransparent wieder so transparent wie das Formular. Wenn ich die Deckkraft des Formulars auf 0.1 setze, scheint das Auswahlrechteck nicht lebendig zu sein. Auf der anderen Seite konnte ich die Zeichnung auf völlig transparenter Form nicht erreichen. Können Sie ein Codebeispiel geben? –

+1

@AliTor - Ich weiß, ich habe das in meiner ursprünglichen Erklärung vereinfacht. Semi-transparente Form würde funktionieren, wie Sie sagen, aber besser Ansatz ist undurchsichtige Form mit transparentem Hintergrund - so nur seine Kontrollen (z. B. Richtlinien oder Auswahlrahmen) opak bleiben. Sie können sich einige vorhandene Tools ansehen, die diesen Ansatz erfolgreich verwenden, z. SnagIt. – miroxlav

+1

Ok, ich habe es getan. Ich lag falsch bei dem Unterschied zwischen der Einstellung der Deckkraft und der Einstellung der Transparenztaste für Transparenz. Ich habe es getan, die Hintergrundfarbe des Formulars als Transparenzschlüsselwert festzulegen. Danke @miroxlav. –

Verwandte Themen