Hi,
also bevor ich hier wieder ewig probiere:
Ich will aus ner zweiten modalen Form ein Tastendruck an meine Mainform bzw. an das Browser-Control darauf versenden.
Wie mache ich das ?
Habe es schon probiert mit:
Ne Möglichkeit wäre noch Sendinput bzw. keyb_event.
Würde aber erstmal wissen, wieso das nicht mit SendKeys geht !!??
Hallo R3dNeXX,
es sieht fast so aus als wolltest du einen unkonventionellen Weg für die Kommunikation von zwei Forms verwenden.
Guck dir mal das hier an: [FAQ] Kommunikation von 2 Forms
Vielleich erübrigt sich dann dieses Problem
Gruss
Michael
Nein passt schon so.
Hab vergessen es zu erwähnen: auf der 2. modalen Form ist ein Bitmap. Diese Form stellt mein Touchscreen-Keyboard dar.
Ich will (logischerweise) bei Klick auf das Bitmap (die Tastatur) die jeweilige Taste an mein Browser-Control senden, um halt dem User zu gestatten, auf manchen Seiten etwas einzugeben.
Hallo R3dNeXX,
bist du auch sicher, dass das Browser-Control den Fokus besitzt?
Zu SendMessage/Input kann ich dir nichts sagen, da noch nie benutzt - solltest du aber keyb_event() noch testen wollen, kannst du mal folgendes versuchen:
[DllImport("user32.dll")]
private static extern void keybd_event(byte key, byte bScan, int dwFlags, UIntPtr dwExtraInfo);
public void sendKey(byte key)
{
keybd_event(key, 0, 0, UIntPtr.Zero); // runter
keybd_event(key, 0, 2, UIntPtr.Zero); // und hoch
}
Hi,
ok werde mir die Geschichte mit keyb_event mal genauer anschauen.
Zum Thema Fokus: habe auch schon in die Richtung gedacht.
Habe zum Probieren mal in der Mainform ne static-Methode erstellt, in der zuerst über Browser.Focus() der Fokus auf das Control gesetzt wird und danach über SendKeys die Taste gesendet.
Die Methode rufe ich dann per BeginInvoke aus der anderen Form auf.
Klingt für mich zwar logisch, funktioniert aber trotzdem nicht. X(
Ok, werde mich mal an keyb_event setzen.
Bin für weitere Vorschläge weiterhin offen. 😁
Also ich hab es mal so probiert und es funzt trotzdem nicht:
[DllImport("user32.dll")]
private static extern void keybd_event(byte key, byte bScan, int dwFlags, UIntPtr dwExtraInfo);
public static void Send()
{
main.Browser.Focus();
keybd_event((byte)0x41, 0, 0, UIntPtr.Zero);
keybd_event((byte)0x41, 0, 2, UIntPtr.Zero);
}
Ich würde tatsächlich darauf tippen, dass das irgendwas mit dem Focus zu tun hat.
Nur wie löse ich sowas ?
Meine 2. Form (Keyboard) muss ja logischerweise modal sein, irgendwie muss ja was eingegeben werden.
Hab echt kein Plan ! X(
Warum muß deine 2. Form modal sein?
Durch einen modalen Dialog blockst du doch die Nachrichtenschleife des MainForms, d.h. dort kann nichts ankommen.
Hm ich meinte auch eher topmost, das modal war Quatsch.
Und dadurch kommt doch die Message in der Queue meiner Mainform an !
Hat keiner ne Idee an was es liegt ?
Ich muss doch irgendwie meinem Browser-Control aus meiner 2. Form Tastatureingaben schicken können !
Hallo
meiner Meinung nach solltest Du das Konzept von MichlG aufnehmen. 2. Formular generiert einen Event bei dem die Taste mitgegeben wird. Das vom 1.Formular registriert dieses und sendet den empfangenen Wert an das Browser-Control
lG
Thomas
Hallo R3dNeXX,
über Suchbegriffe wie virtual keyboard o.ä. solltest du Threads, wie man dein Problem löst, finden.
herbivore
Also das mit dem Event war eine gute Idee, ich hätte auch mal eher darauf reagieren können !
Also ich registriere das Event in der Mainform und setze dort dann den Focus auf den Browser und sende per keyb_event die entsprechende Taste.
Nur funktioniert bsi jetzt z.B. nur Backspace. Die anderen Tasten werden gesendet, aber nicht ausgegeben.
Ich schätze, dass das irgendwas mit dem Hexwert zu tun, den ich sende, obwohl er stimmt:
private void SendKey(object sender, KeyEventArgs e)
{
try
{
byte code = Convert.ToByte(e.KeyValue.ToString("X"), 16);
if (!Browser.Focus())
...
keybd_event(code, 0, 0, UIntPtr.Zero);
keybd_event(code, 0, 2, UIntPtr.Zero);
}
catch (Exception Ex)
{
...
}
}
Mal ein Versuch, das Hin und Her mit der byte-Variable ist eig. nur zum Test, weil ich sehen wollte, ob der Wert stimmt, den ich schicke.
Habt ihr da noch Ideen zum Problem ??
(Ja ich weiß, ich nerve, will aber das Problem komplett beseitigen !)
Ok alles ist gut.
Es fehlte dann doch noch ein Browser.Document.Focus() !!
Darauf muss man erstmal kommen.
Jetzt funktionierts mit keyb_event, SendKeys.Send ... .
Vielen vielen Dank für eure Hilfe !
Noch nen schönen Tag. 👍