|
31
|
Programación / Programación Visual Basic / Re: Clickear sin mover mouse
|
en: 16 Agosto 2011, 02:24 am
|
Creo que te está faltando el Hwnd del control al que le querés enviar el click, y también las coordenadas ( No de pantalla sino del control) en la que queres que llegue el click, por eso te sugerí leér y practicar con ClientToScreen, GetWindowRect, GetClientRect entre otras (para tener idea de coordenadas de pantalla y coordenadas de controles), y tambien tener una idea de como obtener el manejador de ventanas y controles (Hwnd) con FindWindow o FindWindowEx entre otras, para enviarles mensajes con SendMessage o PostMessage por ejemplo. Por ultimo te digo que no todas las ventanas son iguales y algunas son dificiles de entrarle, amigo, si no lo entendiste con el ejemplo q te dejé ... no podría explicarte todo esto.
|
|
|
34
|
Programación / Programación Visual Basic / Re: Clickear sin mover mouse
|
en: 15 Agosto 2011, 21:26 pm
|
Olvidate del segundo código... el pimer codigo va en un Form, eso es lo que pediste, como mandar un Click por coordenadas sin mover el mouse !!!
PD: Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Nunca puede ir en un Módulo...
|
|
|
36
|
Programación / Programación Visual Basic / Re: Clickear sin mover mouse
|
en: 15 Agosto 2011, 20:28 pm
|
Option Explicit Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Sub Form_Load() ScaleMode = 3 Timer1.Interval = 16 End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Static CountClickX15Y15 As Long If Button = vbLeftButton And x = 15 And y = 15 Then CountClickX15Y15 = CountClickX15Y15 + 1 Caption = CountClickX15Y15 End If End Sub Function Make_lParam(ByVal x As Integer, ByVal y As Integer) As Long Make_lParam = x Or (y * &H10000) End Function Private Sub Timer1_Timer() Call SendMessage(Me.hwnd, &H201, &H0&, Make_lParam(15, 15)) Call SendMessage(Me.hwnd, &H202, &H0&, Make_lParam(15, 15)) End Sub
|
|
|
37
|
Programación / Programación Visual Basic / Re: pulsaciones de teclas, fallan...
|
en: 9 Agosto 2011, 01:14 am
|
es un juego... con estos de proteccion bajo nProtect... enviarle comando directamente no sirve... y el teclado virtual (teóricamente) envía pulsaciones a la ventana activa... el asunto es que si lo dejo automático no hace nada, sin tocar mas nada ni modificar nada hago click sobre el teclado virtual y mágicamente si funciona... (y con otro programa fuera del juego las pulsaciones por software si están funcionando) tanta posibilidad tiene un programa para saber que las pulsaciones que van a otro son reales o no :s
Private Sub Command1_Click() Dim hWnd As Long 'hWnd = FindWindow(vbNullString, "Sin título: Bloc de notas") hWnd = FindWindow(vbNullString, Text1.Text) Print hWnd Call PostMessage(hWnd, WM_KEYDOWN, VK_F1, 0&) Call PostMessage(hWnd, WM_KEYUP, VK_F1, 0&) End Sub
Probaste activando la ventana del juego (SetForegroundWindow) antes de enviar el mensaje ? Option Explicit Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long Private Const WM_KEYDOWN = &H100 Private Const WM_KEYUP = &H101 Private Const VK_SPACE = &H20 Private Const VK_F1 = &H70 Private Sub Command1_Click() Dim hWnd As Long hWnd = FindWindow(vbNullString, Text1.Text) Print hWnd Call SetForegroundWindow(hWnd) Call PostMessage(hWnd, WM_KEYDOWN, VK_F1, 0&) Call PostMessage(hWnd, WM_KEYUP, VK_F1, 0&) End Sub
|
|
|
40
|
Programación / Programación Visual Basic / Re: No logro encontrar handle a SysListView32 de taskmanager
|
en: 9 Julio 2011, 06:36 am
|
por eso no entiendo bien que hace esto: HwTab = FindWindowEx(HwndTask, 0, "SysTabControl32", vbNullString) If SendMessage(HwTab, &H1300 + 11, 0, 0) = 1 Then Estoy chequeando que el Tab Control es 1 (procesos)
el de Aplicaciones por ejemplo sería 0 (cero) If SendMessage(HwTab, &H1300 + 11, 0, 0) = 0 Then
Private Const TCM_FIRST = &H1300 Private Const TCM_GETCURSEL = (TCM_FIRST + 11)
' Este es el Hwnd del TabControl (Pestañas de Aplicaciones, Procesos, rendimiento, Funciuones de Red, Usuarios) HwTab = FindWindowEx(HwTask, 0, "SysTabControl32", vbNullString)Y aquí chequeas que la Pestaña activa del TabControl sea igual a uno (la de procesos, que es la que contiene el SyslistView32 que te interesa,) If SendMessage(HwTab, &H1300 + 11, 0, 0) = 1 Thenhttp://msdn.microsoft.com/en-us/library/bb760583(v=vs.85).aspxAclaracion: seria mas facil usar FindWindow en lugar de la Function HwndTask Dim HwTask As Long Dim HwChild As Long Dim HwTab As Long Dim HwLv As Long HwTask = FindWindow("#32770", vbNullString) ' FindWindow en lugar de la Function HwndTask If HwTask <> 0 Then HwTab = FindWindowEx(HwTask, 0, "SysTabControl32", vbNullString) If SendMessage(HwTab, &H1300 + 11, 0, 0) = 1 Then HwChild = FindWindowEx(HwTask, 0, "#32770", vbNullString) HwLv = FindWindowEx(HwChild, 0, "SyslistView32", vbNullString) End If End If
Pero como hay mas ventanas en el sistema con la misma Disposición, (Por ejemplo Propiededes de Pantalla en XP), esto podría prestarse a errores y darte una mala información. Por eso en este caso es preferible usar la la Function HwndTask. http://foro.elhacker.net/programacion_visual_basic/no_logro_encontrar_handle_a_syslistview32_de_taskmanager-t332950.0.html;msg1636759#msg1636759
|
|
|
|
|
|
|