vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
TastaturEingabe an Spielfenster 
Autor: HuiBuhMitBlubb
Datum: 30.10.09 23:23

Hallo erstmal
Zu meiner Vorgeschichte: Ich hab vor ca. 10 Jahren mit VB ein bisschen gecodet, die Grundzüge wären ja vorhanden, aber in VB2008 ist ja irgendwie alles anders...

Ich versuch grad ein kleines Programm in Visual Basic mit Visual Studio2008 zu coden, das mir in ein Spiel Tasten schickt.
Jetzt hab ich das Problem, dass das Spiel die Eingabe nicht annimmt.
Wenn ich SendKeys.Send nehme interpretiert das Spiel das als [ESC], egal was ich für eine Taste schicke.
ich hab mal mit Spy++ geschaut, bei sendkey kommt erst das WM_KEYDOWN, dann WM_CHAR und dann WM_KEYUP.
Also soweit ganz richtig. Aber funzt nicht. (Bei Notepad oder so kommt übrigens alles richtig an, hab aber gelesen, dass SendKeys eh recht selten funktioniert)
'Ergebnis von SendKeys
<00001> 00020782 P WM_KEYDOWN nVirtKey:'G' cRepeat:1 ScanCode:01 fExtended:0 _
  fAltDown:0 fRepeat:0 fUp:0
<00002> 00020782 P WM_CHAR chCharCode:'103' (103) cRepeat:1 ScanCode:01 _
fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<00003> 00020782 P WM_KEYUP nVirtKey:'G' cRepeat:1 ScanCode:01 fExtended:0 _
fAltDown:0 fRepeat:1 fUp:1
 
'Hier der manuelle Tastendruck
<00004> 00020782 P WM_KEYDOWN nVirtKey:'G' cRepeat:1 ScanCode:22 fExtended:0 _
  fAltDown:0 fRepeat:0 fUp:0
<00005> 00020782 P WM_CHAR chCharCode:'103' (103) cRepeat:1 ScanCode:22 _
fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<00006> 00020782 P WM_KEYUP nVirtKey:'G' cRepeat:1 ScanCode:22 fExtended:0 _
fAltDown:0 fRepeat:1 fUp:1
Jetzt hab ich den ganzen Spass mit sendmessage probiert, jedoch kommt da gar nichts an. Und das egal an welches Handle ich das schick, selbst Notepad kriegt keine Eingabe. Auch mit keybd_event geht das nicht (wobei ich gelesen hab, dass das eh nur bis Win2k funktioniert).

Was mach ich falsch? Oder anders: Wie muss ich das machen, dass das ganze funktioniert?

Hier ein Auszug aus meinem Code, ist ein bisschen konfus, ich bastel da die ganze Zeit was dazu oder lösch was.
Option Explicit On
Imports System
Imports System.Diagnostics
 
Public Class Form1    
Public Const WM_KEYDOWN = &H100
    Public Const WM_KEYUP = &H101
    Public Const WM_CHAR = &H102
    Public Const VK_G = &H47
    Public Const VK_G1 = &H67
    Public Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, _
      ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    End Function
 
    Dim PrgHandle As IntPtr
    ' Das Handle eines Programms kriegen
    Declare Auto Function FindWindow Lib "USER32.DLL" (ByVal lpClassName As _
      String, ByVal lpWindowName As String) As IntPtr
 
    ' Fenster in den Vordergrund bringen
    Declare Auto Function SetForegroundWindow Lib "USER32.DLL" (ByVal hWnd As _
      IntPtr) As Boolean
 
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles _
  Button1.Click
 
        ' Das Handle des Prozesses kriegen. Die Windowclass und den Namen hab 
        ' ich über Spy++
        PrgHandle = FindWindow("*Class*", "*Fenstertitel*")
        'PrgHandle = FindWindow("Edit", String.Empty)
        Label4.Text = PrgHandle
        ' Sicherstellen, dass das Programm läuft
        If PrgHandle = IntPtr.Zero Then
            MsgBox("Der Prozess ist nicht gestartet")
            Return
        End If
 
        FensterAktivieren.Enabled = True
 
    End Sub
 
    Private Sub FensterAktivieren_Tick(ByVal sender As System.Object, ByVal e _
      As System.EventArgs) Handles FensterAktivieren.Tick
        SetForeGroundWindow(PrgHandle)
        Tabben.Enabled = True
        FensterAktivieren.Enabled = False
    End Sub
 
    Private Sub Tabben_Tick(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Tabben.Tick
        'SendKeys.Send("g")
        Label10.Text = PrgHandle
        SendMessage(PrgHandle, WM_KEYDOWN, VK_G, 0)
        System.Threading.Thread.Sleep(50)
        SendMessage(PrgHandle, WM_CHAR, VK_G1, 0)
        System.Threading.Thread.Sleep(50)
        SendMessage(PrgHandle, WM_KEYUP, VK_G, 0)
    End Sub
Schonmal danke für die Antworten

Beitrag wurde zuletzt am 30.10.09 um 23:30:14 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
TastaturEingabe an Spielfenster2.418HuiBuhMitBlubb30.10.09 23:23

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel