|
Mostrar Mensajes
|
Páginas: 1 2 3 4 [5] 6 7
|
42
|
Programación / Programación Visual Basic / Re: Píxeles y Bucle For
|
en: 20 Septiembre 2011, 00:51 am
|
mmm... revisá si esto puede servir, en caso q sirva... te toca optimizar. Option Explicit Private Sub Form_Load() Call SetWindowPos(Me.hwnd, -1, 0, 0, 0, 0, &H2 Or &H1) AutoRedraw = True FontBold = True BackColor = &HAA431B ForeColor = vbWhite StartHook End Sub Private Sub Form_Unload(Cancel As Integer) StopHook End Sub
Option Explicit Private Declare Function SetWindowsHookEx Lib "user32.dll" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long Private Declare Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hHook As Long) As Long Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hwnd As Long, ByVal hdc As Long) As Long Private Const WH_MOUSE_LL As Long = 14 Private Type POINTAPI: x As Long: y As Long: End Type Dim hHook As Long Dim lDC As Long Public Sub StartHook() hHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf MouseProc, App.hInstance, &H0&) lDC = GetWindowDC(&H0&) End Sub Public Sub StopHook() Call UnhookWindowsHookEx(hHook) hHook = &H0& Call ReleaseDC(&H0&, lDC) End Sub Private Function MouseProc(ByVal ncode As Long, ByVal wParam As Long, lParam As POINTAPI) As Long Dim lColor As Long lColor = GetPixel(lDC, lParam.x, lParam.y) 'If Not lColor < 0 Then 'Form1.Cls 'Form1.Print Hex(lColor) If lColor = &HAA431B Then Form1.Caption = "SI" Else Form1.Caption = "NO" End If 'End If MouseProc = CallNextHookEx(hHook, ncode, wParam, lParam) End Function
Excelente justo lo que necesitaba! Gracias.
|
|
|
45
|
Programación / Programación Visual Basic / Re: Píxeles y Bucle For
|
en: 19 Septiembre 2011, 00:46 am
|
Jaj no me había fijado en eso, ya lo saqué del bucle pero el problema no era eso sino la sentencia if y el ver el color del pixel actual en donde se encuentra el mouse. Yo pense en ponerlo en un timer el código para verificar el color del pixel pero el bucle for es mucho más rapido que 1 milisegundo (que es el menor intervalo de un timer). Pues entonces digo, hago un hook y que al detectar WM_MOUSEMOVE verifique el color del pixel así estaría a la misma velocidad que el bulce... supongo jej. Pero necesito hacer un hook al mouse, no a mi aplicación y de otra ni hablar ya que tendría que inyectar una DLL... y no en basic . Alguna idea? Saludos.
|
|
|
46
|
Programación / Programación Visual Basic / Re: Píxeles y Bucle For
|
en: 18 Septiembre 2011, 23:45 pm
|
Pues sigo teniendo el mismo problema. El API SetCursorPos no es el problema, ese bucle lo hace en unas milesimas de segundo. El problema es el ver el color del pixel. Gracias igual! Sigo esperando respuestas... P.D: Te importaría darme tu msn?
|
|
|
49
|
Programación / Programación Visual Basic / Píxeles y Bucle For
|
en: 18 Septiembre 2011, 20:40 pm
|
Buenas a todos, estoy realizando una aplicacion la cual en un bucle for recorre, moviende el mouse, una determinada área y al encontrar un píxel con determinado color, se frene. EL PROBLEMA es que, al recorrer el área moviendo el cursor con el bucle previamente mencionado anda todo perfecto, con una rapidez considerable, en cambio cuando "coloco" el código para verificar si encuentra el píxel lo hace un 90% más lento. Este es mi código: Dim iX As Integer Dim iY As Integer Dim hdc As Long, pxColor As Double Call GetCursorPos(Mouse) For iX = Mouse.x To Mouse.x + 100 For iY = Mouse.y To Mouse.y + 75 Call SetCursorPos(iX, iY) 'Hasta acá todo bien, lo que viene ahora es lo que lenta muchísimo mi aplicación... hdc = GetDC(0) pxColor = GetPixel(hdc, Mouse.x, Mouse.y) ReleaseDC 0, hdc Me.Caption = Hex(pxColor) If Me.Caption = "AA431B" Then Exit For End If '// Next iY Next iX
No se cual es el problema, por qué lo hace muchísimo mas lento. Ya que sin verificar el color lo hace en unas milésimas de segundo, y luego con el código para verificar tarda unos 20 o 30 en recorrer el mouse todo el área. Pues ni me imagino cuando haga áreas mas grandes. Saludos.
|
|
|
|
|
|
|