Don't compute while movie playing
Problem: while a movie is playing there's no mouse/kbd input, and CPU usage can be low, so BOINC starts computing, possibly with GPU, and the playback is messed up.
How does BOINC know if a movie is playing? This was asked here: http://stackoverflow.com/questions/1154923/detect-movie-being-played-windows and the only answer was: make a list of video players, and see if any of them is running. That approach has many drawbacks.
There's a Windows API that media players call to tell the system not to sleep: http://msdn.microsoft.com/en-us/library/windows/desktop/aa373233(v=vs.85).aspx If we could read this flag, we could not compute when it's set.
The SystemParametersInfo() API has some stuff related to screensavers: http://msdn.microsoft.com/en-us/library/ms724947%28VS.85%29.aspx but it seems to be just whether the user has registered a screensaver (not whether it's eligible to run).
GPU usage tools: http://www.ozone3d.net/gpushark/
Don't turn on the fan
People don't like it when BOINC makes their fan go on high, especially if it pulses because of CPU throttling.
I think a good default policy would be to limit CPU usage (by # of cores and/or throttling) to keep from raising the fan speed. There are many possible policies. For any of them we need to be able to read the fan(s) speeds.
Some possibly relevant stuff:
Windows Management Instrumentation: http://msdn.microsoft.com/en-us/library/windows/hardware/Dn614028(v=vs.85).aspx
Fan management tools http://www.almico.com/speedfan.php
Using MSR to calculate temperatures: Intel: http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/cpu-monitoring-dts-peci-paper.pdf
Intel® 64 and IA-32 Architectures Developer's Manual: Vol. 3B: http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3b-part-2-manual.html
Open Hardware Monitor (Temp and Fan speed for Intel (CPU)/AMD (CPU)/Nvidia (GPU)/AMD (GPU): License: Mozilla Public License 2.0 (MPL) http://openhardwaremonitor.org/
GPU Fan Speed Detection: Nvidia API: NvAPI_GPU_GetTachReading (http://docs.nvidia.com/gameworks/content/gameworkslibrary/coresdk/nvapi/group__gpucooler.html#ga607a5e91f85d720a6b68375490b8b9df) AMD API: ADL_Overdrive5_FanSpeed_Get (Doc Unknown)
GPU Load API: Nvidia API: NvAPI_GPU_GetCurrentPstate/NvAPI_GPU_GetPstates20 (http://docs.nvidia.com/gameworks/content/gameworkslibrary/coresdk/nvapi/group__gpupstate.html#gaaf46cf2f453aa2e34139337da865ab3b) AMD API: ADL_Overdrive5_CurrentActivity_Get (Doc Unknown)