J'ai une configuration double moniteur sur ma boîte Windows 7 au travail. J'aimerais savoir comment (si possible) je peux définir un coin chaud pour démarrer l'économiseur d'écran ou mettre l'écran en veille?
J'ai une configuration double moniteur sur ma boîte Windows 7 au travail. J'aimerais savoir comment (si possible) je peux définir un coin chaud pour démarrer l'économiseur d'écran ou mettre l'écran en veille?
Réponses:
En fait, économiseurs d' écran de Windows a fait cette fonctionnalité (au moins ceux qui sont inclus dans le cadre du pack Plus, anciens ne doivent pas oublier!):
En effet, un bug vraiment utile a fait les coins chauds spécifiés pour Plus! économiseurs d'écran un paramètre global qui s'applique aux non-Plus! économiseurs d'écran aussi!
Le moyen le plus simple d'obtenir des fonctionnalités similaires dans Windows maintenant pourrait être d'utiliser une application AutoIT (source disponible) appelée, sans surprise, Hot Corners . Il peut également faire diverses autres choses intéressantes en plus de lancer l'économiseur d'écran:
Voici une application hotcorners que j'ai écrite, j'espère qu'elle vous plaira! J'ai également publié la source sur github.
Les détails peuvent être trouvés sur: https://sites.google.com/site/bytecar/home/hotcornersapp
Happy Hacking!
Voici ma version rapide de PowerShell si quelqu'un est intéressé ( fiche de blog sans vergogne ) (ou GitHub )
ce code surveille la souris dans une certaine position (actuellement le coin inférieur droit) puis déclenche l'API de mise hors tension du moniteur Win32 ... il affiche une icône de la barre des tâches comme indicateur de fonctionnement visible ainsi qu'un menu contextuel pour terminer l'exécution
malheureusement, je suis trop vert pour poster des captures d'écran ... pour l'instant, veuillez vous référer au lien github pour des informations robustes
# 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()
J'utilise - et je recommande d'utiliser - les HotCorners d'AutoIT (ou la variante de M. Lekrem Yelsew, HotCorners 2). Ce n'est pas tout à fait "Screener" (Mac OS hérité), mais il fait ce qu'il est censé faire et "se ferme quand on le lui demande" (c'est-à-dire qu'il n'y a pas de retard pour se remettre au travail à partir d'un état défini par l'un des "coins").
BZT