Hej! Får se om jag fattat rätt. Hej Sven. Är inte ett av argumenten till GetPixel ett handle till fönstret man hämtar pixeln ifrån? Du borde kunna använda FindWindow för att få ett handle till fönstret du vill läsa av. Du kan inte läsa av pixlar som är dolda på det sättet. Hej Johan och Roger! Om du använder XP eller senare (och vem gör inte det idag?) så kan du använda dig av PrintWindow för att få tag en skärmdump av det aktuella fönstret. Detta är hur Vista och Windows 7 gör för att visa de små skärmdumparna av fönstren som visas när du för musen över knapparana i aktivitetsfältet. Observera dock att även då fönstret kan vara helt eller delvis dolt av ett annan fönster så fungerar det *inte* om fönstret är minimerat.GetPixel från ett specifikt fönster
Att kolla färgen på en pixel på skärmen/skärmarna finns det ett flertal exempel av och
det fungerar bra. Det kräver dock att inget att hamnar framför de utvalda
koordinaterna såsom ett annat fönster.
Det jag vill är att kolla en pixel i ett specifikt fönster, som tillhör ett annat program.
Fönstret skall alltså kunna flyttas på skärmen och allra helst kunna vara under/dolt
av ett annat och ev. också kunna förändras i storlek.
Hoppas att någon har ett tips eller lösning.
/PontusSv: GetPixel från ett specifikt fönster
Du vill kolla en pixel bakom ett annat fönster utan att flytta undan det översta ?Sv:GetPixel från ett specifikt fönster
Ja så kan man säga. Det aktuella fönstret kan mycket
väl vara dolt av ett annat. Det vore iaf bra om det gick att
att kunna ha det så.
Om det inte går så åtminstone att man kan välja ut ett fönster
och inte hela skärmen.Sv: GetPixel från ett specifikt fönster
JohanSv: GetPixel från ett specifikt fönster
Du kan dock testa att skicka wm_print till det fönster du vill läsa av.
då kan _ev_ fönstret rendrera sig till den hdc som du skickar med.
alla fönster svarar dock inte på wm_print men om det gör det så fungerar det att läsa av även dolda delar.Sv:GetPixel från ett specifikt fönster
Jag får börja med att försöka att få FindWindow att fungera.
Har inte lyckats än men det skulle underlätta en hel del tror jag.Sv: GetPixel från ett specifikt fönster
Du måste veta vilket hWnd och storlek fönstret har för att detta ska fungera, för detta kan du t.ex använda FindWindow och GetWindowRect till att ta reda på.
Här är ett snabbt exempel på en funktion som returnerar en skärmdump av fönstret som ett Bitmap object. (Deklarationerna av nödvändiga API funktioner får du kolla upp själv).
Public Function GetWindowDump(hWnd As IntPtr, size As Size) As Bitmap
Dim bmp As New Bitmap(size.Width, size.Height)
Dim g As Graphics = Graphics.FromImage(bmp)
Dim dc As IntPtr = g.GetHdc()
PrintWindow(hWnd, dc, 0)
g.ReleaseHdc()
g.Dispose()
Return bmp
End Function
När du väl har denna Bitmap så kan du helt enkelt anropa dess GetPixel metod för att ta reda på färgen.
Observera att ovanstående fångar hela fönstret inkl. titelrad och ram. Vill du bara ha klient-arean så skickar du in konstant värdet PW_CLIENTONLY som tredje argument till PrintWindow funktionen.