Gå til innhold

Trykke en tast nå og da


Anbefalte innlegg

Jeg spiller et nettspill der man automatisk blir logget ut om man står stille i ca. 10 min.! Jeg ønsker da å kunne lage et lite program som trykker på de forskjellige piltastene regelmessig, slik at jeg ikke står helt stille, og dermed ikke blir helt logga ut. Hvordan kan dette gjøres?

Lenke til kommentar
Videoannonse
Annonse

Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

 

Du må bruke disse funksjonene.

 

Du kan finne hvilken class det er ved å bruke det vedlagte programmet (som jeg har laget) det viser en oversikt over alle vinduene som er i gang i windows (også skjulte)

 

Der finner du vinduet til spillet ditt, og henter "Window class" som du bruker i FindWindow() sin lpClassName. Du finner det som skal stå i lpWindowName i "Window text"

 

Så når programmet starter, henter du hWnd'en til spillet med FindWindow()

 

Denne bruker du på SendMessage(hWnd, WM_KEYDOWN, (Scan code), 0)

deretter sender du det samme med WM_KEYUP istedet.

 

lParam skal ha veldig mye spesielle parameter, det er et bitfelt.

wedit.zip

Lenke til kommentar

Man kan også benytte seg av SendInput og simulere et globalt tastatur-trykk derifra, men da kan man risikere at trykket kommer på avveie og havner i et helt anneledes vindu. Det er dog du som bør ta avgjørelsen i hva du vil bruke. SendMessage er en helt legitim metode, kan hende bedre enn denne, men jeg syntes den var verd å nevne.

 

Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As GENERALINPUT, ByVal cbSize As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)

Const INPUT_MOUSE = 0
Const INPUT_KEYBOARD = 1
Const INPUT_HARDWARE = 2
Const KEYEVENTF_KEYUP = &H2

Private Type KEYBDINPUT
 wVk As Integer
 wScan As Integer
 dwFlags As Long
 time As Long
 dwExtraInfo As Long
End Type

Private Type GENERALINPUT
 dwType As Long
 xi(0 To 23) As Byte
End Type

Private Sub SendKey(bKey As Byte)

Dim GInput(0 To 1) As GENERALINPUT
Dim KInput As KEYBDINPUT

' Trykk knapp
KInput.wVk = bKey
KInput.dwFlags = 0
GInput(0).dwType = INPUT_KEYBOARD
CopyMemory GInput(0).xi(0), KInput, Len(KInput)

' Slipp knapp
KInput.wVk = bKey
KInput.dwFlags = KEYEVENTF_KEYUP
GInput(1).dwType = INPUT_KEYBOARD

CopyMemory GInput(1).xi(0), KInput, Len(KInput)
SendInput 2, GInput(0), Len(GInput(0))

End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)

' Skriver alle tastetrykk
Me.Print Chr$(KeyAscii);

End Sub

Private Sub Form_Paint()

Me.Cls

' Sender tastetrykkene til det aktive vinduet
SendKey vbKeyH
SendKey vbKeyE
SendKey vbKeyL
SendKey vbKeyL
SendKey vbKeyO

End Sub

Endret av aadnk
Lenke til kommentar
Jeg spiller et nettspill der man automatisk blir logget ut om man står stille i ca. 10 min.! Jeg ønsker da å kunne lage et lite program som trykker på de forskjellige piltastene regelmessig, slik at jeg ikke står helt stille, og dermed ikke blir helt logga ut. Hvordan kan dette gjøres?

er det rs (runescape) du mener?

Lenke til kommentar
Jeg spiller et nettspill der man automatisk blir logget ut om man står stille i ca. 10 min.! Jeg ønsker da å kunne lage et lite program som trykker på de forskjellige piltastene regelmessig, slik at jeg ikke står helt stille, og dermed ikke blir helt logga ut. Hvordan kan dette gjøres?

er det rs (runescape) du mener?

Nei, spiller ikke det lenger.. Det er nok Tibia jeg mener *flau* :blush: Jeg vet det ofte blir beregnet som et fjortis spill, men det er alt fro lett å bli hekta! :p

 

Og angående aadnk sin kode:

 

Jeg må innrømme at jeg er ganske noob i VB, så det tar meg nok minst en uke å skjønne koden, så jeg bruker heller et par dager å finner ut av den andre koden først :p Men jeg har absloutt ikke noe imot flere måter å kunne gjøre en ting på.. :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...