
How to wish a birthday using Powershell
It’s easy to surprise someone, setting sound to mute=off and sound at 100% using that code :
[void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms") If(-not(Test-Path "c:\temp")){ mkdir C:\temp } cd c:\temp 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)); } } } '@ [Audio]::Mute=$false [Audio]::Volume = 1.00 If(-not (Test-path "c:\temp\giphy.gif")){ Invoke-WebRequest -URI "https://media.giphy.com/media/YTbZzCkRQCEJa/giphy.gif" -OutFile "c:\temp\giphy.gif" } If(-not (Test-path "c:\temp\hb.wav")){ Invoke-WebRequest -URI "http://www.thewavsite.com/Birthday/bday02.wav"-OutFile "c:\temp\hb.wav" } $file = (get-item 'c:\temp\hb.wav') $file2="c:\temp\giphy.gif" $img = [System.Drawing.Image]::Fromfile($file2); [System.Windows.Forms.Application]::EnableVisualStyles(); $form = new-object Windows.Forms.Form $user=$env:username $form.Text = "Happy Birthday $user" $width=$img.Size.Width + 100 $form.Width =$width; $Height=$img.Size.Height + 100 $form.Height = $Height $pictureBox = new-object Windows.Forms.PictureBox $pictureBox.Width = $img.Size.Width; $pictureBox.Height = $img.Size.Height; $pictureBox.Image = $img; $form.controls.add($pictureBox) $form.Add_Shown( { $form.Activate() } ) Add-Type -AssemblyName PresentationCore $_MediaPlayer = New-Object System.Windows.Media.MediaPlayer $_MusicFiles = Get-ChildItem -path "c:\temp" -include *.wav -recurse $duration = $null [uri]$_song = $file.FullName do { $_MediaPlayer.Open($_song) $_songDuration = $_MediaPlayer.NaturalDuration.TimeSpan.TotalMilliseconds } until ($_songDuration) $form.Top $_MediaPlayer.Play() $form.ShowDialog() $_MediaPlayer.Stop() $_MediaPlayer.Close()