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 ...
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...
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 ...
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.