• Viernes 26 de Abril de 2024, 22:04

Autor Tema:  Sendkeys  (Leído 2208 veces)

ElNapster

  • Moderador
  • ******
  • Mensajes: 727
    • Ver Perfil
Sendkeys
« en: Jueves 19 de Abril de 2007, 20:06 »
0
Que tal .... tengo una pregunta... como puedo yo enviarle yo a un proceso especifico un SendKeys "%{N}" , pero por decirles si estoy haciendo otra cosa y ocurre esa funcion me lo hace en la ventana donde estoy... pero yo quisera que no importe donde este .. y el SendKeys "%{N}" se envie al proceso que yo le diga ...  :P
Se podra hacer eso ???  :o

Gracias ... :smartass:
"Somos lo que imaginamos ser"
-- --------------------------------------------------------------
-ElNapster
-Designer / Developer Software
-GuaTemALa



Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Sendkeys
« Respuesta #1 en: Jueves 19 de Abril de 2007, 20:48 »
0
Buenas.

Se me ocurre que con un Sendmessage lo puedes hacer.
Mandando como mensaje las constantes WM_KEYUP y WM_KEYDOWN.

El unico problema es que la aplicacion debe tener la subclasificacionactivada.

No estoy muy seguro de esto, tal vez con un simpre WM_COMMAND se pueda lograr.

La aplicacion a la que le quieres mandar la tecla, es tuya, o es cualquier otra?

Voy a buscar si encuentro mas data de lo q te dije, y te digo.

Saludos  :hola:

-------------------
Aqui tengo algo:
Código: Text
  1.  
  2. Public 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
  3. Public Const WM_KEYDOWN = &H100
  4.  
  5.  

y luego llamanas
Código: Text
  1.  
  2. Call PostMessage(hwnd, WM_KEYDOWN, ascii, 0)
  3.  
  4.  

Espero sirva, saludos

(El postmessage no necesita subclasificacion)
The sweet smell of a great sorrow lies over the land.


ElNapster

  • Moderador
  • ******
  • Mensajes: 727
    • Ver Perfil
Re: Sendkeys
« Respuesta #2 en: Jueves 19 de Abril de 2007, 22:03 »
0
Thank's ..

Citar
La aplicacion a la que le quieres mandar la tecla, es tuya, o es cualquier otra?

Si es una aplicacion mia, o sea que yo quiero que cuando este yo posicionado en otra parte que no sea mi aplicacion , al momento que me salgo un msgbox de mi aplicaion el automaticamente el envio un sendkey ...... pero actualmente se lo esta enviando ala aplicacion que este abierta ...  :ph34r:

Gracias  :hola:
"Somos lo que imaginamos ser"
-- --------------------------------------------------------------
-ElNapster
-Designer / Developer Software
-GuaTemALa



F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Sendkeys
« Respuesta #3 en: Viernes 20 de Abril de 2007, 04:21 »
0
Hay una funcion que se llama Appactivate(titulo,espera)

Sirve para activar una ventana por el titulo puede ser que te sirva


Código: Text
  1.  
  2. Private Sub Command1_Click()
  3.     Shell "notepad.exe", vbNormalFocus
  4.     AppActivate "Untitled - Notepad"
  5.     SendKeys "Enviado de desde VB"
  6. End Sub
  7.  
  8.  

Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

ElNapster

  • Moderador
  • ******
  • Mensajes: 727
    • Ver Perfil
Re: Sendkeys
« Respuesta #4 en: Viernes 20 de Abril de 2007, 20:07 »
0
Citar
Hay una funcion que se llama Appactivate(titulo,espera)

Sirve para activar una ventana por el titulo puede ser que te sirva



CODE 

Private Sub Command1_Click()
   Shell "notepad.exe", vbNormalFocus
   AppActivate "Untitled - Notepad"
   SendKeys "Enviado de desde VB"
End Sub
 



Saludos

Fijate que si me funciona , pero cuando ya la ejecuto por varias veces como que se va poniendo algo loco jajaja.... porque ya no me hace nada ... yo esto trabajando con el Winzip , y cuando me da una alerta de un archivo tipo GZ le tengo que enviar "N" y tiene que seguir su proceso normal ... pero no me funciona :( no saber otra forma u otro comando que me pueda servir de referencia ?  :scream:

Gracias  :smartass:
"Somos lo que imaginamos ser"
-- --------------------------------------------------------------
-ElNapster
-Designer / Developer Software
-GuaTemALa



Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Sendkeys
« Respuesta #5 en: Viernes 20 de Abril de 2007, 21:30 »
0
Buenas.

Cuando te salga la alerta, puedes intentar cojer su handle con la api findwindow y luego mandarle una pulsacion con postmessage.


Saludos  :hola:
The sweet smell of a great sorrow lies over the land.


ElNapster

  • Moderador
  • ******
  • Mensajes: 727
    • Ver Perfil
Re: Sendkeys
« Respuesta #6 en: Viernes 20 de Abril de 2007, 22:28 »
0
:D  tendras un ejemplin por alli ?
 :rolleyes:
Thnks
"Somos lo que imaginamos ser"
-- --------------------------------------------------------------
-ElNapster
-Designer / Developer Software
-GuaTemALa



Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Sendkeys
« Respuesta #7 en: Viernes 20 de Abril de 2007, 22:51 »
0
Aqui hay un pequeño ejemplo.
No es de lo mejor xD ya que usa un timer, pero puede servir.

Saludos  :hola:

---

Esto no deja adjuntar rars  <_<
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
The sweet smell of a great sorrow lies over the land.


ElNapster

  • Moderador
  • ******
  • Mensajes: 727
    • Ver Perfil
Re: Sendkeys
« Respuesta #8 en: Viernes 20 de Abril de 2007, 23:47 »
0
Sulicionado compañeros !!!!!!!
les pongo el codigo por si a alguien le interesa


En un Modulo
Código: Text
  1. Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2. Public Const GW_HWNDNEXT = 2
  3.  
  4. Public Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
  5. Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
  6. Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  7. Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
  8. Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwprocessid As Long) As Long
  9.  
  10. Function ProcIDFromWnd(ByVal hwnd As Long) As Long
  11.    Dim idProc As Long
  12.    GetWindowThreadProcessId hwnd, idProc
  13.    ProcIDFromWnd = idProc
  14. End Function
  15.      
  16. Function GetWinHandle(hInstance As Long) As Long
  17.    Dim tempHwnd As Long
  18.    tempHwnd = FindWindow(vbNullString, vbNullString)
  19.    Do Until tempHwnd = 0
  20.       If GetParent(tempHwnd) = 0 Then
  21.          If hInstance = ProcIDFromWnd(tempHwnd) Then
  22.             GetWinHandle = tempHwnd
  23.             Exit Do
  24.          End If
  25.       End If
  26.    
  27.       tempHwnd = GetWindow(tempHwnd, GW_HWNDNEXT)
  28.    Loop
  29. End Function
  30.  

Form  (colocar un boton)
Código: Text
  1.    Dim hInst As Long
  2.    Dim hWndApp As Long      
  3.    Dim buffer As String          
  4.    Dim numChars As Integer  
  5.    
  6.      Sleep 3000
  7.    hInst = Shell("c:\demo\otro.exe") 'yo aca puse este form que me llama un msgbox con yes / no  y lo cancelo con el sendkeys
  8.    
  9.      hWndApp = GetWinHandle(hInst)
  10.    
  11.    If hWndApp <> 0 Then
  12.       ' Init buffer
  13.       buffer = Space$(128)
  14.      
  15.       numChars = GetWindowText(hWndApp, buffer, Len(buffer))
  16.    
  17.        SendKeys "%{N}"
  18.  

Espero les sirva
"Somos lo que imaginamos ser"
-- --------------------------------------------------------------
-ElNapster
-Designer / Developer Software
-GuaTemALa