hallo,
ich versuche direkt an eine Applikation via SendMessage einen virtuellen Tastendruck zu senden.
folgendermaßen implementiert:
Nun habe ich folgendes Verhalten wenn ich spy++ verwende. Der "tastendruck" kommt zwar an allerdings wird immer noch ein 2. WM_SYSKYDOWN bzw. WM_SYSKEYUP angezeigt ohne irgendwelche Parameter.
Wenn ich regulär in der Applikation die Taste oder Tasten betätige erscheint dies nicht.
woran könnte das liegen und wie bekomme ich das weg?
gruß
ralf
ich versuche direkt an eine Applikation via SendMessage einen virtuellen Tastendruck zu senden.
folgendermaßen implementiert:
Code:
[DllImport("User32.dll")]
static extern bool SendMessage( IntPtr hwnd, UInt32 msg, UInt32 wParam, UInt32 lParam );
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
uint WM_SYSKEYDOWN = 0x0104;
uint WM_SYSKEYUP = 0x0105;
public Form1()
{
InitializeComponent();
ParenthWnd = FindWindow(null, lpszParentClass);
if (ParenthWnd.Equals(IntPtr.Zero))
{
txtDebug.AppendText(lpszParentClass + " Not Running");
}
else
{
txtDebug.AppendText(lpszParentClass + ": " + ParenthWnd.ToString());
}
}
...
private void runInterval() // wird aufgerufen wenn der timer tickt
{
SendMessage(this.ParenthWnd, WM_SYSKEYDOWN, Convert.ToUInt32( Keys.X ), 0);
SendMessage(this.ParenthWnd, WM_SYSKEYUP, Convert.ToUInt32(Keys.X), 0);
}
Nun habe ich folgendes Verhalten wenn ich spy++ verwende. Der "tastendruck" kommt zwar an allerdings wird immer noch ein 2. WM_SYSKYDOWN bzw. WM_SYSKEYUP angezeigt ohne irgendwelche Parameter.
Wenn ich regulär in der Applikation die Taste oder Tasten betätige erscheint dies nicht.
Code:
<00029> 000701DC S WM_SYSKEYDOWN nVirtKey:'X' cRepeat:5 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<00030> 000701DC R WM_SYSKEYDOWN
<00031> 000701DC S WM_SYSKEYUP nVirtKey:'X' cRepeat:0 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<00032> 000701DC R WM_SYSKEYUP
woran könnte das liegen und wie bekomme ich das weg?
gruß
ralf