Controlling mute/unmute and the volume on you computer with powershell.
Now don’t go and get any ideas, using this for a prank for instance. Rumor has it that you can use this in an powershell remote session and in combination with the System.Speech.Synthesis.SpeechSynthesizer .net class you could do all kinds of damage in your office. Not that I have ever, ever tried to do this myself... I found this code on a forum, cant remember where, if i find it, I will post the link :-)
Cheers
Tore
Add-Type -TypeDefinition @'
using System.Runtime.InteropServices;
[Guid("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IAudioEndpointVolume {
// f(), g(), ... are unused COM method slots. Define these if you care
int f(); int g(); int h(); int i();
int SetMasterVolumeLevelScalar(float fLevel, System.Guid pguidEventContext);
int j();
int GetMasterVolumeLevelScalar(out float pfLevel);
int k(); int l(); int m(); int n();
int SetMute([MarshalAs(UnmanagedType.Bool)] bool bMute, System.Guid pguidEventContext);
int GetMute(out bool pbMute);
}
[Guid("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IMMDevice {
int Activate(ref System.Guid id, int clsCtx, int activationParams, out IAudioEndpointVolume aev);
}
[Guid("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IMMDeviceEnumerator {
int f(); // Unused
int GetDefaultAudioEndpoint(int dataFlow, int role, out IMMDevice endpoint);
}
[ComImport, Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")] class MMDeviceEnumeratorComObject { }
public class Audio {
static IAudioEndpointVolume Vol() {
var enumerator = new MMDeviceEnumeratorComObject() as IMMDeviceEnumerator;
IMMDevice dev = null;
Marshal.ThrowExceptionForHR(enumerator.GetDefaultAudioEndpoint(/*eRender*/ 0, /*eMultimedia*/ 1, out dev));
IAudioEndpointVolume epv = null;
var epvid = typeof(IAudioEndpointVolume).GUID;
Marshal.ThrowExceptionForHR(dev.Activate(ref epvid, /*CLSCTX_ALL*/ 23, 0, out epv));
return epv;
}
public static float Volume {
get {float v = -1; Marshal.ThrowExceptionForHR(Vol().GetMasterVolumeLevelScalar(out v)); return v;}
set {Marshal.ThrowExceptionForHR(Vol().SetMasterVolumeLevelScalar(value, System.Guid.Empty));}
}
public static bool Mute {
get { bool mute; Marshal.ThrowExceptionForHR(Vol().GetMute(out mute)); return mute; }
set { Marshal.ThrowExceptionForHR(Vol().SetMute(value, System.Guid.Empty)); }
}
}
'@
Okay, adding that type to the powershell session, you can now control the volume and mute the speakers like so:
# Unmute the speakers [audio]::Mute = $false # Mute the speakers [audio]::Mute = $true # Set volume to 20% [audio]::Volume = 0.2
Now don’t go and get any ideas, using this for a prank for instance. Rumor has it that you can use this in an powershell remote session and in combination with the System.Speech.Synthesis.SpeechSynthesizer .net class you could do all kinds of damage in your office. Not that I have ever, ever tried to do this myself... I found this code on a forum, cant remember where, if i find it, I will post the link :-)
Cheers
Tore
Thank you
ReplyDeleteYou know how to simulate play/pause multimedia buttons?
ReplyDeleteHi, sorry bur I do not
ReplyDelete