SendMessage Tutorial

09/27/2011 19:12 Banana_jo#16
jup danke hab das schon geschafft gehabt..mit dem abfangen..nur hab ich jetz gemerkt das das übersenden an alle formen nur bei text situation geht..

also wenn ich im spiel stehen und laufen will mit der taste w zb.. dann gehts nicht mehr aber wenn ich den chat öffne und dann wieder was drücke wird das übergeben...
aber im spiel gehts nicht...>.<.. ich verzweifle :(...

hast du vllt eine lösung??

mfg
Banana
09/27/2011 19:19 Kraizy​#17
Laut msdn.microsoft.com:
PHP Code:
//SendMessage
Sends the specified message to a window or windows.

//SendKeys
Sends keystrokes to the active application
Also wie der Name schon sagt, wird bei SendMessage wohl eine "Message" an das Fenster geschickt. Mit der SendKeys-Methode werden keystrokes (= Tastenanschläge) gesendet, aber eben nur an das aktive Fenster. Kannst ja mal versuchen ob das klappt: SendKeys.Send("w")
Müsste aber klappen.. um das nun auch an ein Fenster zu senden, welches im Hintergrund ist, musst du wohl eine andere Methode benutzen, ich glaube das müsste mit DirectInput gehen. Ich kenn mich da aber nicht aus, musst mal googlen..
09/27/2011 19:41 Banana_jo#18
jup bin gerade auch darauf gestoßen...directInput...findet man aber wirklich KEIN tut (also ich nicht jetz in den letzten 30 min)
im internet...

wenn du eins kennst oder so..wär ich dir wirklich sehr dankbar..:)

ps: danke aber für deine hilfe bis jetz :)

mfg
Banana

habs jetz doch geschaft...stichwort war keyup und keydown :D und nicht MW_CHAR
so jetz hab ich halt das problem mit dem timer wieder...das halt die zuletzt gedrückte taste nicht gestoppt wird...ich guck mir mal dein code an oben


mfg
Banana
09/27/2011 20:20 Kraizy​#19
Teil 3 hinzugefügt.
09/27/2011 20:22 Banana_jo#20
EDIT2:

hast du vllt eine idee wie man die abfrage von tasten auch so simuliert das die zahl zb 49 = 1 ist auch nur angezeigt wird wenn ich die taste auch drücke...

Code:
   
    Public Function getkeypress() As Integer
        For i As Integer = 1 To 255
            If GetAsyncKeyState(i) = -32767 Then
                Return i
            End If
        Next
    End Function

 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim key As Integer = getkeypress()

        If key <> 0 Then
            Label1.Text = CStr(key)
            SendMessage(lhWnd, WM_KEYDOWN, Label1.Text, vbNullString)

        End If

    End Sub
habs jetz so...und die zahl die im label steht bleibt auch drinn auch wenn ich nichts mehr drücke aber so darf es halt nicht sein...
hast du vllt ne idee?

mfg
Banana
09/27/2011 20:25 Kraizy​#21
Du meinst, wenn du eine Taste drückst, soll diese im Label angezeigt werden und wenn du sie wieder los lässt nicht mehr anzeigen? Müsste zu schaffen sein, aber muss jetz off, antworte dir dann morgen nochmal.
09/27/2011 20:40 Banana_jo#22
genau so meine ich das :D

alles klar :) wenn ich es bis morgen nicht schon geschafft habe freue ich mich schon drauf :P

danke dir...

mfg
Banana
09/28/2011 15:57 Kraizy​#23
Also ich hab jetzt zwar eine Methode gefunden, aber dann müsstest du das für jede Taste machen:

PHP Code:
Public Class Form1
   
//GetAsyncKeyState-API
   
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Integer) As Integer

   
//Timer mit einem Interval von z.B. 100
   
Private Sub tmrCheck_Tick(...) Handles tmrCheck.Tick
      Select 
Case True
         
Case GetAsyncKeyState(&H41)
               
Label1.Text "A"
         
Case GetAsyncKeyState(&H42)
               
Label1.Text "B"
         
Case GetAsyncKeyState(&H43)
                
Label1.Text "C"
         
Case Else
                
Label1.Text "Keine Taste"
         
End Select
   End Sub
End 
Class 
Also wie gesagt, müsstest du so nun für jede Taste immer "Case GetAsyncKeyState(...).." schreiben. Am besten fügst du diese Konstanten in eine Liste oder irgendwas hinzu: [Only registered and activated users can see links. Click Here To Register...]
und durchläufst sie einfach mit einer Schleife.
09/29/2011 00:24 Banana_jo#24
danke...ich werds mir mal angucken..

.-..naja nur das problem ist...das ja nicht "a" "b" kommen soll sondern die hash codes..und ich hab das jetz eingebunden...aber wenn ich KEINE taste drücke steht noch die letzt gedrückte taste...>.<

EDIT:

also wie kann ich kontrollieren das gerade eine taste im druck ist...?
09/29/2011 15:43 Kraizy​#25
Was für ein Hashcode? o.O
Wenn du keine Taste drückst, dann wird das Else aufgerufen und im Label wird der Buchstabe nicht mehr angezeigt.
09/29/2011 17:20 Banana_jo#26
ja stimmt sry...hab das nur falsch eingefügt....hast du vllt ne liste wo diese codes drinne stehen? welche taste welche zahl ist?

ja ich weis immer nur eine zahl höer^^..aber für sondertasten und sowas :D
09/29/2011 18:38 Kraizy​#27
[Only registered and activated users can see links. Click Here To Register...]
09/29/2011 19:42 Banana_jo#28
DANKÖÖÖ hab das mit dem keyup auch schon hinbekommen :D


ohne dich hätt ich das ganze garnicht geschaft :D
09/29/2011 20:59 Kraizy​#29
Solang nicht nach C&P-Code gefragt wird helfe ich gerne ;)
09/30/2011 18:34 Banana_jo#30
Joa denk ich auch :P

hab da noch ne offene frage ::D

undzwar wie sende ich denn mausklickst weiter?