Invoke Flash methods from C# (MONO) - c#

Using .NET (Windows), you can embed an ActiveX Flash player into a Windows form, load a swf file and set variables or invoke functions with single method calls from C# (I imagine because of the presence of a Flash OCX).
That said, I would like to do the same thing in MONO (Linux): how could this be possible?

Is it possible to "embed" an HTML page, using some (system controlled) prefered renderer (like firefox)? In that case it might be possible to get a flash in there and control it through javascript... It does sound a bit far-fetched though.
If you do manage to get the flash in there, you might be able to communicate with it through a TCP/IP connection from the flash to your program.

Flash takes the form of an ActiveX (i.e. COM) DLL on Windows because that's the preferred extensbility platform for Internet Explorer. In other browsers, and on other platforms, Flash takes a different form, using the browser plugin API I believe. Since ActiveX is a no-go on Linux, perhaps it might be possible to implement a plugin host of some sort that can make the Flash plugin think it's running inside a browser. This would probably be "non-trivial" as they say, but theoretically possible.

Related

how to create a webbroswer in wpf that supports all the sites and scripts and play video?

I have to create a webbroswer in wpf that supports all the sites and scripts and play video , I have created but some site got crashed and not supporting .
Please provide solution.
What you ran into are probably error dialogs caused by JavaScript script errors. WPF WebBrowser control currently doesn't support disabling these dialogs and ignoring the errors. The WebBrowser control is based on Internet Explorer core and will have a hard time dealing with broken JavaScript, webpages will also sometimes report the web browser as old and inform the visitor about it, like FlipKart does.
One solution is to use WindowsFormsHost and host a Windows Forms equivalent - WebBrowser control - in it. The WF WebBrowser offers a property called SupressScriptErrors, which is not implemented by the WPF WebBrowser. That will hide the error dialogs for you, but you will still occasionaly receive a warning from the website saying they don't support the web browser used. That is out of your control unless you want to take a route of hacking the control to send a different User-Agent string and that will only fool broken UA detection, feature detection will still fail for things like HTML5 video, WebRTC and the like. More on this here.
You can also choose to embed Gecko (Firefox rendering engine) or Chromium. see here for more information on embedding alternative rendering cores as an alternative to IE COM wrapper offered by the framework.
Edit: this is also a possible solution, as it would seem. You will have to test it for yourself, though. I expect it to have less overhead than the WindowsFromHost element and although this uses reflection to develop against implementation, not interface, my opinion is it's safe to say the underlaying API in unlikely to change.

HTML/CSS/JS in desktop applications

I've read about XSS vulnerability in desktop applications like Skype and ICQ.
I wonder why they choose to use html in this kind of applications that can also be written without any html. Is there a simple reason?
Does someone know if Skype uses html on pages like "Skype Home" only or is the whole GUI written in html?
I'm asking because I'm writing a web application that runs within the browser and will be ported to mobile and desktop platforms once finished. You can compare it to instant messengers but it's something different in fact.
I thought about using PhoneGap to simply "copy" the project to mobile platforms and using system functions via the PhoneGap API. But I think it may be slow and/or not good-looking. Also it wouldn't look native, the question then is whether too use our own html GUI on all platforms (so it looks the same everywhere) or to adapt the design concepts of each platform (using native controls in native languages or e.g. Titanium (which is unfortunately too expensive)).
But I never thought about using HTML in desktop applications. How do you embed that anyway? I'm using C#. Using WebBrowser form element or using some kind of web browser rendering engine?
To answer the initial question (in your 1st paragraph):
I assume they chose to wrote it using HTML as a way to make it cross-platform more easily.
You can't make desktop applications using purely HTML/CSS/JS and have them looking native. However you can use Sencha Touch to make your Phonegap applications look native (to an extent).
Mozilla Prism was written with this idea in mind: http://prism.mozillalabs.com/
Have you tried Appcelerator Titanium Desktop/Mobile. They have a similar idea there - http://www.appcelerator.com/
Thanks.
You can use the WebBrowser control to basically host an internet explorer session in your windows application. This is platform specific, but there is a commercial version which is available for some smartphones: http://en.wikipedia.org/wiki/Mono_(software)#MonoTouch_and_Mono_for_Android.
You can make an HTML5 application which will give you a lot of the benefits of a fat client while maximizing portability with smartphones. You can still have the user save the application to the desktop: http://miniapps.co.uk/installation/. But, that's clunky and, like the desbest said, it will run in a web browser. If you want to maximize the customization, then it looks like PhoneGap is an choice worth taking a look at to me as well.

light weight browser control for c# application

is any light weight browser control available for c# application other than builtin web browser control, when i am using IE or Webkit control for embedding it will consumes 80 MB Memory to render a flash website of(800*600 resolution). how can i reduce the memory
EDIT1:
webkit for .net available webkitdotnet.sourceforge.net which is similar to web browser control i am tested it
If you're just trying to embed Flash, This tutorial describes how to do it:
Embedding a flash player control in a.NET winforms application
The key here is to add the "Shockwave Flash Object" COM object to your project. You'll then have a Shockwave Flash Object control in the toolbox which you can drag onto the form. Set the Movie property to the .swf object.
Then you can skip the whole browser.
There is Mozilla embedding available.
Flash as in Adobe Flash? In that case, it's most likely the Flash content that is taking up most of the memory, which means switching rendering engines will do very little to improve memory usage. You're stuck with what you have.
Honestly though, 80MB isn't much at all. Why are you worried about memory usage? Is it a confirmed bottleneck in your application?
Does the website when you open it in IE consume less memory? I doubt that you can improve the memory consumption. It probably is just how much the website needs.
If you simply look for an alternative to the WebBrowser control, you can try the already mentioned techniques but I doubt that you will get better results.
You could try embedding WebKit into a .net app.
You could try Awesomium (yes, the name is slightly /facepalm worthy ;)). It's based on Chrome (which uses Webkit) and is free for non-commercial use (commercial licensing is also available) and there is a CodePlex project called AwesomiumDotNet that provides a .NET wrapper for it.
I haven't used it yet myself, but came across it doing some research into embedding a Webkit-based browser into an .NET/WPF app.

VLC remotely control from C#

i'm trying to control the VLC Media Player from C#. I tried getting a handle on the window with the FindWindow() command from .Net but as i found out the name of the window changes every time a file is played. The biggest problem i have is sending wm_commands to vlc..This approach worked with Winamp and Windows Media Player but with VLC it appears that it won't work.
I read that VLC can be controlled from a browser but i don't whant that...i've seen in it's settings that it has some hot keys that can be called..but they can be changed and if i call them from my code somehow...and the user changes them..bummer...
i'm a little bit stuck..any help would be fantastic...
Sorin
I have some code that is able to control it using sockets on the RC interface. This worked to a degree but has a lot of quirks. go to full screen seems to do nothing for a few seconds after play is invoked. Overall it sort of works.
The other options are:
Write a DirectDraw filter (very hard) but once this is done VLC can be used instead of or in conjunction with FFMPEG. Existing code that drives media player could use vlc.
Write an interop wrapper for libvlc, recently the VLC team split out libvlccore from libvlc so to the best of my knowledge all the interop is out of date. Once you write a wrapper you could embed vlc in a windows app. (if you need to support x64 you need to compile these libs under x64.
Look through the VLC code and find out if there is a way to send these windows messages.
EDIT This appears to have come out this week.
As Eoin mentioned, libvlc can be used to interact with VLC. As a C# user, you may want to try the .NET bindings offered by the libvlc-sharp project.
Edit: Seems like this project has not been maintained for years. I will leave the link anyway, in case you wish to take a look at it and maybe put some of its source to use.
Have you looked at libvlc
You might be able to wrap that up in a library and interact with VLC through that.
If what you are trying to do is control a previously running executable, check out the Process class to enumerate through all the current processes or do it by name. Check the executable to match vlc.exe. You can then get a handle to the main window and do some P/Invoke to send messages as you are doing with your other executables. This is obviously riddled with potential problems such as if the there are changes to the keyboard shotcuts.
How use libvlc in C++ http://unick-soft.ru/art/files/libvlcProject.zip
I think, use libvlc in C# very similar.
There's also the rc interface and even a telnet one: http://wiki.videolan.org/Console
However, I'd prefer libvlc if possible.

Embedding Flash Player in a C++ or Java application?

I would like to embed Flash Player directly inside a C++ or Java application.
I found an article that describes how to do this for C#:
http://www.adobe.com/devnet/flash/articles/stock_history03.html
Unfortunately, I have no experience with C#, COM or ActiveX. I need someone to translate this code to C++, allowing me to embed the Flash Player into a Win32 Window. Ultimately I'd like to use this information to embed Flash into a Java application.
I am looking for three main functionalities:
Ability to play a Flash movie
Ability to receive events (such as mouse clicks)
Ability to send events
Edit: I prefer an open-source solution if possible.
I don't know how to embed flash in C++, but Christopher Deckers (of SWTSwing fame) has developed an interesting hack which allows it to be embedded in Java. You can find more information in the Javalobby announcement thread.
Here is an updated link: https://github.com/Chrriis/DJ-Native-Swing
I gave the same answer not long ago. Check out SWHX:
http://haxe.org/com/libs/swhx
http://code.google.com/p/screenweaver-hx/
http://code.google.com/p/screenweaver-hx/source/browse/trunk/src/np_host.c
Cheers!
Juan
If it has to be open source I'd consider Gnash, an open source flash implementation.
It works on all major platforms, supports most multimedia codecs and is supposed to be embeddable in applications through nsapi.
If you want to go with a commercial solution, I'd recommend Scaleform GFx. It's not cheap, though, but it's damn good.
One simple way to create a Flash player in your window: AtlAxCreateControlEx.
To receive and send events, you will need a sink: AtlAdvise. You will need to define the functions receiving events on the ActionScript (i.e. Flash) side too.
What you should use is Netscape Plugin API. It's native and it's what all the good browsers use to load flash player plugin. While the actual flash player is not open source, this API is.
If you're not gonna ship a copy of flashplayer with your app:
Your app should check at runtime for flash player and should alert the user if it doesn't find it (usually by giving a link to Adobe to download it).
Flashplayer plugin is usually installed at %AppData%\Mozilla\plugins on Windows.
Take a look at FlashDX. It is open-source and free.
I personally haven't tried this but say in case of SWT/Java you could embed SWT browser window in you SWT/Java application and in the browser view you could put content with flash content, then communicate say with Merapi bridge with flash movie and java.

Categories