Monitör (C#) aracılığıyla bir monitörü açmak/kapatmak için programatik olarak mümkün mü?Monitörü açma/kapama
cevap
Açma/kapama düğmesi
kodda yapmak istiyorsanız, görünüşe göre bu Win32 API mümkündür:
SendMessage hWnd, WM_SYSCOMMAND, SC_MONITORPOWER, param
WM_SYSCOMMAND = 0x112 ve SC_MONITORPOWER = 0xF170 ve param, monitörü aşağıdaki modda gösterir: -1: on 2: 1 kapalı: Enerji tasarrufu moduna
hWnd bir pencere için bir tanıtıcı olabilir - bir form var eğer öyleyse, böyle bir şey '
int WM_SYSCOMMAND = 0x112;
int SC_MONITORPOWER = 0xF170;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);
public static void Main(string[] args)
{
Form f = new Form();
bool turnOff = true; //set true if you want to turn off, false if on
SendMessage(f.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)(turnOff ? 2 : -1));
}
Not I sığınak çalışması gerekir t aslında bunu denedim ...
Bunu yapmaya çalıştınız mı?
İlk hit: http://www.codeproject.com/KB/cs/Monitor_management_guide.aspx
Biraz DLL Windows tarafından sağlanan kullanmak zorunda şaşırmadım.
(C# çözümüne ihtiyacınız olduğunu tahmin ettim, çünkü bu, uyguladığınız tek etikettir).
DÜZENLEME 8 Şubat 2013:
O Eh burada henüz Windows 8 denemedim Windows 7 altında inşaat güzel biridir çözüm artık 8. tr Windows 7 altında çalıştı bahsedilmişti.
http://cocoa.ninja/posts/Turn-off-your-monitor-in-Csharp.html
namespace MonitorOff {
public enum MonitorState {
MonitorStateOn = -1,
MonitorStateOff = 2,
MonitorStateStandBy = 1
}
public partial class Form1 : Form {
[DllImport("user32.dll")]
private static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);
public Form1() {
InitializeComponent();
SystemEvents.SessionSwitch += SystemEvents_SessionSwitch;
}
void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e) {
SetMonitorInState(MonitorState.MonitorStateOff);
}
private void button1_Click(object sender, EventArgs e) {
SetMonitorInState(MonitorState.MonitorStateOff);
}
private void SetMonitorInState(MonitorState state) {
SendMessage(0xFFFF, 0x112, 0xF170, (int)state);
}
}
}
Bu Kod Projesi örneği Windows 7 veya 8'de çalışmıyor. –
Bu cevabın 2009 yılında verildiğini biliyor musunuz? –
Yaparım, ancak 2013'te Google'da yanıt hala yüksek seviyede yer aldığından, benim gibi başkalarının da geleceğine, bununla karşılaşacağına ve projeyi indirip, yalnızca 2009 sonrası Windows İşletim Sistemlerinde çalışmadığını keşfetmeye çalıştığına karar verdim. Onları 10+ dakikadan kurtarmaya çalışıyordum. Cevabını eklediğin değerinden hiçbir şekilde uzaklaşmaya çalışmıyorum, eminim ki binlerce kişiye yardım ettim, sadece insanların bir şeyin değiştiğini bilmesini sağlamaya çalışıyorum. –
https://stackoverflow.com/a/713504/636189 yukarıda onu uyanma için bir Windows 7/8 monitörü kapatarak değil büyük çalışır cevap. Bu sistemlerde (bulundu https://stackoverflow.com/a/14171736/636189 gibi) böyle hackish şey yapmak gerekir:
[DllImport("user32.dll")]
static extern void mouse_event(Int32 dwFlags, Int32 dx, Int32 dy, Int32 dwData, UIntPtr dwExtraInfo);
private const int MOUSEEVENTF_MOVE = 0x0001;
private void Wake(){
mouse_event(MOUSEEVENTF_MOVE, 0, 1, 0, UIntPtr.Zero);
Sleep(40);
mouse_event(MOUSEEVENTF_MOVE, 0, -1, 0, UIntPtr.Zero);
}
Bu çözüm, Windows Vista'da iki monitörle harika çalıştı. –
Sadece 2 sent, mouse_event MS office Communicator'ı "aktif" durumda tutmak için işe yaramıyor, sadece fare tıklaması ve keybd_event, bu yüzden bunları kullanmak için daha ileride bir kanıt olabilir veya birilerinin durumunda fareyi birden fazla piksel taşıyabilir "Birisi masasını çarptığında monitörleri açmayı kesmeliyiz" diye düşünüyor. – Motes
Kabul edilen yanıt, Windows 10 için benim için çalışmadı. Kabul edilen cevap ekranı kısaca açacaktı ama sonra geri dönecekti. Bu bir Yüzey Pro'daydı. Bu çözümü uyguladıktan sonra harika çalıştı. Hackish, evet, ama işe yarıyor ve bu tarihte kızlar için yeterince iyi! – jaredbaszler
Bu kod açma ve kapatma için yararlı olabilir .. Ayrıca Windows 7'de çalıştı.
private int SC_MONITORPOWER = 0xF170;
private uint WM_SYSCOMMAND = 0x0112;
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
enum MonitorState
{
ON = -1,
OFF = 2,
STANDBY = 1
}
private void SetMonitorState(MonitorState state)
{
Form frm = new Form();
SendMessage(frm.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)state);
}
işlevini çağırarak için yapmanız gereken gibi:
SetMonitorState(MonitorState.ON);
VEYA
SetMonitorState(MonitorState.OFF);
Not: WPF Uygulama test Bu kodu.Bir konsol uygulaması bu işlevselliği isteyen için
using System.Runtime.InteropServices;
using System.Windows.Forms;
:
using System;
using System.Runtime.InteropServices;
using System.Timers;
namespace TurnScreenOFF
{
class Program
{
private static int WM_SYSCOMMAND = 0x0112;
private static uint SC_MONITORPOWER = 0xF170;
public static void Main(string[] args)
{
SendMessage(GetConsoleWindow(), WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)2);
}
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);
}
}
Adaptated ve test edilen aşağıda ad ile. % 100 Windows 8 üzerinde çalışıyor.
GetConsoleWindow'u çağırmak için, konsol dışı bir uygulamada GUI hwnd almak için gerek yok, sadece HWND_BROADCAST mesajını kullanın (** SendMessage (Yeni IntPtr (0xFFFF) ** ...). – ElektroStudios
Herkesin bir monitörü uyku moduna geçirmesi ve daha sonra başka bir zamanda uyandırması için yayınladığı her yöntemi inceledim. Verilen SendMessage()
, Windows XP ile çalışır, ancak monitör bir süre uykudan sonra monitörü uyandırmaz. Güç profilleri ve Powershell ile oynamak için C#, DOS, betikleri kullanmayı denedim. Sonunda pes ettim ve başa dönüp ilk düşüncem doğrulandı. Monitör kapatıldıktan sonra PostMessage()
'u kullanmanız gerekiyor, daha iyisi, muhtemelen her zaman PostMessage()
;
Yani önce gördük bütün kod doğruysa, yerine aşağıdaki kullanın: yürütme ve uygun çalışma Şu anda
using System.Runtime.InteropServices;
[DllImport("user32.dll")]
static extern IntPtr PostMessage(int hWnd, int msg, int wParam, int lParam);
PostMessage(-1, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
(11 Mayıs 2015) ben çalışan
- Windows 7 Professional Sürüm 6.1.7601 Service Pack 1 yapı 7601
- Visual Studio Profesional 2013 Versiyon 12.0.31101.00 Güncelleme 4
- .NET Framework 4.5.51209
- C#
My sistemi tamamen güncel olduğundan.
Hi @Mike , Ben senin çözümünü denedim ve monitörlerim siyah oldu ama 1 saniye sonra tekrar yanıyorlar. PostMessage ve SendMessage ile çalıştı. (Windows 7 6.1.7601 x64) Herhangi bir fikrin var mı? – ZeroDotNet
Kopyala yapıştır örneği bulamadım, yani kendim oluşturdum, System.Windows.Forms dosyasına başvuru eklemeyi unutmayın.
using System;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;
namespace monitor_on_off
{
class Program
{
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
static extern void mouse_event(Int32 dwFlags, Int32 dx, Int32 dy, Int32 dwData, UIntPtr dwExtraInfo);
private const int WmSyscommand = 0x0112;
private const int ScMonitorpower = 0xF170;
private const int MonitorShutoff = 2;
private const int MouseeventfMove = 0x0001;
public static void MonitorOff(IntPtr handle)
{
SendMessage(handle, WmSyscommand, (IntPtr)ScMonitorpower, (IntPtr)MonitorShutoff);
}
private static void MonitorOn()
{
mouse_event(MouseeventfMove, 0, 1, 0, UIntPtr.Zero);
Thread.Sleep(40);
mouse_event(MouseeventfMove, 0, -1, 0, UIntPtr.Zero);
}
static void Main()
{
var form = new Form();
while (true)
{
MonitorOff(form.Handle);
Thread.Sleep(5000);
MonitorOn();
Thread.Sleep(5000);
}
}
}
}
Benim için çalıştım pencerede 10 64 bit. Hatta onu kullanan küçük bir nodejs sunucusu yarattı ve şimdi cep telefonumdan ekranları kapatabilirim. Çok teşekkürler BTW açılış da işe yaradı, ancak kapatılmış olsa bile kapat komutunu ikinci kez çalıştırırsam açılacaktı. Bu benim için önemlidir –
az SLOC ile cevap:
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
static class Program
{
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
[STAThread]
static void Main()
{
SendMessage(new Form().Handle, 0x0112, 0xF170, 2);
}
}
IMHO 2011'den klaasjan69 tarafından cevaptan daha iyi değil. Daha kısa, ama daha az okunabilir. Sadece "kapalı" durumda cevaplar, ama "açık" durumda değil. SLOC "bir avantaj olarak. –
- 1. MBean Basit Grafik Monitörü
- 2. Ters SSH tüneli monitörü
- 3. Android PC'deki performans monitörü
- 4. Akka çocuk monitörü yeniden başlatılıyor
- 5. D'de bir sınıf monitörü nedir?
- 6. (Unix/Python) Etkinlik Monitörü% CPU
- 7. xCode 4'te Bellek Monitörü - iPhone
- 8. Devam Monitörü içindeki IO monadından kaçış
- 9. IIS 7 Güvenilirlik ve Performans Monitörü
- 10. İki spf'i bir araya getirin: Google Apps SPF + Kampanya Monitörü SPF =?
- 11. bir uygulama olarak Kalp atış hızı monitörü uygulamasını yapmak zorunda, renk analizi (Nabız)
- 12. Hata: Microsoft Visual Studio 2012 Uzaktan hata ayıklama Monitörü (Msvsmon.exe) Her şeyden
- 13. Bir giriş elemanından düzeltme işareti nasıl alınır
- 14. Monitör açık olup olmadığını tespit edin C#
- 15. MATLAB Monitörünü çoklu monitör yapılandırmasında belirleme
- 16. Komutu Uyku Ekranı OSX
- 17. Monitörün kapalı olup olmadığını kontrol etme
- 18. Android Studio 3 - Bir ekran görüntüsü veya kayıt ekranı çekmek mümkün mü?
- 19. Android Service Marshmallow'ta Durmaya Devam Et
- 20. Web sayfalarında otomatik olarak geçiş
- 21. Android Device Eski cihazlara bağımlılık izleyin Java SE 6 çalışma zamanı
- 22. VBA kullanarak Excel hücrelerinin arka plan rengini nasıl ayarlayabilirim?
- 23. Auditd - yalnızca dir (yalnızca tüm alt dizin ve dosyalar değil) izlemek için denetim kuralları kuralı
- 24. Android: Market Place'den yeni bir sürüm yüklendiğinde arka plan sürecine ne olur?
- 25. CPU kullanımı ve CPU hızı
- 26. Bir Emacs çerçevesini elisp ile tek bir monitörde maksimize etme
- 27. Bir java uygulaması için ücretsiz bir uyarı çerçevesinin aranması
- 28. Android render çalışmıyor
- 29. .NET ile belirli bir monitör nasıl kapatılır?
- 30. Android Device Monitor - boş Dosya Gezgini görünümü
soru downvotes sizi kurtarabilir bir yerde "programlı" ekleme .. – Newtopian
:-) benim 2 cent yukarıdaki ile kabul edilmiştir: Bu doesn olsa 'Güzel soru' ödülünü kazanmam, kişisel olarak birçok downvot ile katılmıyorum. Aslında geçerli bir soru. – Razzie
Herkes OP'den daha akıllı olduklarını ve problemini bildiğini düşünüyor. Vinoth, bir düğme ile nasıl yapılacağını sormadı, kod ile mümkün olup olmadığını sordu ... – Inisheer