Tengo una configuración de monitor dual en mi caja de Windows 7 en el trabajo. Me gustaría saber cómo (si es posible) puedo configurar una esquina activa para iniciar el protector de pantalla o poner la pantalla en reposo.
Tengo una configuración de monitor dual en mi caja de Windows 7 en el trabajo. Me gustaría saber cómo (si es posible) puedo configurar una esquina activa para iniciar el protector de pantalla o poner la pantalla en reposo.
Respuestas:
En realidad, protectores de pantalla de Windows hizo tener esta característica (al menos los que se incluyen como parte del paquete Plus, que los veteranos deben recordar!):
De hecho, un error realmente útil hizo que los rincones calientes especificados para Plus! salvapantallas una configuración global que se aplica a non-Plus! salvapantallas también!
La forma más fácil de obtener una funcionalidad similar en Windows ahora podría ser usar una aplicación AutoIT (fuente disponible) llamada, no sorprendentemente, Hot Corners . También puede hacer varias otras cosas interesantes además de iniciar el protector de pantalla:
Aquí hay una aplicación de hotcorners que escribí, ¡espero que la disfruten! También he lanzado la fuente en github.
Los detalles se pueden encontrar en: https://sites.google.com/site/bytecar/home/hotcornersapp
Happy Hacking!
Aquí está mi versión rápida de PowerShell de esto si alguien está interesado ( enchufe de publicación de blog descarado ) (o GitHub )
este código observa el mouse en cierta posición (actualmente en la esquina inferior derecha) y luego activa la API de apagado del monitor Win32 ... muestra un icono de la bandeja de tareas como un indicador visible de ejecución junto con un menú contextual para finalizar la ejecución
lamentablemente soy demasiado verde para publicar capturas de pantalla ... por ahora, consulte el enlace de github para obtener información sólida
# Source: http://www.powershellmagazine.com/2013/07/18/pstip-how-to-switch-off-display-with-powershell/
# Turn display off by calling WindowsAPI.
# SendMessage(HWND_BROADCAST,WM_SYSCOMMAND, SC_MONITORPOWER, POWER_OFF)
# HWND_BROADCAST 0xffff
# WM_SYSCOMMAND 0x0112
# SC_MONITORPOWER 0xf170
# POWER_OFF 0x0002
Add-Type -TypeDefinition '
using System;
using System.Runtime.InteropServices;
namespace Utilities {
public static class Display
{
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(
IntPtr hWnd,
UInt32 Msg,
IntPtr wParam,
IntPtr lParam
);
public static void PowerOff ()
{
SendMessage(
(IntPtr)0xffff, // HWND_BROADCAST
0x0112, // WM_SYSCOMMAND
(IntPtr)0xf170, // SC_MONITORPOWER
(IntPtr)0x0002 // POWER_OFF
);
}
}
}
'
Add-Type -AssemblyName System.Windows.Forms
$notifyIcon = New-Object System.Windows.Forms.NotifyIcon
$notifyIcon.Icon = New-Object System.Drawing.Icon "$(Split-Path -parent $PSCommandPath)\icon.ico"
$notifyIcon.Text = "Hot Corners"
$notifyIcon.add_MouseDown( {
if ($script:contextMenu.Visible) { $script:contextMenu.Hide(); return }
if ($_.Button -ne [System.Windows.Forms.MouseButtons]::Left) {return}
#from: http://stackoverflow.com/questions/21076156/how-would-one-attach-a-contextmenustrip-to-a-notifyicon
#nugget: ContextMenu.Show() yields a known popup positioning bug... this trick leverages notifyIcons private method that properly handles positioning
[System.Windows.Forms.NotifyIcon].GetMethod("ShowContextMenu", [System.Reflection.BindingFlags] "NonPublic, Instance").Invoke($script:notifyIcon, $null)
})
$contextMenu = New-Object System.Windows.Forms.ContextMenuStrip
$contextMenu.ShowImageMargin = $false
$notifyIcon.ContextMenuStrip = $contextMenu
$contextMenu.Items.Add( "E&xit", $null, { $notifyIcon.Visible = $false; [System.Windows.Forms.Application]::Exit() } ) | Out-Null
$contextMenu.Show(); $contextMenu.Hide() #just to initialize the window handle to give to $timer.SynchronizingObject below
$timer = New-Object System.Timers.Timer
$timer.Interval = 500
$timer.add_Elapsed({
$mouse = [System.Windows.Forms.Cursor]::Position
$bounds = [System.Windows.Forms.Screen]::FromPoint($mouse).Bounds #thank you! - http://stackoverflow.com/questions/26402955/finding-monitor-screen-on-which-mouse-pointer-is-present
<# __ __ _ __ __ __ ____
/ / / /__ ________ ( )_____ / /_/ /_ ___ / /_ ___ ___ / __/
/ /_/ / _ \/ ___/ _ \|// ___/ / __/ __ \/ _ \ / __ \/ _ \/ _ \/ /_
/ __ / __/ / / __/ (__ ) / /_/ / / / __/ / /_/ / __/ __/ __/
/_/ /_/\___/_/ \___/ /____/ \__/_/ /_/\___/ /_.___/\___/\___/_/ #>
# currently set to trigger at lower right corner... season to your own taste (e.g. upper left = 0,0)
if ($mouse.X-$bounds.X -gt $bounds.Width-10 -and $mouse.Y -gt $bounds.Height-10) { [Utilities.Display]::PowerOff() }
#run the ps1 from command line to see this output
#debug: Write-Host "x: $($mouse.X), y:$($mouse.Y), width: $($bounds.Width), height: $($bounds.Height), sleep: $($mouse.X-$bounds.X -gt $bounds.Width-10 -and $mouse.Y -gt $bounds.Height-10)"
})
#frugally reusing $contextMenu vs firing up another blank form, not really necessary but i was curious if it'd work... the notify icon itself does not implement InvokeRequired
#see this for why SynchronizingObject is necessary: http://stackoverflow.com/questions/15505812/why-dont-add-eventname-work-with-timer
$timer.SynchronizingObject = $contextMenu
$timer.start()
$notifyIcon.Visible = $true
[System.Windows.Forms.Application]::Run()
Uso, y recomiendo usar, los HotCorners de AutoIT (o la variación del Sr. Lekrem Yelsew, HotCorners 2). No es exactamente "Screener" (Mac OS heredado), pero hace lo que se supone que debe hacer y "sale cuando se le pregunta" (es decir, no hay demora en volver a los negocios desde un estado establecido por una de las "esquinas").
BZT