Aktuelles Problem:
Wichtige Ereignisse in WebView2:
- Wenn ich die linke Alt-Taste drücke, erhalte ich das Keydown-Ereignis, aber das Keyup-Ereignis wird oft übersehen.
- Wenn ich AltGr drücke, wird das Keydown-Ereignis angezeigt wird inkonsistent erkannt, oft als Strg oder Alt, und manchmal auch „steckt fest“.
- Sobald „stecken bleibt“, scheint der Alt-Status von WebView2 zwischengespeichert zu sein, und nachfolgende Tastendrücke (z. B. Strg) bewirken, dass WebView2 den zwischengespeicherten Status „freigibt“.
- Ich möchte zuverlässig mit Alt umgehen und AltGr-Tasten innerhalb der Anwendung ohne Inkonsistenzen.
- Ich muss das Standardnavigationsverhalten von Alt in WebView2 blockieren (z. B. den Fokus von WebView2 aufheben oder versteckte Menüs aktivieren).
- Ich bin nicht speziell an WebView2 gebunden. Wenn jemand eine Lösung für das alte WebView hat, bin ich offen für einen Wechsel.
- Ich möchte Alt und ALT GR in meinem WebView ordnungsgemäß verwenden (Zur Klarstellung: google.com z. B. funktioniert einwandfrei mit Eingaben wie {[]}, aber im Guacamole-Tastaturtest funktionieren die Eingaben nicht richtig -> Bilder unten Soweit ich weiß, gehen Google und andere mit diesen Eingaben anders um)
Was ich versucht habe:
WebView2-Einstellungen: - Setzen Sie AreBrowserAcceleratorKeysEnabled = false, um Verknüpfungen auf Browserebene zu deaktivieren.
- Verwendet CoreWindow.KeyDown und KeyUp zum globalen Erfassen und Verwalten von Schlüsseln. Diese Ereignisse werden jedoch nicht immer ausgelöst, wenn WebView2 fokussiert ist.
- Keydown- und Keyup-Listener über AddScriptToExecuteOnDocumentCreatedAsync eingefügt. Dies funktioniert zwar bis zu einem gewissen Grad, spiegelt jedoch nicht zuverlässig den physischen Zustand der Alt- und AltGr-Tasten wider.
- WebView2 wurde programmgesteuert auf bestimmte Tastendrücke (z. B. Alt) neu ausgerichtet, was jedoch zu weiteren Inkonsistenzen führte.
Manchmal werden die KeyUp- und KeyDown-Ereignisse abonniert von:
Code: Select all
if (Window.Current != null && Window.Current.CoreWindow != null)
{
Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown;
Window.Current.CoreWindow.KeyUp += CoreWindow_KeyUp;
Debug.WriteLine("KeyDown and KeyUp event handlers registered.");
}
Linke Alt-Taste:
-keydown funktioniert, aber keyup wird häufig übersehen. Sobald die Taste „hängt“, führen nachfolgende unabhängige Tastendrücke (z. B. Strg) dazu, dass die zwischengespeicherte Tastatureingabe verarbeitet wird.
AltGr:-Ähnlich wie die linke Alt-Taste wird die gedrückte Taste oft als Strg oder Alt missverstanden. Das Verhalten ist inkonsistent und variiert je nachdem, welche anderen Tasten danach gedrückt werden.
Frage:
Wie kann ich zuverlässig mit Alt umgehen? und AltGr-Schlüsselereignisse in WebView2 oder WebView innerhalb einer UWP-Anwendung? Konkret:
- Wie kann ich das Standardverhalten von Alt (z. B. Navigation) blockieren oder deaktivieren?
- Wie kann ich? Ich stelle eine konsistente Handhabung von AltGr ohne falsches Keydown-/Keyup-Caching sicher?
Mir ist bekannt, dass WebView2 in UWP nicht offiziell unterstützt wird, und ich habe dies auch damit getestet das alte WebView-Steuerelement. Wenn jemand eine zuverlässige Lösung für WebView hat, wechsle ich gerne wieder dazu.
Ich habe Lösungen untersucht, die globale Schlüssel-Hooks, Fokusverwaltung und JavaScript-Injection umfassen, aber keine davon hat das Problem vollständig gelöst.< /p>
Code
Globale Schlüsselhandler:
Code: Select all
private void CoreWindow_KeyDown(CoreWindow sender, KeyEventArgs args)
{
Debug.WriteLine($"Global KeyDown: {args.VirtualKey}");
if (args.VirtualKey == VirtualKey.Menu) // Left Alt
{
Debug.WriteLine("Alt detected, resetting focus to WebView2.");
args.Handled = true; // Prevent default behavior
ExamBrowser.Focus(FocusState.Programmatic); // Refocus WebView2
}
}
private void CoreWindow_KeyUp(CoreWindow sender, KeyEventArgs args)
{
Debug.WriteLine($"Global KeyUp: {args.VirtualKey}");
if (args.VirtualKey == VirtualKey.Menu) // Left Alt
{
Debug.WriteLine("Alt key released.");
args.Handled = true; // Prevent default behavior
}
}
Code: Select all
document.addEventListener('keydown', function(event) {
let message = {
type: 'keydown',
key: event.key,
code: event.code,
ctrlKey: event.ctrlKey,
altKey: event.altKey,
shiftKey: event.shiftKey,
metaKey: event.metaKey
};
window.chrome.webview.postMessage(JSON.stringify(message));
});
document.addEventListener('keyup', function(event) {
let message = {
type: 'keyup',
key: event.key,
code: event.code,
ctrlKey: event.ctrlKey,
altKey: event.altKey,
shiftKey: event.shiftKey,
metaKey: event.metaKey
};
window.chrome.webview.postMessage(JSON.stringify(message));
});
- Betriebssystem: Windows 10
< li>Plattform: UWP mit WebView2 (Chromium-basiert) und WebView (Legacy-getestet) - WebView2-Version: 1.0.113 – Vorabversion

Drücken Sie die linke Alt-Taste und ALT GR (die Aufwärtstaste für die linke Alt-Taste wird nur angezeigt, wenn Sie erneut ALT GR drücken / Gleiches Verhalten, wenn Sie die linke Steuerung anstelle von ALT GR drücken)

Jede Hilfe ist sehr willkommen!