Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: elmatador2 en 6 Julio 2016, 07:52 am



Título: mouse (x, y) de un picture, ayuda porfas
Publicado por: elmatador2 en 6 Julio 2016, 07:52 am
hola gente, tengo este codigo que va pixel por pixel en la pantalla viendo el color y en un color determinado hace click, modifique el codigo para q no sea moviendo el mouse buscando el color, que lo busque de forma automatica... ahora necesito que al encontrar el color valla a esa posicion, pero se me va a la posicion de la pantalla entera, pero si modifico la parte del codigo resaltado no funciona de la forma q necesito... tiene q ver las aplicaciones que estan sobre ese picture tambien para tomar sus colores... este es el codigo...
Código
  1. Private Sub Timer1_Timer()
  2. Dim tPOS As POINTAPI
  3. Dim sTmp As String
  4. Dim lColor As Long
  5. Dim lDC As Long
  6.  
  7. For tPOS.y = Picture1.ScaleHeight = 0 To Picture1.ScaleHeight - 1
  8.  
  9. For tPOS.x = Picture1.ScaleWidth = 0 To Picture1.ScaleWidth - 1
  10.  
  11. lDC = GetWindowDC(0)
  12.  
  13.  
  14.  
  15. Call GetPixel(HDC, tPOS.x, tPOS.y)       ' este                <---------------------
  16.  
  17.  
  18.  
  19.  
  20. lColor = GetPixel(Picture1.HDC, tPOS.x, tPOS.y)
  21.  
  22. sTmp = Right$("000000" & Hex(lColor), 6)
  23. Me.Caption = "  R:" & Right$(sTmp, 2) & " G:" & Mid$(sTmp, 3, 2) & " B:" & Left$(sTmp, 2)
  24. Label1.Caption = "" & tPOS.x & " - " & tPOS.y & ""
  25. If Right$(sTmp, 2) = "FF" And Mid$(sTmp, 3, 2) = "FF" And Left$(sTmp, 2) = "FF" Then
  26.    Click tPOS
  27.  Espera (5)
  28. End If
  29.  
  30. If tPOS.x = 320 Then Stop
  31. If tPOS.y = 6 Then Stop
  32.  
  33.  
  34. Espera (0.011)
  35. Next tPOS.x
  36. Espera (0.011)
  37. Next tPOS.y
  38.  
  39.  
  40. End Sub


y esta es la parte del mouse

Código
  1. Private Sub Click(p As POINTAPI)
  2. 'p.X and p.Y in absolute coordinates
  3. 'Put the mouse on the point
  4. SetCursorPos p.x, p.y 'esta parte me lleva a (x, Y) pero de la pantalla completa y necesito q tome las coordenadas dentro del picture 1
  5.  
  6. mouse_event MOUSEEVENTF_ABSOLUTE, p.x, p.y, 0, GetMessageExtraInfo()
  7.  
  8. mouse_event MOUSEEVENTF_LEFTDOWN, p.x, p.y, 0, GetMessageExtraInfo()
  9.  
  10. mouse_event MOUSEEVENTF_LEFTUP, p.x, p.y, 0, GetMessageExtraInfo()
  11. End Sub
  12.  
espero se entienda mi conflicto, desde ya muchas gracias.


Título: Re: mouse (x, y) de un picture, ayuda porfas
Publicado por: tincopasan en 7 Julio 2016, 06:01 am
Creo que estás haciendo mucho copy-paste.
1)Intenta creando dos variables globales como POSX y POSY y otra sobre= boolean
2)dentro de la función del picturebox.mousemove asigna a posx = x y posy=y , a sobre true
3)dentro form.mousemove sobre = false
4)ahora dentro de la función click crea unas condiciones:
si sobre = verdadero mostrá posx y posy
sino
mostra x y 


Título: Re: mouse (x, y) de un picture, ayuda porfas
Publicado por: elmatador2 en 7 Julio 2016, 07:04 am
gracias por responder, no se si se entendio bien lo q hice... falta parte del codigo... en el picture meto una aplicacion ejecutada. la cual si solo tomo el X, Y del picture no me toma el ejecutable dentro de el, por eso tome las que ocupa el picture pero por fuera, y al momento de indicar al mouse que se posicione en el picture (cuando automaticamente encontro un punto del color especifico), por ejemplo en el punto "0" del picture, esas coordenadas me manda al punto "0" de la pantalla en su lugar...

Código
  1. Private Sub Command1_Click()
  2.  
  3. If sobre = True Then Print posx, posy
  4. Print X, Y
  5.  
  6. End Sub
  7.  
  8. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  9. sobre = False
  10. End Sub
  11.  
  12.  
  13. Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  14. posx = X
  15. posy = Y
  16. sobre = True
  17. End Sub
  18.  


este es el codigo q me dijiste, pero no veo como ponerlo en lo que yo verdaderamente necesito.
creo que no es lo que busco, yo quiero hacer que el puntero del mouse se mueva automaticamete al punto del picture encontrado, pero de la forma que lo hago me manda al punto que necesito, pero en vez de ser del picture lo hace en el form. o capas yo no veo como implementarlo, de ser asi podrias guiarme un poco?


Título: Re: mouse (x, y) de un picture, ayuda porfas
Publicado por: tincopasan en 7 Julio 2016, 08:04 am
¿me estás charlando con lo de command1? y es más que obvio que falta code
Código
  1. Private Sub Click(p As POINTAPI)
  2. 'p.X and p.Y in absolute coordinates
  3. 'Put the mouse on the point
  4. SetCursorPos p.x, p.y 'esta parte me lleva a (x, Y) pero de la pantalla completa y necesito q tome las coordenadas dentro del picture 1
  5.  
  6. mouse_event MOUSEEVENTF_ABSOLUTE, p.x, p.y, 0, GetMessageExtraInfo()
  7.  
  8. mouse_event MOUSEEVENTF_LEFTDOWN, p.x, p.y, 0, GetMessageExtraInfo()
  9.  
  10. mouse_event MOUSEEVENTF_LEFTUP, p.x, p.y, 0, GetMessageExtraInfo()
  11. End Sub
  12.  

Código
  1. Private Sub Click(p As POINTAPI)
  2. 'p.X and p.Y in absolute coordinates
  3. 'Put the mouse on the point
  4. if sobre = True then
  5.         SetCursorPos p.posx, p.posy 'esta parte me lleva a (x, Y) pero de la pantalla completa y necesito   tome las coordenadas dentro del picture 1
  6.  
  7. mouse_event MOUSEEVENTF_ABSOLUTE, p.x, p.y, 0, GetMessageExtraInfo()
  8.  
  9. mouse_event MOUSEEVENTF_LEFTDOWN, p.x, p.y, 0, GetMessageExtraInfo()
  10.  
  11. mouse_event MOUSEEVENTF_LEFTUP, p.x, p.y, 0, GetMessageExtraInfo()
  12. else
  13. etc. para no repetir
  14. end if
  15. End Sub
  16.  
  17.  
  18.  


Título: Re: mouse (x, y) de un picture, ayuda porfas
Publicado por: elmatador2 en 7 Julio 2016, 09:20 am
perdon, pero sigue llevandome al punto incorrecto, es mas... sigue saliendo de los terminos del picture1 lo q quiero es q respete su:
Código
  1. For tPOS.y = Picture1.ScaleHeight = 0 To Picture1.ScaleHeight - 1
  2.  
  3. For tPOS.x = Picture1.ScaleWidth = 0 To Picture1.ScaleWidth - 1
  4.  
  5.  


Título: Re: mouse (x, y) de un picture, ayuda porfas
Publicado por: Eleкtro en 8 Julio 2016, 00:15 am
Hola

Según he entendido, el problema es que medianle el algoritmo de iteración de píxeles del picturebox, obtienes unas coordenadas de la pantalla, pero tu quieres obtener las coordenadas dentro del area cliente de ese control picturebox?.

Sea como sea, puedes traducir un punto de la pantalla a un punto del área cliente de ese picturebox, y viceversa, utilizando las siguientes funciones win32 según el tipo de punto que tengas como referencia:
  • ScreenToClient function - MSDN (https://msdn.microsoft.com/en-us/library/windows/desktop/dd162952%28v=vs.85%29.aspx)
  • ClientToScreen function - MSDN (https://msdn.microsoft.com/en-us/library/windows/desktop/dd183434%28v=vs.85%29.aspx)

Un ejemplo de uso escrito en VB.NET para traducir unas coordenadas del área cliente de un control, a la pantalla:

Código
  1. Dim pcbHwnd As IntPtr = Me.PictureBox1.Handle
  2. Dim scrPt As Win32Point
  3.  
  4. NativeMethods.ClientToScreen(pcbHwnd, scrPt)
  5. Cursor.Position = scrPt

PD: Esto en VB.NET sería más simple y sin recurrir a código no administrado, pero por el código que has publicado deduzco que estás utilizando el antiguo VB6.

Saludos


Título: Re: mouse (x, y) de un picture, ayuda porfas
Publicado por: elmatador2 en 8 Julio 2016, 07:11 am
si, muchas gracias por tu respuesta, si es vb6... ahi me pongo a leer esa funcion. gracias por tu ayuda.