Laden...

SendInput() an DirektX?

Erstellt von C#Noob vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.768 Views
C
C#Noob Themenstarter:in
33 Beiträge seit 2006
vor 15 Jahren
SendInput() an DirektX?

Hallo Leute,

Ich habe auch schon hier im Forum geuscht (auch unter google) und habe auch schon die bekanntesten Beiträge im Internet gelesen (Pinvoke, MSDN ...), komme aber dennoch nicht weiter X(.

Mein Problem ist folgendes:

Ich habe ein kleines Programmgeschrieben welchen verschiedene Tastencodes in eine DirectX-Anwendung schicken soll! ...

Das Programm findet das gesuchte Fenster, kann es in den Vordergung bringen .... aber die gesendeten Tasten werden nicht von der DX-Anwendung verarbeitet (habe auch schon SendMessage, PostMessage und SendKey.Send ausprobiert). Wenn ich das Programm jetzt die Tastencodes an Word, Editor, WordPad und Co versenden lasse, funktioniert das.

Kann mir einer sagen was ich falsch mache und oder warum das DX-Prog meine Tastencodes nicht verarbeitet❔what:

Hier ist mal der Code des Programms:



int hWnd;
[StructLayout(LayoutKind.Sequential)]
struct KEYBDINPUT
{
public short wVk;
public short wScan;
public int dwFlags;
public int time;
public IntPtr dwExtraInfo;
}

[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;
}

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

public void SendCodes()
{
for (int i = 0; i <= 1000; i++)
{
INPUT[] input = new INPUT[2];
input[0].type = 1;
input[0].ki.wVk = 0x43;
input[0].ki.dwFlags = 0x00;


SendInput((uint)input.Length, input, Marshal.SizeOf(input[0]));

input[0].type = 1;
input[0].ki.wVk = 0x43;
input[0].ki.dwFlags = 0x02;


SendInput((uint)input.Length, input, Marshal.SizeOf(input[0]));
}
}

string PName = "";

private void button1_Click(object sender, EventArgs e)
{
PName = comboBox1.Text;

if (PName != "";)
{
hWnd = FindWindow(null, PName);

if (hWnd != 0)
{
MessageBox.Show("Das Fenster " + PName + " wurde gefunden!";);
}
else
{
MessageBox.Show("Das Fenster konnte nicht gefunden werden!";);
}
}
}

private void button5_Click(object sender, EventArgs e)
{
SetForegroundWindow(hWnd);
SendCodes();
}


Heut' debug ich, morgen brows' ich, uebermorgen cast' ich die Koenigin auf int ...

4.942 Beiträge seit 2008
vor 15 Jahren

Weil DirectX DirectInput (http://msdn.microsoft.com/en-us/library/bb219802(VS.85).aspx) verwendet, welches direkt die Tastatur (bzw. den Treiber) abfragt und nicht den Umweg über die Windowsnachrichten (messages) geht.

Eine Lösung kann ich dir leider nicht anbieten...

C
C#Noob Themenstarter:in
33 Beiträge seit 2006
vor 15 Jahren

aha 🤔 .... hmmm ich glaube ich habe wieder ein bischen was zu lesen ^^ ... danke

Heut' debug ich, morgen brows' ich, uebermorgen cast' ich die Koenigin auf int ...

C
401 Beiträge seit 2007
vor 15 Jahren

Das hier könnte dir auch helfen: http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/29cf2de9-412e-44dd-9050-174089d8e2a2

Erster Eintrag bei Google, btw.