'keybd_event' -Alternative

09/25/2008 19:11 Groemel1992#1
Guten Tag.

Könnte mir jemand freundlicherweise die Funktion zum Simulieren des Drückens einer Taste aktualisieren, und zwar so, dass diese in den meisten MMORPGs funktioniert?
Also so ähnlich wie die von AutoIt, die, soweit ich weiß, 'WinAttach' gebraucht.

PS: Darüberhinaus würde ich es begrüßen, wenn mir einer den Quellcode kompilieren könnte, da ich überhaupt nicht weiß, wie so etwas funktioniert.

Vielen Dank :-)
09/26/2008 13:18 12354#2
Du könntest es mit [Only registered and activated users can see links. Click Here To Register...] machen

Der zweite Parameter(also "Msg") wäre hier
WM_KEYDOWN = 256
bzw
WM_KEYUP = 257

Die Methode dürfte in den meisten MMOs funzen
09/27/2008 18:24 Groemel1992#3
Hallo,

irgendwie bekomme ich das nicht so wirklich hin - ist im Code irgendetwas falsch?
09/29/2008 17:32 Groemel1992#4
Kennt denn keiner eine Alternative oder weiß, wie SendMessage funktioniert?
09/29/2008 18:16 wadimwadim#5
postmessage:
Code:
BOOL PostMessage(      
    HWND hWnd,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
);
sendmessage:
Code:
LRESULT SendMessage(      
    HWND hWnd,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
);
[Only registered and activated users can see links. Click Here To Register...]


Code:
HWND deinHwnd
deinHWND = FindWindow(NULL, _T("FensterName")) ODER FindWindow(NULL, "FensterName")
PostMessage(deinHwnd, WM_KEYDOWN, 0x52, 0); // sendet zb. ('R')
3 param ist das zeichen, oder das, was du übergeben willst... schaue dir eine vk liste an.
09/29/2008 22:24 syntex#6
Quote:
Originally Posted by wadimwadim View Post
postmessage:
Code:
BOOL PostMessage(      
    HWND hWnd,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
);
sendmessage:
Code:
LRESULT SendMessage(      
    HWND hWnd,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
);
[Only registered and activated users can see links. Click Here To Register...]


Code:
HWND deinHwnd
deinHWND = FindWindow(NULL, _T("FensterName")) ODER FindWindow(NULL, "FensterName")
PostMessage(deinHwnd, WM_KEYDOWN, 0x52, 0); // sendet zb. ('R')
3 param ist das zeichen, oder das, was du übergeben willst... schaue dir eine vk liste an.
Ist eine sehr schöne methode um das ganze von ausserhalb zu machen.

Und auch sehr schön erklärt, sollten eigtl keine fragen mehr da sein oder?
09/30/2008 14:42 Bot_interesierter#7
Man sollte doch nach WM_KEDOWN auch WM_KEYUP senden, oder täusche ich mich da?
09/30/2008 15:47 verT!c4L#8
Würde Sinn machen ^^
10/01/2008 12:37 mondesser#9
Alternativ kann man auch die SendInput Methode nutzen.
[Only registered and activated users can see links. Click Here To Register...]
10/01/2008 12:52 neji#10
Tastaturhooks:

[Only registered and activated users can see links. Click Here To Register...]
10/01/2008 13:41 syntex#11
Function:
Code:
#define VK_1 0x31
#define VK_2 0x32
#define VK_3 0x33
#define VK_4 0x34 
...
...
...

int SendKeyStroke(BYTE TheKeyToSend)
{
 keybd_event(TheKeyToSend,              //msdn 
          MapVirtualKey(TheKeyToSend, 0),
    0,
    0);
 keybd_event(TheKeyToSend,               
          MapVirtualKey(TheKeyToSend, 0),
    KEYEVENTF_KEYUP, //msdn
    0); 
 return 1;
}
How to use:
Code:
SendKeyStroke(VK_1);
10/02/2008 05:58 hilete#12
this won't work if NtUserSendInput is hooked in SSDT's win32k section.
10/08/2008 14:15 Reaper14#13
Aber wie sende ich ein key up bei SendMessage?
10/16/2008 17:42 12354#14
Quote:
Originally Posted by Reaper14 View Post
Aber wie sende ich ein key up bei SendMessage?
in vb hab ich die funktion geschrieben :
Code:
Public Declare Ansi Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
 Public Function Sendkey(ByVal key As String)
        Try
            SendMessage(hwnd, WM_KEYDOWN, Asc(key), vbNullString)
            Threading.Thread.Sleep(100)
            SendMessage(hwnd, WM_KEYUP, Asc(key), vbNullString)
            Threading.Thread.Sleep(100)
        Catch ex As Exception
            Return Err.LastDllError.ToString
        End Try
        Return 0

    End Function
hwnd is hier das WindowHandle des Fensters