10 Stimmen

Nicht fokussieren, sondern Interaktion ermöglichen?

Mit der Bildschirmtastatur in Windows 7 können Sie den Fokus auf einem Textfeld halten, während Sie über die Tastatur tippen. Wie kann ich in C# und .Net eine andere Anwendung dazu zwingen, den Fokus zu behalten, während sie Eingaben annimmt, genau wie die Win7-Bildschirmtastatur? Oder vielleicht besser formuliert: Wie kann ich verhindern, dass meine Anwendung den Fokus erhält, wenn mit ihr interagiert wird?

Ich habe versucht LockSetForegroundWindow und haben damit keine Ergebnisse erzielt.

17voto

Julien Lebosquain Punkte 39679

Sie müssen die WS_EX_NOACTIVATE erweiterten Stil auf Ihr Fenster. Der einfachste Weg ist die Verwendung von P/Invoke.

private const int WS_EX_NOACTIVATE = 0x08000000;
private const int GWL_EXSTYLE = -20;

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int GetWindowLong(IntPtr hwnd, int index);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int SetWindowLong(IntPtr hwnd, int index, int newStyle);

...

var window = new Window();
window.SourceInitialized += (s, e) => {
    var interopHelper = new WindowInteropHelper(window);
    int exStyle = GetWindowLong(interopHelper.Handle, GWL_EXSTYLE);
    SetWindowLong(interopHelper.Handle, GWL_EXSTYLE, exStyle | WS_EX_NOACTIVATE);
};
window.Show();

Sie können auch die WPF-Interop-Klasse HwndSource um Ihr Fenster zu erstellen. Sein Konstruktor akzeptiert den erweiterten Fensterstil.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X