I would like to know how to detect if current windows is playing any kind of media (video, music, etc) similar to what energy settings do to decide if the computer can enter sleep/hibernate mode?
I'm trying to detect how long the computer is idle. I'm currently using the GetLastInputInfo from user32.dll but it just take in consideration the user input, but not if there is any media playing which should not consider the computer idle.
I tried to find C# APIs or native invocations but can't find the information. I'm using latest version of .NET Framework.
Generally speaking, programs don't declare that they are playing media - instead they call SetThreadExecutionState to tell Windows that the computer should not sleep.
That said - Windows 10 recently added support for programs to declare to the OS that they are currently playing media so that they're integrated with Windows' media controls (like how on iOS any program playing video or audio can be controlled from the Control Center).
Here's what appears on my screen when I nudge my volume control:
...however Chrome is being buggy here because I'm not actually playing any media in Chrome but it's telling Windows that it is.
I don't know what Windows API is used to set this - or which API is used to check it - but it isn't very widely used - even Windows' built-in Windows Media Player 12 doesn't use it.
Related
I would like to create a "virtual camera" that can be used with 3rd party apps such as Zoom or Skype, browser etc. In the same way these can work with a virtual camera app such as Snap.
I want to take the feed from the built in webcam on the laptop, make some changes to it e.g. brightness, then be able to select in Zoom, Skype, browser, my edited feed.
So far I have written something as a Universal Windows Platform app that takes the webcam feed, applies my processing to it, and shows it in a window. For that I have used the Windows Media API.
https://learn.microsoft.com/en-us/uwp/api/windows.media.effects?view=winrt-19041
Can anyone point me in the right direction of how to take this modified feed and make available to Zoom, Skype, browsers? I've seen a lot of stuff related to DirectShow but nothing that fully makes sense or that has been written in the last 6 or 7 years. What would be the best way to do this in 2020, with C#?
Many thanks
So I created an UWP App that can record several Audio Lines and save the recordings to MP3 files for in-game multi-line recording that I can later edit separately (game audio, microphone, game comms, voice comms) as NVidia ShadowPlay/Share does not support this yet. I achieve this multi-line setup with VAC.
I have a version of this tool written in regular Windows WPF C# and I have a system-wide HotKey Ctrl+Alt+R that starts/stops recording so when I'm in a full screen game, I can start/stop recording without exiting full screen mode (switching window focus).
Can a global (system wide, app window not in focus) HotKey that triggers some in-App event be achieved in a UWP App? I know the functionality is not supported for other platforms. But I only need it to run on Windows 10 Desktop and the HotKey support is mandatory. Or can I achieve my goal in any other way for UWP Apps?
GOAL: System wide key combination to trigger in UWP app event without switching Window focus and messing with full-screen games.
at the moment it is not possible to solve this task thoroughly.
You are facing two limitations of UWP and can be only partially solved:
Lifecycle: UWP apps go in suspended state when they are not focused. They just "block" to consume less resources (and battery). This is a great feature for mobile devices, but is bad news for you project. You can solve this by requesting "ExtendedExecutionSession" which will guarantee that your app never falls asleep when out of focus if "attached to wallpower".
Detect input without focus. It's clearly stated on MSDN that UWP doesn't support keyboard HOOKS (this refers to SetWindowsHookEx). They reinvented "GetAsyncKeyState", now it works only when the Windows is focused. Indeed you can find that under CoreWindow.GetAsyncKeyState().
If you only need to use F Keys as hotkeys you can still do something, like "press F2 when the app is minimzed to activate a function".
Use Stefan Wick example. He solved part of the problem.
Instead if you need to listen to lots of keys (or mouse events) there isn't a way. You can't right now.
Curiosity
UWP has restricted capabilities, one of which called "InputObservation".
At the moment it is not documented and impossible to implement (unless you are a select Microsoft Partner), but it should allow apps to access system input (keyboard/mouse..) without any limitation and regardless its final destination.
I think this feature is the key for system-wide inputs detection.
I am not able to find a way to implement it.
Kind Regards
We're currenty building a little company presentation application for USB sticks that is used to display PDF files regardless of any PDF reader installed on the system. That works quite well, so we now also want to show videos directly inside the application. As we cannot ensure that the customers system is able to play the video file, I'd like to include everything that is neccessary to play the video regardless of the system configuration.
Before I reinvent the wheel - is there a preferred way to do so? Would another video format offer more possibilities? The target OS is supposed to be Windows XP up to Windows 8 and .NET 2.0. Is there any framework/assembly that I could use to become independent of any prerequisites on the target system? Thanks for your recommendations and thoughts on this!
Playing videos requires software to transform the video data into moving images. Unless you want to take on the mammoth task of writing your own MP4 decoder, you'll have to rely on what the user has installed.
Wikipedia lists Windows Media Player versions here. Version 12 is the only one to support MP4 out-of-the-box. That means your Windows XP and Vista users are going to need a third-party codec.
Well i have a htc diamond 2 which run on wm6.5, I would like to access the built in camera to capture image.
I am not building wm app, i want to build a c#(or any other .NET) winform app that run on windows 7 platform.
Is that possible?
I found some articles about directshow.net,wia,windowsmobile camera capture dialog etc.But i really have no idea on how to start it.
So my question is:
How do i establish a connection to my phone(i have to initiate a connection between my pc and phone's camera first right?),do i need to download any windows mobile sdk?
To control the camera, do i need any driver installed?
Do i use htc camera api/sdk(which i can't find) or windows mobile api/sdk to control the camera?
For HTC devices DirectShow cannot be used. The problem is that HTC provides only basic DirectShow API, and you will be able only use very small resolution from camera 320x240. HTC doen't provide any SDK. But I found very useful components for Windows Mobile Direct Show on this page. They are paid but quite good. I think it is worth to check. I'm using Player Control for DirectShow video playing. And there HCTCamera component (Some raw version I think still free) which I didn't check but you can:
HTCCamera Control
Im trying to create a media player (in C# .net 4.0) that will work on windows XP (SP3), vista and 7. Normally I would just go the easy way and use WPF's own MediaElement, but since that relies on Windows Media Player 10 or newer, that wont work as Windows XP SP3 may only have WPM9.
First I tried downloading Jerimiah Morill's WPF MediaKit sample application, but this used the EVR which wont show on my test machine (a Windows xp SP3 only with default codecs and default programs, plus the various .Net framework installations). I also downloaded the binaries and tore these apart, creating a new project only with reference to the DirectShow-dll and the bare minimums from the WPF mediakit, this time with no reference whatsoever to EVR. Still no luck. This i'm having a hard time understanding - should'nt even Windows XP be able to play movies using VMR stright out of the box?
I found some samples of media players where one of these works. This one is called DxPlay and uses directshow's graphbuilder, but is built in winforms, has some rather raw-looking code, and will not scale, seek, handle audio, and in general seems rather sketchy.
So, Is there any easy way to create a media player that will play on all the mentioned platforms without pushing WMP10+? I had high hopes for WPF MediaKit, but something is preventing it from playing on Windows XP SP3 (any solution to this would be very interesting).
Thank you very much in advance!
-ruNury
I would try to wrap VLC media player in your .Net project.
Here are some .Net projects that might help you:
http://vlcdotnet.codeplex.com/
http://sourceforge.net/projects/libvlcnet/
http://www.codeproject.com/Articles/109639/nVLC
MSDN suggest EVR (Enhanced Video Renderer) for video output in systems where it is supported: Windows Vista and later. With its introduction, its predecessors - Video Mixing Renderer filter (versions 7 and 9) were cut on smooth scaling of video. Video Mixing Renderer 7 is also less capable in terms of customization, however it consumes far less resources (does not use Direct 3D) and you can output way more videos at once.
Your standard solution here is to support both VMR and EVR output and use the latter starting Windows Vista, fall back to the former otherwise.
EVR is "unofficially" installed in Windows XP with .NET runtime and can be used with an instantiation trick: you the respective DLL is not COM registered and you cannot create an instance using CoCreateInstance API, however you succeed if you do CoLoadLibrary, DllGetClassObject and friends.
For C# development you typically consume DirectShow through DirectShow.NET Library.