elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Script que deje apretado tecla Shift
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Script que deje apretado tecla Shift  (Leído 3,723 veces)
vampirolicano

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Script que deje apretado tecla Shift
« en: 18 Julio 2017, 15:09 pm »

Hola que tal a todos. queria saber si podrian ayudarme para hacer un script de teclado. He investigado y leido en el foro y lorgre hacer que se precione la tecla shift pero no logro que quede apretada.

Necesito que la tecla Shift quede presionada (es para un juego que manteniendo presionado esa tecla hace una accion)

Código:
Set objshell = createobject("wscript.shell")
Set bloc = objshell.exec("notepad")
Wscript.sleep 2000
Objshell.appactivate bloc.processid
Wscript.sleep 200
Objshell.sendkeys "+"




En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.465


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Script que deje apretado tecla Shift
« Respuesta #1 en: 18 Julio 2017, 17:14 pm »

Hola!

El objeto WshShell no provee una forma de mandar ventos KeyUp y KeyDown. Lo mejor que puedes hacer para obtener lo que quieres, es hacer que la tecla se repita las veces necesarias. Esto lo puedes lograr colocando SendKeys en un loop o poniendo un numero despues de la tecla entre llaves:


Código
  1. Set objshell = createobject("wscript.shell")
  2. Set bloc = objshell.exec("notepad")
  3. Wscript.sleep 2000
  4. Objshell.appactivate bloc.processid
  5. Wscript.sleep 200
  6. Objshell.sendkeys "{+ 40}"
  7.  

Lo anterior debería apretar shift 40 veces.

Source: https://stackoverflow.com/questions/42422088/permanently-press-key-via-vbs-keep-key-pressed

Saludos!


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Script que deje apretado tecla Shift
« Respuesta #2 en: 19 Julio 2017, 01:14 am »

El método SendKeys() es muy limitado, igual que el lenguaje VBS, donde ni tan siquiera se puede llamar a la API de Windows sin recurrir a la instalación de componentes de terceros.

Tengamos presente que Windows no es solo Batch y VBS, hay otros lenguajes soportados de forma nativa y son mucho más potentes/completos, como JS, y PowerShell.

En este último lenguaje podemos simplificar muchas tareas, pero para intentar demostrar el potencial de este lenguaje yo he optado por compilar una clase escrita en otro lenguaje adicional, VB.NET (aunque también podría haber sido C#, F# o VC++), con una clase donde he implementado los métodos necesarios y los P/Invokes para hacer lo que pides (ejecutar el notepad y activar el foco de ventana, y luego mantener pulsada una tecla). No es necesario conocer el lenguaje VB.NET, tan solo debes fijarte en las 3 últimas lineas al final de este código:

Script.ps1
Código
  1. $vbCode = @'
  2. Imports Microsoft.VisualBasic
  3. Imports System
  4. Imports System.ComponentModel
  5. Imports System.Diagnostics
  6. Imports System.Runtime.InteropServices
  7. Imports System.Threading
  8. Imports System.Windows.Forms
  9.  
  10. Namespace Elektro
  11.  
  12.    Public NotInheritable Class NativeMethods
  13.  
  14.        Friend Const KEYEVENTF_KEYUP As UInteger = 2UI
  15.  
  16.        <DllImport("User32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
  17.        Friend Shared Sub keybd_event(ByVal vkey As Byte,
  18.                                      ByVal scanCode As Byte,
  19.                                      ByVal flags As UInteger,
  20.                                      ByVal extraInfo As UInteger)
  21.        End Sub
  22.  
  23.        <DllImport("User32.dll", SetLastError:=True)>
  24.        Friend Shared Function GetForegroundWindow() As IntPtr
  25.        End Function
  26.  
  27.        <DllImport("User32.dll", SetLastError:=True)>
  28.        Friend Shared Function SetForegroundWindow(ByVal hwnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
  29.        End Function
  30.  
  31.    End Class
  32.  
  33.    Public NotInheritable Class ProcessTools
  34.  
  35.        ''' <summary>
  36.        ''' Runs and activates Notepad process.
  37.        ''' </summary>
  38.        Public Shared Sub RunNotepad()
  39.  
  40.            Using p As New Process() With {
  41.                    .StartInfo = New ProcessStartInfo("notepad.exe") With {
  42.                        .UseShellExecute = True
  43.                    }
  44.                }
  45.  
  46.                p.Start()
  47.                p.WaitForInputIdle(Timeout.Infinite)
  48.  
  49.                Dim hwnd As IntPtr = IntPtr.Zero
  50.                Do While (hwnd = IntPtr.Zero)
  51.                    hwnd = p.MainWindowHandle
  52.                Loop
  53.                Debug.WriteLine("Window Handle: " & hwnd.ToInt32())
  54.  
  55.                Do Until (NativeMethods.GetForegroundWindow() = hwnd)
  56.                    Dim result As Boolean = NativeMethods.SetForegroundWindow(hwnd)
  57.                Loop
  58.                '' Alternativa administrada:
  59.                ' Interaction.AppActivate(p.Id)
  60.  
  61.            End Using
  62.  
  63.        End Sub
  64.  
  65.    End Class
  66.  
  67.    Public NotInheritable Class KeyboardTools
  68.  
  69.        ' Press and holds the specified key.
  70.        Public Shared Sub PressKey(ByVal key As Keys)
  71.            NativeMethods.keybd_event(CByte(key), 0, 0UI, 0UI)
  72.        End Sub
  73.  
  74.        ' Releases a previous hold key.
  75.        Public Shared Sub ReleaseKey(ByVal key As Keys)
  76.            NativeMethods.keybd_event(CByte(key), 0, NativeMethods.KEYEVENTF_KEYUP, 0UI)
  77.        End Sub
  78.  
  79.    End Class
  80.  
  81. End Namespace
  82. '@
  83. $vbType = Add-Type -TypeDefinition $vbCode `
  84.                   -CodeDomProvider (New-Object Microsoft.VisualBasic.VBCodeProvider) `
  85.                   -PassThru `
  86.                   -ReferencedAssemblies "Microsoft.VisualBasic.dll", `
  87.                                         "System.dll", `
  88.                                         "System.ComponentModel.dll", `
  89.                                         "System.Runtime.InteropServices.dll", `
  90.                                         "System.Threading.dll", `
  91.                                         "System.Windows.Forms.dll" `
  92. | where { $_.IsPublic }
  93.  
  94. # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
  95. # End of VB.NET CodeDom Provider Compiler Services Sample
  96. # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
  97.  
  98. Add-Type -AssemblyName "System.Windows.Forms"
  99. $Keys = [System.Windows.Forms.Keys]
  100.  
  101. [Elektro.ProcessTools]::RunNotepad()
  102. [Elektro.KeyboardTools]::PressKey($Keys::ShiftKey)
  103. # [Elektro.KeyboardTools]::ReleaseKey($Keys::ShiftKey)

El modo de empleo es muy sencillo, abstraido de cualquier complejidad. Con el método Elektro.ProcessTools.RunNotepad() se ejecuta una nueva instancia del proceso Notepad.exe (o el hijack correspondiente que haya definido en el sistema) y se activa el foco de ventana. Con el método Elektro.KeyboardTools.PressKey(Keys) se simula una pulsación del teclado de la tecla que deseemos (la tecla se mantendrá pulsada), y con el método Elektro.KeyboardTools.ReleaseKey(Keys) liberamos la tecla que previamente habiamos pulsado.

Espero que te sirva de ayuda.

PD: Nótese que el miembro keybd_event de la API de Windows está considerado obsoleto, esto en realidad debería reemplazarse por la utilización de la infraestructura SENDINPUT, sin embargo la implementación de los miembros necesarios habría extendido el código de ejemplo en varios cientos de lineas, así que simplemente lo he preferido hacer así como una decisión de diseño y simplificación; esto es tan solo un ejemplo ordinario y funcional, no una solución optimizada.

Saludos
« Última modificación: 19 Julio 2017, 01:46 am por Eleкtro » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
textbox keypress (shift) « 1 2 »
Programación Visual Basic
Wdeah 13 4,822 Último mensaje 11 Septiembre 2006, 02:19 am
por ReViJa
Detectar tecla presionada y si es tal tecla hacer tal cosa
Programación Visual Basic
Wiidos 3 5,868 Último mensaje 20 Marzo 2011, 19:15 pm
por raul338
Algun servicio gratuito de imagenes, que las deje subir desde mi script, API ?
PHP
Graphixx 3 2,128 Último mensaje 20 Mayo 2012, 21:33 pm
por dimitrix
Detectar tecla shift en un batch JavaScrip « 1 2 »
Scripting
nolo2 19 9,593 Último mensaje 13 Diciembre 2012, 23:56 pm
por nolo2
Duda Script parametro+shift
Scripting
ashtreelane 0 1,513 Último mensaje 25 Noviembre 2016, 18:12 pm
por ashtreelane
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines