Laden...

Char/String-Parameter an PostMessage übergeben

Erstellt von BangerzZ vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.151 Views
B
BangerzZ Themenstarter:in
45 Beiträge seit 2009
vor 14 Jahren
Char/String-Parameter an PostMessage übergeben

Ich versuche gerade einen string an ein Fenster Control zu senden und das via postMessage.

Dazu habe ich folgende Methode aufgestellt.

        [DllImport("user32", EntryPoint = "PostMessage")]
        public static extern int PostMessage(IntPtr hwnd, int Msg, int wParam, int lParam);

        public static void sendControlString(string msg, IntPtr handle)
        {
            foreach (Char c in msg)
            {
                PostMessage(handle, WM_KEYDOWN, (int)c, 0);
            }
        }

Das eigentliche Problem ist, dass immer das Falsche geschickt wird.
Gebe ich zb als String abcdefg ein, so kommt als Ergebnis : 1234567
Außer dem wird der das Numbpad emuliert, das habe ich herausgefunden in dem ich mir den keycode vom keyDown Event des Control angesehen habe.

Kann mir einer sagen wie ich an den richten wert aus einem Char bekomme?

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo BangerzZ,

warum verwendest du nicht besser die SendKeys-Klasse?

herbivore

5.299 Beiträge seit 2008
vor 14 Jahren

ich denk, du müsstest die TastenCodes als Elemente der Keys-Enumeration senden, keine Chars.
Wie du aus Chars allerdings an die TastenCodes kommst, weiß ich grad auch nix besseres als ein Dictionary anzulegen und befüllen.

Der frühe Apfel fängt den Wurm.

4.942 Beiträge seit 2008
vor 14 Jahren

Mit der WinAPI-Funktion VkKeyScan (http://msdn.microsoft.com/en-us/library/ms646329%28v=VS.85%29.aspx) kommt man an die entsprechenden Virtual Keys.
Und zum Einbinden in C# mittels P/Invoke: http://pinvoke.net/default.aspx/user32/VkKeyScan.html

P.S. Die SendKeys-Klasse sendet immer nur an das gerade fokussierte Fenster (evtl. ist das ja nicht gewünscht).

B
BangerzZ Themenstarter:in
45 Beiträge seit 2009
vor 14 Jahren

Perfekt danke.
Und ja es geht darum die Eingabe in ein nicht fokussiertes Control zu tätigen.