keydown in ander venster

Status
Niet open voor verdere reacties.

pontoe

Gebruiker
Lid geworden
9 jan 2008
Berichten
351
ey all,
sorry dat ik zoveel dingen achter elkaar post, maar ik heb gewoon veel vragen :P en niemand beantwoorde ze nog, dus ik had geen zin om te wachten.
deze keer ben ik een programma aan het maken voor cheats in gta, en dan moet hij bijvoorbeeld als er op F5 gedrukt wordt iets bepaalds typen. dit werkt op zich wel, maar alleen als ik het venster van mijn zelfgemaakte form heb geselecteerd, zodra ik bijvoorbeeld kladblok als bovenste venster heb ziet hij het niet meer. hoe kan ik dit oplossen?
 
lol, mischien een stickie voor deze vraag? xD


Je moet in het forum zelf even zoeken naar de 'GetKeyAsyncState' API. Deze zorgt ervoor dat ALLE toetsen worden 'gezien' ook al is het niet het active form/application (-> keyloggers, etc werken ongeveer ook zo)

Ook kan je op die api google'n, vind je ook van alles.
 
bedankt voor het antwoord! ik denk dat ik het ongeveer snap, maar ik snap nu alleen nog niet waar ik die getkeyasyncstate neer moet zetten zodat hij het wel merkt... niet in een form1_buttonpressed geval ofzo toch? ik zoek nog verder, maar heb nog niets duidelijks gevonden... alvast heel erg bedankt!
edit: ok, ik heb nu deze code gevonden:
Code:
Dim i as integer
For I = 1 To 255
result = 0
result = GetAsyncKeyState(I)
If result = -32767 Then
   select case Chr(I)
      case "a"
         sendkeys "b"
      case "b"
         sendkeys "c"
   end select
End If
Next I
in de volgende post: http://www.helpmij.nl/forum/showthread.php?t=317938
maar ik snap de code niet helemaal, en verderop in de thread werd gezegd dat hij voor vb6 was, ik gebruik vb 08. maar ik snap niet helemaal wat de code doet, wat er bijvoorbeeld gebeurd bij
Code:
result = GetAsyncKeyState(I)
. kan iemand dat uitleggen?
 
Laatst bewerkt:
erh, ik werk uitsluitend met 6.

Anywho - je moet de code in een TIMER zetten, zodat hij elke x milisecondes kijkt wat er gedrukt word.
bijvoorbeeld:
Code:
PrivateSub timerX_timer(....)
result = GetAsyncKeyState(I)
end sub
slaat in de variable 'result' de waarde van de gedrukte toets. Dan moet je dus kijken wat je er mee wilt doen.

Die code die je hebt is dus voor vb6, en doet verder niets (het select-case stukje slaat voor jou nergens op)
 
de timer heb ik inmiddels begrepen, maar ik moet dus iets van
Code:
result = GetAsyncKeyState(I)
if result = (f5 code) then
sendkeys.send (test)
end if
hebben? maar die I is dus niet echt een variabele waar ik op moet letten, de code wordt dus in de result opgeslagen? en wordt het dan als een ascii code opgeslagen, of iets anders? alvast bedankt, het is al een heel stuk duidelijker!
 
try
Code:
Dim i as integer
For I = 1 To 255
result = 0
result = GetAsyncKeyState(I)
If result = -32767 Then

if result = ( f5 code ) then
   'doe iets
end if

End If
Next I



[edit] ik heb eigenlijk geen flauw idee waar die i(1-255) over gaat - iets met ascii ofzo? maar als het niets doet kan je het net zogoed weghalen ;) [/edit]
 
Laatst bewerkt:
ok, bedankt voor het snelle antwoord! ik probeer het straks want ik moet nu weg, maar alvast bedankt!
 
ik heb nu:
Code:
Public Class Form1
    Dim result As Long
    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim i As Integer
        For i = 1 To 255
            result = 0
            result = GetAsyncKeyState(i)
            If result = -32767 Then
                MsgBox(Chr(i))
            End If
        Next i
    End Sub
End Class
en dat werkt prima, maar ik krijg niet voor elkaar om er een stukje van
Code:
if result = f5.code then
sendkeys.send (tested)
end if
omdat ik namelijk niet weet wat die f5.code is... wat voor soort codes gebruikt getasynckeystate? ik heb al keys.f5 geprobeerd, maar dat werkte niet...
edit: ok, ik ben er nu denk ik achter. ik heb msgbox(i) geprobeerd, en daar zaten blijkbaar die getalletjes in :P daarom werkte het niet.

edit2: het werkt perfect!
Code:
Public Class Form1
    Dim result As Long
    Dim cheat1 As String
    Dim cheat2 As String
    Dim cheat3 As String
    Dim cheat4 As String
    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim i As Integer
        For i = 1 To 255
            result = 0
            result = GetAsyncKeyState(i)
            If result = -32767 Then
                If i = 116 Then
                    SendKeys.Send(cheat1)
                ElseIf i = 117 Then
                    SendKeys.Send(cheat2)
                ElseIf i = 118 Then
                    SendKeys.Send(cheat3)
                ElseIf i = 119 Then
                    SendKeys.Send(cheat4)
                End If
            End If
        Next i
    End Sub

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick

    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        cheat1 = TextBox1.Text
        cheat2 = TextBox2.Text
        cheat3 = TextBox3.Text
        cheat4 = TextBox4.Text
        Timer1.Enabled = True
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Timer1.Enabled = False
    End Sub
End Class
nu wil ik alleen nog dat hij bijvoorbeeld bij f5 iets anders zegt dan bij ctrl+f5. hoe moet ik dat doen? iets met if shift=2 toch? in een tutorial (http://cuinl.tripod.com/tutorials/f-31.htm) staat er wel iets over, maar dat werkt alleen bij een command1_keydown en niet bij de timer...
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan