Toon posts:

[vb] GetPixel op Internet Exploer

Pagina: 1
Acties:

Verwijderd

Topicstarter
probeer dit eens voor de grap:

code:
1
2
3
4
5
6
7
8
9
10
11
12
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long

Sub Form_Activate()
    Dim a_hWnd As Long, a_hDC As Long
    a_hWnd = FindWindow("IEFrame", vbNullString)
    Print a_hWnd
    a_hDC = GetDC(a_hWnd)
    Print a_hDC
    Print GetPixel(a_hDC, 5, 5)
End Sub


Open een internet explorer en voer em uit. GetPixel geeft een -1 terug. Als je bij FindWindow een andere classname opgeeft, bv "Winamp EQ", werkt het wel! Maar goed, ik probeer een bepaalde pixel van IE te krijgen, hoe gaat mij dit wel lukken? Is dit toevallig een beveiliging van internet explorer ofzo, api calls vanuit andere processen blokkeren ofzoiets?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Lees GetPixel docs en dan vooral dit stukje:
Return Values
The return value is the RGB value of the pixel. If the pixel is outside of the current clipping region, the return value is CLR_INVALID.
Oftewel het slaat nergens op wat je zegt, selecteer een clipping region in IE's DC en jij krijgt netjes die pixel terug.

Professionele website nodig?


  • barber
  • Registratie: Oktober 2001
  • Niet online
Dat komt volgens mij doordat je als class IEFrame hebt. Dat is niets anders dan de place holder voor andere windows (controls) binnen je IE. Op positie (5,5) staat een ander control. Daardoor valt punt (5,5) buiten de clipping range voor de window met class IEFrame. De window die de webpagina bevat is in IE6 trouwens "Internet Explorer_Server". Als je dat gebruikt, werkt je code wel.

edit:

Met het tooltje SPY++ wat standaard bij visual studio zit, kan je precies zien uit welke windows IE bestaat en wat de classnames zijn.

[ Voor 19% gewijzigd door barber op 10-07-2003 23:06 ]


Verwijderd

Topicstarter
ik weet van het bestaan van Spy++, uiteraard, maar ik zie nergens Internet explorer_server staan? waar staat dat dan?

Verwijderd

Topicstarter
lama, heb em al

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
    a_hWnd = FindWindow("IEFrame", vbNullString)
    Print Hex(a_hWnd)
    a_hWnd = FindWindowEx(a_hWnd, ByVal 0&, "Shell DocObject View", vbNullString)
    Print Hex(a_hWnd)
    a_hWnd = FindWindowEx(a_hWnd, ByVal 0&, "Internet Explorer_Server", vbNullString)
    Print Hex(a_hWnd)
    a_hDC = GetDC(a_hWnd)
    Print Hex(a_hDC)
    Print GetPixel(a_hDC, 5, 5)


hij vindt nu wel de juiste Wnd, maar GetPixel geeft nog steeds -1

modbreak: 3 keer achter elkaar posten binnen 10 minuten wordt hier gezien als onnodig kicken. NIET kicken binnen 24 uur aub, en als je wat toe te voegen hebt voordat iemand anders heeft gereplied staat er zo'n mooi editknopje rechtsbovenin je bericht

[ Voor 28% gewijzigd door curry684 op 11-07-2003 00:25 ]


  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 18:53

RayNbow

Kirika <3

Weet je echt zeker dat je de juiste hWnd, etc, hebt? Wat je kan doen is de coordinaten van de pixel waarvan je de kleur wilt weten omzetten naar schermcoordinaten en deze schermcoordinaten gebruiken om de juiste hWnd te krijgen met behulp van WindowFromPoint.

Zie ook dit voorbeeld: [vb.net] GetPixel kleur

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Verwijderd

Topicstarter
kijk maar met Spy++, die 3e geprinte hWnd komt overeen met de wnd van Internet Explorer_Server in spy++. En nee, dat weet ik niet zeker, ik heb het van barber, niet van een help file ofzo
Pagina: 1