Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Hasseds

#31
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.  ;)   


#33
Olvidate del codigo del Pinball, ya lo quité para q no te confundas, analizá el codigo que te dejé para entender como mandar un Click a una  coordenada específica de un control  sin mover el mouse !!!
#34
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...





#35
.
#36
Código (vb) [Seleccionar]


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
Cita de: engelx en  8 Agosto 2011, 07:17 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

Cita de: engelx en  7 Agosto 2011, 02:19 AM



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 ?  

Código (vb) [Seleccionar]


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








#38
SendMessage (ByVal lParam As Long)

+

Make_lParam


Código (vb) [Seleccionar]


Function Make_lParam(ByVal x As Integer, ByVal y As Integer) As Long
   Make_lParam = (x And &HFFFF&) Or (y * &H10000)
End Function








#39
Citar

detectarme cuando presiono la "X" para cerrar la ventana??


http://msdn.microsoft.com/en-us/library/ms645618(v=vs.85).aspx




#40
Cita de: Raul100 en  9 Julio 2011, 06:17 AM

por eso no entiendo bien que hace esto:


HwTab = FindWindowEx(HwndTask, 0, "SysTabControl32", vbNullString)
 
If SendMessage(HwTab, &H1300 + 11, 0, 0) = 1 Then






Cita de: Hasseds en  9 Julio 2011, 06:01 AM
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 Then


http://msdn.microsoft.com/en-us/library/bb760583(v=vs.85).aspx




Aclaracion: seria mas facil usar FindWindow en lugar de la Function HwndTask
Código (vb) [Seleccionar]

  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