Monitor en mode Estalvi d’energia amb PowerShell

Seguint amb les ulilitats que pot donar el meu Stream Deck de Elgato i que anteriorment ja n’he parlat sobre treure profit amb Powershell.

Canvi de dispositius d’audio amb PowerShell

Com alguns podeu saber, el meu escriptori és el terra, tinc el meu setup (monitors, stream deck, micro, etc) tot al terra davant la TV i moltes vegades em passa que vull veure la TV inmediatament i tinc que tancar els monitors perquè no molestin, així que vaig pensar que potser amb PowerShell podría fer-ho.

Una cerca ràpida per google em va portar a Windows Tip: 4 Different Ways to Turn Off Desktop Monitor or Laptop Screen ón expliquen entre altres coses, una crida amb un script de PowerShell.

Copiar i enganxar i l’script funciona perfectament, configuro tal i com vaig fer amb els altre botons de l’Stream Deck i els monitors entren en estalvi d’energia, l’únic inconvenient és que la finestra de PowerShell queda oberta i no m’interessa, molesta trobarla oberta al despertar els monitors.

function Set-DisplayOff
{
	$code = @"
	using System;
	using System.Runtime.InteropServices;
	public class API
	{
		[DllImport("user32.dll")]
		public static extern
		int SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
	}
	"@
	$t = Add-Type -TypeDefinition $code -PassThru
	$t::SendMessage(0xffff, 0x0112, 0xf170, 2)
}

Set-DisplayOff

Una mica més investigació m’ha portat a descobrir que a part de SendMessage existeix PostMessage, que és dintre de la API Win32 la versió asincrona de SendMessage i per tant no interfereix en el fil d’execució.

Així que el codi de l’script final queda tal que:

function Set-DisplayOff
{
	$code = @"
	using System;
	using System.Runtime.InteropServices;
	public class API
	{
		[DllImport("user32.dll")]
		public static extern
		int PostMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
	}
	"@
	$t = Add-Type -TypeDefinition $code -PassThru
	$t::PostMessage(0xffff, 0x0112, 0xf170, 2)
}

Set-DisplayOff

Canvi de dispositius d’audio amb PowerShell

Després de comprar l’Stream Deck de Elgato li trobava a faltar la manera de poder canviar entre dispositius d’àudio en calent.

Les investigacions em varen portar cap a PowerShell però de sèrie no pot fer aquestes funcions (que sàpiga) però si amb aquesta extensió que vaig trobar a github:

AudioDeviceCmdlets: https://github.com/frgnca/AudioDeviceCmdlets

Amb ella podem llistar els dispositius (tant de reproducció com de gravació) i poder canviar-lo, a part de canviar valors com el volum, etc.

Amb aquesta comanda llistem els dispositius

PS C:\Users\User> Get-AudioDevice -list

Index : 1
Default : False
Type : Playback
Name : Altavoces (Steam Streaming Microphone)
ID : {0.0.0.00000000}.{1a5fae48-a964-4d5a-ba5c-509e63ea6afd}
Device : CoreAudioApi.MMDevice

Index : 2
Default : True
Type : Playback
Name : Altavoces (Realtek High Definition Audio)
ID : {0.0.0.00000000}.{265fcc99-7fa6-4fa2-97bf-93236b4a1391}
Device : CoreAudioApi.MMDevice

Index : 3
Default : False
Type : Playback
Name : BenQ PD2500Q (NVIDIA High Definition Audio)
ID : {0.0.0.00000000}.{45ef6901-5ee0-4752-a0d9-d2fad76fe12c}
Device : CoreAudioApi.MMDevice

Index : 4
Default : False
Type : Playback
Name : Altavoces (Steam Streaming Speakers)
ID : {0.0.0.00000000}.{5deb3169-df93-4c68-b73d-a576584badc6}
Device : CoreAudioApi.MMDevice

Index : 5
Default : False
Type : Recording
Name : Línea de entrada (Realtek High Definition Audio)
ID : {0.0.1.00000000}.{17278a24-459b-4768-b332-b553a81ec097}
Device : CoreAudioApi.MMDevice

Index : 6
Default : False
Type : Recording
Name : Micrófono (Steam Streaming Microphone)
ID : {0.0.1.00000000}.{1bd0aa36-eedd-48a6-a9a5-404e80a7bc14}
Device : CoreAudioApi.MMDevice

Index : 7
Default : True
Type : Recording
Name : Micrófono (HD Pro Webcam C920)
ID : {0.0.1.00000000}.{2831395a-a41e-4285-9078-cb3558e5a024}
Device : CoreAudioApi.MMDevice

Necessitem l’Index al que volem canviar i podem canviar llençant aquesta comanda:

Set-Audiodevice -Index <yournumber>

Amb aquesta comanda ja tindrem canviat el dispositiu, però, com ho podem cridar? Si intentem cridar directament un fitxer d’script ens trobem que no tenim permisos per executar el (nostre propi) script, que per cert, són amb extensió ps1.

Tenim dos opcions, autoritzar TOTS els permisos i per tant no tenir problemes, o per altre part cridar powershell.exe amb alguns comandament extra quan cridem l’script.

powershell -executionPolicy bypass -file "c:\path\to\file\haedphones.ps1"

Amb això saltem els permisos d’execució de l’script… ehm… sí… amb aquesta comanda i jasta, seguretat a tope a powrshell si pots llançar powrshell des de linia de comandes… “hurra”

Evidentment tindrem que fer un altres script per tornar al dispositiu anterior, “obvious”.

Espero que us hagi servit ;)

Nou sistema de decarrega 3alacarta (part 1)

Avui he volgut posar-me a intentar recuperar una eina que tenia una mica oblidada i que había modificat per mí, el gnulinux.cat tv3 que fa molt bé la seva feina però es va deixar d’actualitzar de fa molt temps.

Els developers es van posar en contacte amb mí per afegir-me al projecte (gràcies per pensar amb mí!) però alguna cosa vaig fer malament i m’han suprimir (o no vaig arribar a crear) la meva compra de SourceForge.net… un desastre.

» Read more