VB.net Tastendruck simmulieren (systemweit oder inaktives Fenster)?

07/17/2011 03:26 Mental Wreck#1
Hey,
will für nen Spiel nen kleinen Bot basteln der soll wenn man ne Taste drückt nen bestimmten Text senden.
Nur irgendwie kriege ich es über dem Keypress Event nicht hin :( bitte helft mir.

MFG

NiGHT
07/17/2011 10:45 Kraizy​#2
[Only registered and activated users can see links. Click Here To Register...] verwenden
07/17/2011 13:37 Mental Wreck#3
Okay, aber wie wird eine Taste definiert? Habe irgendwas vonwegen Ascii Code gehört, aber wie kommt man an den Code von einer Taste?
07/17/2011 13:48 cooler7878#4
Quote:
#include <iostream>




using namespace std;


int main(void)
{

for (char c=65;c<91;c++)
cout<<c;//TADA das ABC


return 0;
}
Falls du kein C++ Code lesen kannst A = 65 Z=91 (GROSSBUCHSTABEN)

EDIT: Habe gerade was gefunden :
[Only registered and activated users can see links. Click Here To Register...]
07/17/2011 15:00 ZackBlack#5
Quote:
Originally Posted by NιGHT View Post
Okay, aber wie wird eine Taste definiert? Habe irgendwas vonwegen Ascii Code gehört, aber wie kommt man an den Code von einer Taste?
Wenn ich mir das so anschaue fallt mir das hier auf:
Code:
RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.Tab)
RegisterHotKey(Me.Handle, 2 'ID, Key_NONE, Keys.D1 'Taste)
Also in WParam ist nacher die ID die du zuerst registrieren musst.
07/17/2011 16:26 Mental Wreck#6
Quote:
Originally Posted by ZackBlack View Post
Wenn ich mir das so anschaue fallt mir das hier auf:
Code:
RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.Tab)
RegisterHotKey(Me.Handle, 2 'ID, Key_NONE, Keys.D1 'Taste)
Also in WParam ist nacher die ID die du zuerst registrieren musst.
Ich versteh nur Bahnhof :S
07/17/2011 18:22 Kraizy​#7
PHP Code:
Public Class Form1

    
Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As IntPtrByVal id As IntegerByVal fsModifier As IntegerByVal vk As Integer) As Integer
    
Private Declare Sub UnregisterHotKey Lib "user32" (ByVal hWnd As IntPtrByVal id As Integer)
    Private Const 
Key_NONE As Integer = &H0
    
Private Const WM_HOTKEY As Integer = &H312

    
Protected Overrides Sub WndProc(ByRef m As Message)
        If 
m.Msg WM_HOTKEY Then
            
//hier prüfst du jetzt die ID (bei der ID 1 hab ich die Taste A genommen, bei 2 B und bei 3 Z
            
Select Case m.WParam
                
Case //wenn ID = 1
                    
MessageBox.Show("Taste A wurde gedrückt")
                Case 
//wenn ID = 2
                    
MessageBox.Show("Taste B wurde gedrückt")
                Case 
//wenn ID = 3
                    
MessageBox.Show("Taste Z wurde gedrückt")
            
End Select
        End 
If
        
MyBase.WndProc(m)
    
End Sub

    
Private Sub Form1_FormClosing(ByVal sender As ObjectByVal e As System.Windows.Forms.FormClosingEventArgsHandles Me.FormClosing
        
//wenn dein Programm geschloßen wird, Hotkeys wieder entfernen
        
UnregisterHotKey(Me.Handle1)
        
UnregisterHotKey(Me.Handle2)
        
UnregisterHotKey(Me.Handle3)
    
End Sub

    
Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load
        
//hier setzt du deine gewünschten Tasten z.B. "A", "B" oder "Z"...
        //die 1, 2 und 3 sind sowas wie die ID's für deine Tasten
        
RegisterHotKey(Me.Handle1Key_NONEKeys.A)
        
RegisterHotKey(Me.Handle2Key_NONEKeys.B)
        
RegisterHotKey(Me.Handle3Key_NONEKeys.Z)
    
End Sub
End 
Class 
07/18/2011 15:35 Mental Wreck#8
Quote:
Originally Posted by xKraizy View Post
PHP Code:
Public Class Form1

    
Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As IntPtrByVal id As IntegerByVal fsModifier As IntegerByVal vk As Integer) As Integer
    
Private Declare Sub UnregisterHotKey Lib "user32" (ByVal hWnd As IntPtrByVal id As Integer)
    Private Const 
Key_NONE As Integer = &H0
    
Private Const WM_HOTKEY As Integer = &H312

    
Protected Overrides Sub WndProc(ByRef m As Message)
        If 
m.Msg WM_HOTKEY Then
            
//hier prüfst du jetzt die ID (bei der ID 1 hab ich die Taste A genommen, bei 2 B und bei 3 Z
            
Select Case m.WParam
                
Case //wenn ID = 1
                    
MessageBox.Show("Taste A wurde gedrückt")
                Case 
//wenn ID = 2
                    
MessageBox.Show("Taste B wurde gedrückt")
                Case 
//wenn ID = 3
                    
MessageBox.Show("Taste Z wurde gedrückt")
            
End Select
        End 
If
        
MyBase.WndProc(m)
    
End Sub

    
Private Sub Form1_FormClosing(ByVal sender As ObjectByVal e As System.Windows.Forms.FormClosingEventArgsHandles Me.FormClosing
        
//wenn dein Programm geschloßen wird, Hotkeys wieder entfernen
        
UnregisterHotKey(Me.Handle1)
        
UnregisterHotKey(Me.Handle2)
        
UnregisterHotKey(Me.Handle3)
    
End Sub

    
Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load
        
//hier setzt du deine gewünschten Tasten z.B. "A", "B" oder "Z"...
        //die 1, 2 und 3 sind sowas wie die ID's für deine Tasten
        
RegisterHotKey(Me.Handle1Key_NONEKeys.A)
        
RegisterHotKey(Me.Handle2Key_NONEKeys.B)
        
RegisterHotKey(Me.Handle3Key_NONEKeys.Z)
    
End Sub
End 
Class 
Vielen dank, nur ein Problem gibt es noch, undzwar wenn er dann einen Text senden soll sendet er den Text nicht ingame sondern switcht wieder auf dem Desktop.
07/18/2011 17:15 Kraizy​#9
Um es an ein spezielles Fenster zu senden benutze die Send- oder PostMessage API. SendKeys.Send() sendet bloß an das im Vordergrund liegende Fenster.
07/18/2011 18:40 Mental Wreck#10
PHP Code:
                Case 8
                    
If CheckBox1.Checked True Then
                        My
.Computer.Keyboard.SendKeys("T")
                        
My.Computer.Keyboard.SendKeys(TextBox8.Text)
                        
My.Computer.Keyboard.SendKeys("{Enter}")
                    
End If 
Hab es jetzt so gemacht ;) Checkbox is für was anderes da, aber es klappt :D
Also kann geclosed werden.