Wie kann man mit C# einen Tastendruck ohne Fenster Fokus Abfragen?
Guten Tag,
Ich will mit Windows Forms ein Programm schreiben, dass einen Tastendruck abfragt und mit dem Drücken einer anderen Taste antwortet. Dies hab ich auch soweit mit KeyDown, Keys und SendKeys Hinbekommen und es Funktioniert. Jedoch soll das ganze auch funktionieren wenn man gerade nicht das Fenster im Fokus hat, also z.B. gerade in einer anderen Software ist. Kann mir da jemand helfen?
LG Stoppi
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Test_WF
{
public interface IMessageFilter
{
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
KeyPreview = true;
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void label1_Click(object sender, EventArgs e)
{
}
private void Form1_KeyDown_1(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.W)
{
SendKeys.Send("L");
}
if (e.KeyCode == Keys.W)
{
label1.Text=("W");
}
if (e.KeyCode == Keys.L)
{
label2.Text = ("L");
}
}
}
}
1 Antwort
Das geht nur über die Windows-API.
Ein Programm kann dort Hooks registrieren und auf Windows-Messages registrieren, darüber werden alle Ereignisse im Windows verteilt, auch Tastatureingaben. Das Wichtigste sind die Funktionen:
SetWindowsHookEx
Erzeugt einen Hook, die angegebene Methode wird dann je Message aufgerufen. Für die Daten in dieser Message gibt's dann lange Listen, was das bedeuten kann.
CallNextHookEx
Das brauchst Du, um den nächsten Hook aufzurufen, damit auch der Rest im Windows noch funktioniert.
UnhookWindowsHookEx
Damit entfernst Du den Hook wieder, damit Windows den Hook nicht sinnlos versucht aufzurufen.
Die Website pinvoke.net hilft dabei sehr.
Dann solltest lernen, dich selber zu informieren, das hört nämlich nie auf und Du wirst immer und immer wieder vor der Herausforderung stehen, neue Dinge lernen zu müssen. Das gehört zum Job dazu.
Und Du bist nicht der erste mit dem Ziel, die Frage wurde schon zig Mal beantwortet, auch ausführlicher in Blogs.
Oder Du liest die Doku von Microsoft, das Stichwort für die Technologie dahinter ist "P/Invoke", damit kann man native C/C++-Bibliotheken aufrufen, also auch die WinApi.
Hast Du das verstanden, fehlt gar nicht mehr so viel, auch für die benötigten Funktionen hat Microsoft geeignete Doku.
Und wenn Du konkrete Fragen hast, kannst Du ja wieder fragen.
Danke! Hat mir sehr weiter geholfen.
Das ist dann ja doch etwas Komplizierter als ich dachte. Eigentlich will ich nur was kleines Ausprobieren. Könnten sie mir vielleicht etwas dabei behilflich sein? Ich möchte irgendwo halt auch wirklich was lernen und verstehen wie es funktioniert.
LG