C # – Come postare messaggi in una finestra flash incorporata in un browser web?

Vorrei sapere se c’era un modo per bloccare su una finestra Flash e inviare un messaggio ad esso? Un’altra persona qui ha avuto la risposta, il suo nome è Spencer K. La sua domanda è stata: l’ invio di un clic simulato tramite WebBrowser in C # all’object flash incorporato in HTML

Sfortunatamente, il signor K non era molto specifico, e tutto ciò che ha lasciato alle persone che leggono la sua domanda è che ha “preso la maniglia e poi ha iterato attraverso le maniglie”. Non sono molto sicuro di cosa intendesse. Ho iterato attraverso tutte le maniglie visibili usando EnumWindows inutilmente, in quanto ciò non ha restituito una finestra che era una finestra flash.

Spero che qualcuno qui possa dirmelo, dato che mi ha fatto impazzire per gli ultimi giorni.

EDIT: Ho appena deciso di inserire un object SWF nel mio modulo e di inviare messaggi al gestore di quello.

In realtà anche la finestra del flash ha il suo handle. Per ottenerlo devi ottenere i nomi delle classi dei controlli in cui è incorporato da Spy ++, quindi puoi raggiungerlo in questo modo:

[DllImport("user32.dll", SetLastError = true)] public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, IntPtr windowTitle); public IntPtr Flash() { IntPtr pControl; pControl = FindWindowEx(webBrowser1.Handle, IntPtr.Zero, "Shell Embedding", IntPtr.Zero); pControl = FindWindowEx(pControl, IntPtr.Zero, "Shell DocObject View", IntPtr.Zero); pControl = FindWindowEx(pControl, IntPtr.Zero, "Internet Explorer_Server", IntPtr.Zero); pControl = FindWindowEx(pControl, IntPtr.Zero, "MacromediaFlashPlayerActiveX", IntPtr.Zero); return pControl; } 

Quando ottieni l’handle, puoi pubblicare i clic:

  [DllImport("user32.dll", SetLastError = true)] static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam); public enum WMessages : int { WM_LBUTTONDOWN = 0x201, WM_LBUTTONUP = 0x202 } private int MAKELPARAM(int p, int p_2) { return ((p_2 < < 16) | (p & 0xFFFF)); } public void DoMouseLeftClick(IntPtr handle, Point x) { PostMessage(handle, (uint)WMessages.WM_LBUTTONDOWN, 0, MAKELPARAM(xX, xY)); PostMessage(handle, (uint)WMessages.WM_LBUTTONUP, 0, MAKELPARAM(xX, xY)); } 

I punti saranno relativi al cliente, quindi quando li salvi, dovresti salvarlo in questo modo:

  List plist = new List(); private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { switch (e.KeyCode) { case Keys.C: plist.Add(webBrowser1.PointToClient(Cursor.Position)); break; default: break; } } 

Spero che questo sia stato utile

Puoi farlo tramite javascript.

Importa questo:

 import flash.external.ExternalInterface; 

Pubblicalo sul tuo codice AS:

 if (ExternalInterface.available) { // add external interface ExternalInterface.addCallback("jsFunction", asFunction); } public static function asFunction(message:String):void { } 

Sul tuo object JS dell’object flash puoi chiamare questa funzione:

 jsObject.jsFunction("message"); 

Questa è la funzione per ottenere l’object js dell’object flash:

 var InternetExplorer = navigator.appName.indexOf("Microsoft") != -1; jsObject = InternetExplorer ? window.jsObjectName: window.document.jsObjectName; 

Non ho provato questo codice, l’ho appena copiato da un progetto.

modifica: aggiunta la funzione js per ottenere l’object js

La finestra di Flash probabilmente non avrà il suo handle, poiché è incorporata in una pagina web. Vorresti postare il messaggio nella finestra del browser web (è ciò che ha fatto Mr. K).

Se ciò non funziona per te, l’unica altra opzione di cui sono a conoscenza è di ottenere il controllo del browser tramite WebDriver o WatiN e interagire con l’object Flash utilizzando javascript.

per chiamare una funzione nell’object flash puoi usare questo codice

  swfobject.CallFunction( "" + " " yourvalue "  "); 

per ulteriori informazioni, segui questo link: comunicate-betwen-c-and-an-embeded-flash-application

lo provo per un object flash nella mia applicazione di modulo e funziona, ma non l’ho usato per webbrowser