Avatar billede orca Nybegynder
24. august 2006 - 00:52 Der er 2 kommentarer og
1 løsning

Screenshot af ikke aktivt vindue

Hep

Jeg har til et projekt behov for at tage et screenshot af et vindue der ikke er aktivt/synligt. Dvs. vinduet kan være (delvist) skjult bag andre vinduer, eller være (delvist) uden for skærmområdet. Vinduet vil ikke være minimeret, omend jeg ikke forestiller mig det har den store indflydelse på problemet.

At skaffe et screenshot af et aktivt/synligt vindue er trivielt, problemet opstår dog når hele vinduet ikke er synligt da den usynlige del forbliver hvid/sort da denne del naturligvis ikke bliver paintet.

Jeg har forsøgt mig med at invalidere det resterende område via SendMessage() og invalidate beskeder men uden at få noget brugbart resultat.

Det er ikke plausibelt at flytte vinduet ind i et synligt område imens billedet tages - hvorefter det flyttes væk igen - vinduet må ikke flyttes.

Jeg forestiller mig at løsningen ligger i enten at hooke ind i den DC som vinduet benytter, force en paint og opfange resultatet eller på anden måde hacke sig til en løsning. Sprog er underordnet.
Avatar billede orca Nybegynder
24. august 2006 - 02:22 #1
Jeg fik det løst.
Avatar billede ibleif Nybegynder
24. august 2006 - 07:46 #2
Har selv ligget med den problemstilling tidligere, så kunne være spændende at høre hvad du fandt frem ti ?

// Ibleif
Avatar billede orca Nybegynder
24. august 2006 - 11:51 #3
IntPtr hDC = Win32.GetWindowDC((IntPtr)Handle);
IntPtr hDCDest = Win32.CreateCompatibleDC(hDC);
IntPtr hBitmap = Win32.CreateCompatibleBitmap(hDC, width, height);
IntPtr hOld = Win32.SelectObject(hDCDest, hBitmap);
Win32.PrintWindow((IntPtr)Handle, hDCDest, 0);
Win32.SelectObject(hDCDest, hOld);
Win32.DeleteDC(hDCDest);
Win32.ReleaseDC((IntPtr)Handle, hDC);
Bitmap screenshot = Bitmap.FromHbitmap(hBitmap);
Win32.DeleteObject(hBitmap);
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
Kurser inden for grundlæggende programmering

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