Saya memiliki pengaturan dual monitor pada kotak Windows 7 saya di tempat kerja. Saya ingin tahu bagaimana (jika mungkin) saya dapat mengatur sudut panas untuk memulai screensaver atau mematikan tampilan?
Saya memiliki pengaturan dual monitor pada kotak Windows 7 saya di tempat kerja. Saya ingin tahu bagaimana (jika mungkin) saya dapat mengatur sudut panas untuk memulai screensaver atau mematikan tampilan?
Jawaban:
Sebenarnya, screensaver Windows memang memiliki fitur ini (setidaknya yang termasuk sebagai bagian dari paket Plus !, yang harus diingat oleh orang tua):
Memang, bug yang sangat berguna membuat sudut panas ditentukan untuk Plus! screensaver pengaturan global yang berlaku untuk non-Plus! screensaver juga!
Cara termudah untuk mendapatkan fungsionalitas serupa di Windows sekarang mungkin menggunakan aplikasi AutoIT (sumber tersedia) yang disebut, tidak mengherankan, Hot Corners . Itu juga dapat melakukan berbagai hal menarik lainnya selain meluncurkan screensaver:
Berikut adalah aplikasi hotcorners yang saya tulis, semoga Anda menikmatinya! Saya juga merilis sumbernya di github.
Detail dapat ditemukan di: https://sites.google.com/site/bytecar/home/hotcornersapp
Selamat Hacking!
Ini versi QuickShell PowerShell saya jika ada yang tertarik ( plug posting blog yang tidak tahu malu ) (atau GitHub )
kode ini mengawasi mouse pada posisi tertentu (saat ini sudut kanan bawah) dan kemudian memicu Win32 monitor power-off API ... ini menampilkan ikon baki tugas sebagai indikator berjalan yang terlihat bersama dengan menu konteks untuk mengakhiri eksekusi
sayangnya saya terlalu hijau untuk memposting tangkapan layar ... untuk saat ini silakan lihat tautan github untuk info yang lebih baik
# 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()
Saya menggunakan - dan saya sarankan menggunakan - AutoC's HotCorners (atau variasi Mr Lekrem Yelsew, HotCorners 2). Ini bukan "Screener" (warisan OS Mac), tetapi ia melakukan apa yang seharusnya, dan "keluar ketika ditanya" (yaitu, tidak ada penundaan untuk kembali ke bisnis dari keadaan yang ditetapkan oleh salah satu 'sudut.')
BZT