Avatar billede repsac666 Nybegynder
28. januar 2005 - 17:12 Der er 4 kommentarer og
1 løsning

Tage Screenshot af aktivt vindue - 2

Jeg spurgete tidligere om, hvordan man tager et screenshot af et aktivt vindue og jeg fik linket: http://www.developerfusion.com/show/4630/
, hvilket også fungerer når man tager et screenshot af hele skærmen. Nu skal jeg kunne tage et screenshot af af kun det aktive vindue og for at gøre dette skal man bruge et handle. Dette ved jeg ikke hvordan man får fat i i det er ikke forklaret yderligere på siden.

Her er den metode der skulle tage et billede af et vindue (hele koden kan findes uden linket ovenfor):

        public Image CaptureWindow(IntPtr handle)
        {
            // get te hDC of the target window
            IntPtr hdcSrc = User32.GetWindowDC(handle);
            // get the size
            User32.RECT windowRect = new User32.RECT();
            User32.GetWindowRect(handle,ref windowRect);
            int width = windowRect.right - windowRect.left;
            int height = windowRect.bottom - windowRect.top;
            // create a device context we can copy to
            IntPtr hdcDest = GDI32.CreateCompatibleDC(hdcSrc);
            // create a bitmap we can copy it to,
            // using GetDeviceCaps to get the width/height
            IntPtr hBitmap = GDI32.CreateCompatibleBitmap(hdcSrc,width,height);
            // select the bitmap object
            IntPtr hOld = GDI32.SelectObject(hdcDest,hBitmap);
            // bitblt over
            GDI32.BitBlt(hdcDest,0,0,width,height,hdcSrc,0,0,GDI32.SRCCOPY);
            // restore selection
            GDI32.SelectObject(hdcDest,hOld);
            // clean up
            GDI32.DeleteDC(hdcDest);
            User32.ReleaseDC(handle,hdcSrc);

            // get a .NET image object for it
            Image img = Image.FromHbitmap(hBitmap);
            // free up the Bitmap object
            GDI32.DeleteObject(hBitmap);

            return img;
        }

Er der en der kan hjælpe mig med dette?
Avatar billede driis Nybegynder
28. januar 2005 - 17:57 #1
Du kan bruge GetForegroundWindow til at hente det aktive vindue's handle:

[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
Avatar billede repsac666 Nybegynder
28. januar 2005 - 19:24 #2
Jeps, der var den. Dog kommer der 4 pixels der er sorte med i kanten af billedet når man tager et screenshot af et vindue der er maksimeret, hvordan kommer jeg omkring det?

Hvor finder man for resten ud af hvilke funktioner der er i en dll-fil? Jeg gætter på at der er et program af en eller anden art - eller måske en liste over funktioner der er i windows API'en?
Avatar billede driis Nybegynder
28. januar 2005 - 21:05 #3
Jeg ved ikke lige med de 4 pixels.
Med hensyn til funktioner, er de alle beskrevet på MSDN Library.
http://msdn.microsoft.com/library/

Derudover kan jeg anbefale:
http://pinvoke.net/
For søgning og reference. Der er også funktionserklæringer for de fleste API funktioner, så du ikke selv behøver at hitte ud af datatype konverteringen mellem managed<->unmanaged code.
Avatar billede repsac666 Nybegynder
28. januar 2005 - 22:24 #4
Er der en API funktion der udfører et klik med musen på koordinater som man selv indsætter??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester