Newsgroup: it.comp.lang.visual-basic
Titolo: SOS problema con le api...

Io voglio fare un programma che mi avverta se sul monitor compare una
determinata sequenza di pixel...
Mi spiego meglio, il mio programma deve inserire in una matrice
bidimensionale le cui 2 dimensioni corrispondono alla risoluzione del
monitor, tutti i colori dei pixel dello schermo. (gia qui non so come
fare...) Una volta ottenuta questa matrice il programma deve scansionare
questi punti e se trova una determinata sequenza di pixel mi deve far
comparire un messaggio...
Vi prego di aiutarmi...
grazie anticipatamente a chiunque mi darà una mano...
ps da come si sarà capito sono abbastanza inesperto nell'uso delle api
quindi se potete nelle spiegazioni non saltate passaggi ke magari vi
sembrano banali ve ne sarei grato

 ha scritto nel messaggio
news:%rnrc.3077$G%.1029@tornado.fastwebnet.it...

inizia da questa:
Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As Long,
ByVal x As Long, ByVal y As Long) As Long
fai una istantanea dello schermo e lo metti in una picturebox o te la
esamini direttamente con l'api getpixel
dipende da quanto in fretta cambia l'immagine...
l'handle del desktop te lo da:
Private Declare Function GetDesktopWindow Lib "USER32" () As Long
studiati in giro o su msdn come inserirlo in una picbox...è semplicissimo!
vabbè va eccotelo qua:
metti le giuste dichiarazioni e metti la seguente riga nell'evento che
genera la cattura del desktop:
Set Picture1.Picture = CaptureScreen()
e questa è la funzione:
Public Function CaptureScreen() As Picture
Dim hWndScreen As Long
hWndScreen = GetDesktopWindow()
With Screen
    Set CaptureScreen = CaptureWindow(hWndScreen, False, 0, 0, _
            .Width \ .TwipsPerPixelX, .Height \ .TwipsPerPixelY)
End With
End Function
ciao
marco


grazie 1000, ora ho il mio form e la picture1 con lo screen del desktop, ora
xo devo fargli analizzare pixel x pixel per poter capire se c'e' la sequenza
di colori che deve far scattare l'allarme.
io avevo fatto una cosa del genere:
dim Matrice(1024, 768)
for X = 0 to 1024
   for Y = 0 to 768
      Matrice(X,Y) = GetPixel(picture1.hdc , X,Y)
   next Y
next X
il problema è che ci mette un sacco di tempo a concludere la procedura e a
volte si blocca pure.
Mi chiedo quindi, non c'e' un modo piu veloce...

"Antonio"
Se ti serve in VB continua a studiare :
http://www.mvps.org/vb/samples.htm#MemoryDC
http://www.mvps.org/vb/samples.htm#Rgb
http://www.allapi.net/cgi-bin/redirect.cgi?place=apiguide
scarica API-GUIDE >>>>>> GetPixel
 ... se ti serve una "cosa veloce " :
http://www.hiddensoft.com/autoit3/
AutoItSetOption("PixelCoordMode", 0)
While 1
sleep (10)
$pix=PixelGetColor(317,99);running in 640*480
; if $pix = 60160 then Send("{ins}")
tooltip($pix,0,0); this will show you what color it sees constantly.
WEnd
;###Description###
;Searches a rectangle of pixels for the pixel color provided.
;###Syntax###
;PixelSearch ( left, top, right, bottom, color [, shade-variation] [, step]]  )
colour
 Colour value of pixel to find (in decimal or hex).
shade-variation
 (Optional) A number between 0 and 255 to indicate the allowed number of shades of variation of the red, green, and blue
components of the colour. Default is 0 (exact match).
step
 (Optional) Instead of searching each pixel use a value larger than 1 to skip pixels (for speed).  E.g. A value of 2 will only
check every other pixel.  Default is 1.
--
Fosco