मेरे पास काम पर मेरे विंडोज 7 बॉक्स पर एक दोहरी मॉनिटर सेटअप है। मैं जानना चाहता हूं कि कैसे (यदि संभव हो) मैं स्क्रीनसेवर शुरू करने या प्रदर्शन को सोने के लिए डाल सकता हूं?
मेरे पास काम पर मेरे विंडोज 7 बॉक्स पर एक दोहरी मॉनिटर सेटअप है। मैं जानना चाहता हूं कि कैसे (यदि संभव हो) मैं स्क्रीनसेवर शुरू करने या प्रदर्शन को सोने के लिए डाल सकता हूं?
जवाबों:
वास्तव में, विंडोज स्क्रीनसेवर किया यह सुविधा (कम से कम प्लस पैक है, जो पुराने टाइमर याद रखना चाहिए की भाग के रूप में उन!):
दरअसल, एक बहुत ही उपयोगी बग ने गर्म कोनों को प्लस के लिए निर्दिष्ट किया है! गैर-प्लस पर लागू होने वाली वैश्विक सेटिंग स्क्रीनसेवर! स्क्रीनसेवर भी!
विंडोज में समान कार्यक्षमता प्राप्त करने का सबसे आसान तरीका अब एक AutoIT ऐप (स्रोत उपलब्ध) का उपयोग करना हो सकता है, जिसे आश्चर्यजनक रूप से नहीं, हॉट कॉर्नर कहा जाता है । यह स्क्रीनसेवर लॉन्च करने के अलावा कई अन्य दिलचस्प चीजें भी कर सकता है:
यहां एक हॉटकॉर्नर ऐप है जिसे मैंने लिखा है, आशा है कि आप इसका आनंद लेंगे! मैंने गीथुब पर स्रोत भी जारी किया है।
विवरण यहां देखे जा सकते हैं: https://sites.google.com/site/bytecar/home/hotcornersapp
हैप्पी हैकिंग!
अगर कोई दिलचस्पी रखता है ( बेशर्म ब्लॉग पोस्ट प्लग ) (या GitHub ) तो यहाँ मेरा क्विक पॉवरशेल संस्करण है
यह कोड कुछ निश्चित स्थिति में माउस के लिए देखता है (वर्तमान में दाएं कोने में) और फिर Win32 मॉनिटर पॉवर-ऑफ API को ट्रिगर करता है ... यह निष्पादन के अंत के लिए एक संदर्भ मेनू के साथ एक दृश्यमान रनिंग इंडिकेटर के रूप में एक कार्य ट्रे आइकन प्रदर्शित करता है
दुर्भाग्य से मैं स्क्रीनशॉट पोस्ट करने के लिए बहुत हरा हूं ... अभी के लिए कृपया मजबूत जानकारी के लिए गीथब लिंक देखें
# 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()
मैं उपयोग करता हूं - और मैं उपयोग करने की सलाह देता हूं - ऑटिट्स हॉटकॉर्नर्स (या श्री लेकर्म येलसेव की विविधता, हॉटकोर्न 2)। यह काफी "स्क्रेनेर" (विरासत मैक ओएस) नहीं है, लेकिन यह वही करता है जो इसे माना जाता है, और "पूछे जाने पर बाहर निकलता है" (यानी, 'कोनों में से एक' द्वारा निर्धारित राज्य से व्यवसाय में वापस आने में कोई देरी नहीं है।
BZT