Choosing capture devices in Win32 app - c++

I have an Win32 application based on Chromium Embedded Framework (CEF3) API. In embedded browser window displays the web-page, that uses WebRTC-connection to communicate with another side that has the same application. So we have real-time videochat between two sides.
Now I should provide users an ability to choose capture devices (microphone and webcam) for WebRTC session if the system has several ones, because browser window captures only default devices. The problem is that CEF3 API doesn't provide that functionality (documentation nothing says about it, also there are no answers on official CEF forum in topic about this question).
Is there any way to implement that task via Win32 API? I found some information about how to enumerate devices (using SetupDi* functions, using DirectShow API), but not about how to enable/disable a specific device for my app. What exactly I should use for solve this problem?
Advice please, I'll be thankful for any help. It will be nice to see the code examples, if possible.

Take a look at microsoft samples of directshow. It's all over there. https://msdn.microsoft.com/en-us/library/windows/desktop/dd375468(v=vs.85).aspx

Related

Is there MSHTML Editing equivalent in MS Edge?

I want to use MS Edge as an html editor. Is that possible?
Can I use c++ to access undo stack?
If so, please point me to any kind of documentation.
Thanks
I don't have any sources for this, but I'm pretty certain that Microsoft didn't carry this functionality over into Edge - especially considering that you can't embed Edge in a C++ or .NET desktop application the same way you can with IE.
I don't see any reason you couldn't just keep using MSHTML, though.
When referring to the MS Web Browser Control documentation there is, at the top of the page:
We're no longer updating this content regularly. Check the Microsoft Product Lifecycle for information about how this product, service, technology, or API is supported.
And next to it, a button: "Recommended Version."
Click the button, and it's the MS Edge dev portal. From there, we see, amongst others. a link to Mozilla Developer Network Web Docs, and another to MS's own Progressive Web Apps on Windows. Not so MSHTML edity anymore, but if you want it implemented, then perhaps uservoice?

Using GDI+ vs HTML page

I am working on an application which is UI intensive (i.e. we need to customize all the control to look different).
For this is I planned to use GDI+ in win32. But one of the suggestion form our team member is,
Instead of using GDI+ he asked me to have a web browser control, in that he asked me to display local html.That html page contains customized controls.
Form his suggestion I created a web control and used some UI intensive local html pages. That looks good.
But my question is, is it is a good idea to use web control to solve this?
Using a web browser control to solve this problem is common. There are many applications out there that already do this. For example Steam uses Chromium instead of the web browser control to do all its window skinning. Windows 8 metro is another example of an HTML-based interface. There are even entire frameworks built on html-based interfaces such as Appcelerator. There are many benefits to going the web browser control route but it is not easy to get it right.

Host a c++ desktop application on a webpage

I am having a desktop application which having a UI interface made in Qt linked with a library which is doing all the calculation stuff. Values from UI is taken and pass to the API's in the DLL to get the output which is shown on Screen.
Now i want to do the same thing by transferring my application UI to a web page so that people can access the tool from anywhere without any installation process.
I want to retain my c++ DLL code so i don't have to do a lot of work. I am thinking of just converting this DLL to a C++ server by any communication Process(Sockets). I want to host this application on my company's website. (We have to make the website also so we are open to any set of tools).
I want to know what will be the best set of tools to do this stuff. Also there will be lot of data exchange between the webpage and server so the wholething should be optimized also. I goggled a bit and find stuff like silverlight and ASP.NET, But i am still not very clear which option will be more suitable.
I am a c++ programmer with no web application development experience. I am open to learn any new technology.
Thanks
Why not use Qt on the web directly? There are several projects like this one: http://qtwui.sourceforge.net/
There is a netscape plugin that will host a QT application and an ActiveX control wrapper on the QT website. You could use one of those to wrap your application. Note that this approach would require the user (or their administrator) to download and install the plugin.
An alternative approach might be to run your application through a remote desktop such as XVNC, NX or an RDP based layer. IIRC browser based remote desktop clients are available for most such protocols.
A few options:
pick a messaging/queue implementation (like http://www.zeromq.org/) and provide a service
implement a Windows Web Service if you want to be more enterprise friendly: http://msdn.microsoft.com/en-us/magazine/ee335693.aspx
I would not expose the implementation on the internet. Enough to have a simple buffer overflow and the machine can be taken over quickly. Adding a layer between the app and the web provides an easy way to validate input, access, stats ...
You should be able to use your DLL from an wt or cppcms application. Then you do not have to learn something new and can just use C++.
The way I'm currently doing this is with Boost.Python + django

Web interface for c++ applications

Our company has a set of 3d modeling softwares written in c++ with qt based gui. We are planning to offer these applications to customers to try them from a web browser. I mean to say, we need to create web interfaces for native c++ codes. Please suggest me which technology, languages should be used. If possible please give some links to some white papers or case studies for this kind of projects. I am totally clue less :)
Ideally you would keep your c++ code on the server and use a mixture of HTML and Javascript on the browser. However since 3d modeling is so client centric you may have to run some c++ code directly in the browser.
There are a few options to look at:
Emscripten
Adobe Alchemy
Google Native Client
A Java Applet using NestedVM
Netscape plugin API
ActiveX
You could also run a few instances of your application on your server inside an XVnc session and let people use it through a VNC viewer applet. The simplest solution however is still to offer a downloadable demo of your application.
Have a look at Wt
Take a look at Native Client.
Soon you might be use WebGL to do 3D in the browser. But how long it will take for browsers to include it I do not know. But it might be good to look at it to not rule out using it in the future.
If creating everything again is too expensive, always you can create a distributed application:
One program running the main application in C++ and generating (for example) XML files.
A web application reading the XML files generated by the C++ application and translating them into the web application language (for example Adobe Flex).
Good luck!

Google Earth and Windows application

I have a C++ Windows application continually updating lat, long and altitude.
I would like my application to incorporate Google Earth to visually "track it".
Any advice or pointing in the right direction would be appreciated.
Thanks.
You can embed the Google Earth plugin into your application as an ActiveX control. The API for the control can be found here. You need to instantiate your GEPlugin control and from here you can retrieve all the other COM objects. There is no need to register with Google for the development key. This is not supported by Google as it bypasses the official method of development using Javascript.
Starting point - look at using a web browser as a control/component. For example, Internet Explorer can be used as an ActiveX control. Not easy in plain C++, but supported by MFC - which I'm not very familiar with.
I can't give any more specific pointers than that, unfortunately, except that I tried it once a few years ago (just for fun) and couldn't get it to work. I could get it into a dialog, but when I told it to load a page, it would stay blank.
Still, it is possible - look at all the magazine coverdisks that have "their own web browser".
Sep,
Can you provide a few more details on how to do this with the GE Plugin? I've gotten it working by embedding a browser object in my C# app, but not directly as an ActiveX control. If I can avoid having to create a web site to host javascript, then I'm all for that. Thanks!
Bob