问题
How to detect if any video is being played now using autohotkey, autoit, vbscript, c#, or c?
Video could be being played/streamed in any local player, web based player, or html5 player. We do not know the name of player also player may not be in the full screen.
PS. Detecting CPU load may not give the correct result always, so it is not acceptable.
回答1:
I've done a small bit of work on this back in the day. There is a WIN32API (old school) that gets/sets whether or not to disable the screensaver (in user32.dll, GetScreenSaverActive(), SetScreenSaverActive - see: http://www.codeproject.com/Articles/17067/Controlling-The-Screen-Saver-With-C). This is the most likely flag to be set when a video is playing but it not 100% reliable as not every player will implement it. It WILL work for most browser videos, whether played through plugin, natively, or via DirectX. This also works for most (all?) external players such as vlc, windvd, etc.
But.
There is no sure-fire, 100% way of determining a video playing. You cannot; 1. Check for sound playing as the user may be using iTunes and not all videos have sound 2. Check for full screen (usually the better option) as the video may be playing in a browser 3. Check cpu/gpu load as it's not reliable and you have no other way to determine 4. Be absolutely sure that the player hasn't cleared/reset the win32 flag when minimized
Another option would be to try and collate a list of possile executable names for all known players (doable but time consuming to find data, espesially on older versions), and check to see if they're running. This isn't 100% reliable either as a plugin by be preloaded but a browser but not actually playing a video at that moment in time.
In short, there's no 100% way that I know of but several ways that'll get you 90-95% there. That is the purpose of knowing if there's a video playing? Perhaps there's an easier way to find what you're looking for...
来源:https://stackoverflow.com/questions/11177373/how-to-detect-if-any-video-is-being-played-now