Tastendruck für directinput simulieren

letsgo2u

Grünschnabel
Ja wie man hoffendlich aus dem topic erkennen kann:
ich will DirectInput vorgaukeln das eine Tastegedrückt wurde, obwohl das nicht stimmt.

Wie mach ich das. ich hab da ne theorie: ich muss den Tastaturcode in den buffer der Tastatur schreiben, damit Directinput denkt, das die taste gedrückt wurde.
nur wie mach ich das?

wäre für hilfe sehr dankbar!

ich arbeite mit VB 2008 express und .Net 3.5
 
Einfacher gehts mir SendInput ...

[DllImport("user32.dll", SetLastError = true)]
static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);

[StructLayout(LayoutKind.Explicit)]
struct INPUT
{
[FieldOffset(0)]
public int type;
[FieldOffset(4)]
public MOUSEINPUT mi;
[FieldOffset(4)]
public KEYBDINPUT ki;
[FieldOffset(4)]
public HARDWAREINPUT hi;
}
[StructLayout(LayoutKind.Sequential)]
struct MOUSEINPUT
{
public int dx;
public int dy;
public uint mouseData;
public uint dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}

[StructLayout(LayoutKind.Sequential)]
struct KEYBDINPUT
{
ushort wVk;
ushort wScan;
uint dwFlags;
uint time;
IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
struct HARDWAREINPUT
{
uint uMsg;
ushort wParamL;
ushort wParamH;
}

const uint MOUSEEVENTF_MOVE = 0x0001;
const uint MOUSEEVENTF_LEFTDOWN = 0x0002;
const uint MOUSEEVENTF_LEFTUP = 0x0004;
const uint MOUSEEVENTF_RIGHTDOWN = 0x0008;
const uint MOUSEEVENTF_RIGHTUP = 0x0010;
const uint MOUSEEVENTF_MIDDLEDOWN = 0x0020;
const uint MOUSEEVENTF_MIDDLEUP = 0x0040;
const uint MOUSEEVENTF_XDOWN = 0x0080;
const uint MOUSEEVENTF_XUP = 0x0100;
const uint MOUSEEVENTF_WHEEL = 0x0800;
const uint MOUSEEVENTF_VIRTUALDESK = 0x4000;
const uint MOUSEEVENTF_ABSOLUTE = 0x8000;
const int INPUT_MOUSE = 0;



hoffe das hilft dir weiter ..


mfg
Martin
 
keine ahnung - try it out :)

habs mit C# gemacht. also ähnlich.

mußt nur als using noch "using System.Runtime.InteropServices" hinzufügen.

Ich habe Mausklicks simuliert.

MOUSEINPUT m = new MOUSEINPUT();
m.dx = x;
m.dy = y;
m.mouseData = 0;
m.time = 0;
m.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN;

INPUT i = new INPUT();
i.type = INPUT_MOUSE;
i.mi = m;

INPUT[] inputs = new INPUT[] { i };
int isize = Marshal.SizeOf(i);
SendInput(1, inputs, isize);

Wie Tastatureingaben simuliert werden müßte ich mal schauen aber evt. kriegst du das auch selbst raus ..

Und statt MOUSEINPUT generierst du KEYBDINPUT.
Nur was du da übergeben mußt - müßtest du nachlesen.

mfg
Martin
 

Neue Beiträge

Zurück