Autor Beitrag
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Di 27.01.09 09:44 
Hallo!

Ich bastle momentan an einer vereinfachten Autovervollständigung im Intellisense-Stil für eines meiner Programme. Dazu verwende ich eine ListBox. Drückt der User nun eine Taste, während diese ListBox den Fokus hat, möchte ich, dass dieser KeyCode an das Edit-Control weitergegeben wird. Das soll allerdings nicht nur für die Buchstabentasten funktionieren, sondern für alle Keycodes außer KeyUp, KeyDown, PageUp, PageDown, Home und End, da letztere separat behandelt werden.
Nun bin ich auf die SendKeys-Klasse gestoßen, die ziemlich genau das macht, was ich suche, allerdings muss ich die Zustände der Ctrl-, Alt- und Shift-Taste selbst berücksichtigen und auch das Escaping beachten. Daher die Frage: gibt es eine ähnliche Klasse oder eine andere Methode, die die übergebenen KeyCodes direkt weitersenden kann ohne sie umständlich selbst für SendKeys anzupassen?

AXMD
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4808
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 27.01.09 11:02 
Du könntest direkt die WinAPI-Funktion 'SendMessage' mit WM_KEYDOWN per PInvoke benutzen: www.pinvoke.net/defa...r32/SendMessage.html.
Zu den weiteren Parametern zu WM_KEYDOWN siehe msdn.microsoft.com/e...ms646280(VS.85).aspx
Der 'wParam' entspricht dann dem KeyCode und als 'lParam' reicht es eine 0 anzugeben (in den meisten Fällen).
AXMD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Di 27.01.09 12:10 
Hallo!

Danke für die schnelle Antwort. PInvoke möchte ich vermeiden, da das Programm portierbar bleiben soll.

AXMD
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4808
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 27.01.09 15:02 
Nur mit reinem .NET-Mittels wirst du wohl um die SendKeys-Klasse nicht herumkommen, d.h. eine Methode selber schreiben, welche den KeyCode dann in einen String umsetzt (also "von hinten durch die Brust ins Auge" oder so ähnlich).
Jedoch gilt die Anwendung von SendKeys bei einigen Antivirenprogrammen o.ä. als Key-Injection...
(ich verwende SendKeys zum Absetzen von Ctrl-C/X/V bei Aktivierung der entsprechenden Menüpunkte "Kopieren", "Aussschneiden" und "Einfügen und kenne daher dessen Nachteile)
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 27.01.09 15:40 
Mit der Win-API habe ich mich noch nie vertragen, aber sollte das nicht doch irgendwie auf Message-Basis (DefWndProc, ReflectMessage(?)) funktionieren? Implementiert sind die Methoden jedenfalls in Mono.

_________________
>λ=
AXMD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Di 27.01.09 17:50 
@Kha: Ich werd mal nachsehen, ob es entsprechende Methoden auch von Microsoft gibt. Danke für den Hinweis.

AXMD
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 27.01.09 17:56 
Die gibts da schon, sonst hätte ich sie nicht genannt/gekannt :zwinker: . So viel Zeit haben die Mono-Leute nun auch wieder nicht, dass sie mehr Windows-Features als MS selbst implementieren :mrgreen: .


/add: Sieht so aus, als ob das wirklich funktionieren sollte:
www.mono-project.com/WinForms hat folgendes geschrieben:
Mono's Windows.Forms implementation translates the native system events such as X11 into Win32 WM_ messages and dispatches them using the WndProc mechanism. This allows applications that depend on overriding WndProc to get some features not exposed by the APIs to still run.

_________________
>λ=