Kreij
Senior Monkey Moderator
- Joined
- Feb 6, 2007
- Messages
- 13,817 (2.07/day)
- Location
- Cheeseland (Wisconsin, USA)
I left an LCD monitor at work with a static image on the screen over the holidays (about two weeks) and of course it burned in (image retention).
After reading about fixes that do, and do not work, it seemed like the best answer was to force the monitor to cycle back and forth between a completely white screen and a completely black one.
Thus I wrote the little utility below called MonitorUnburn_WF. When you launch it is displays a full black screen and then full white with a change interval of six seconds. The program will keep the system alive so that power settings do not stop it and it will prevent the screensaver from launching (at least it should). This should work for an LCD monitor, LCD TV or Plasma TV to which you have your computer connected.
Instructions :
1) Launch program.
2) Let it run for however long is needed.
3) Hit ESC to exit.
I ran it on the monitor which had bad retention for about 24 hours, and the burn-in is almost gone. I'll leave it run over the weekend to see if I can get rid of it completely.
Depending upon how bad the monitor is burned-in, the required run time could be minutes, hours or days. Some retention is permanent, so results may vary.
Please test and let me know how it works for you.
Compiled using .Net Framework 4 Client.
The reason it is named "WF" is that this is the windows form version. I wrote a DirectX version but it kind of sucks and the executable is much larger.
After reading about fixes that do, and do not work, it seemed like the best answer was to force the monitor to cycle back and forth between a completely white screen and a completely black one.
Thus I wrote the little utility below called MonitorUnburn_WF. When you launch it is displays a full black screen and then full white with a change interval of six seconds. The program will keep the system alive so that power settings do not stop it and it will prevent the screensaver from launching (at least it should). This should work for an LCD monitor, LCD TV or Plasma TV to which you have your computer connected.
Instructions :
1) Launch program.
2) Let it run for however long is needed.
3) Hit ESC to exit.
Code:
using System;
using System.Runtime.InteropServices;
using System.Timers;
using System.Drawing;
using System.Windows.Forms;
namespace MonitorUnburn_WF
{
public partial class Form1 : Form
{
[FlagsAttribute]
public enum EXECUTION_STATE : uint
{
ES_SYSTEM_REQUIRED = 0x00000001,
ES_DISPLAY_REQUIRED = 0x00000002,
ES_CONTINUOUS = 0x80000000,
}
private const uint SHOW_SCREEN = 64;
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
[DllImport("user32.dll", EntryPoint = "GetSystemMetrics")]
public static extern int GetSystemMetrics(int which);
[DllImport("user32.dll")]
public static extern void SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter,
int X, int Y, int width, int height, uint flags);
System.Timers.Timer t = new System.Timers.Timer(6000); // 6 second interval
public Form1()
{
InitializeComponent();
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.TopMost = true;
this.BackColor = Color.White;
// Make it full screen so it even covers the taskbar
SetWindowPos(this.Handle, IntPtr.Zero, 0, 0, GetSystemMetrics(0), GetSystemMetrics(1), SHOW_SCREEN);
Cursor.Hide();
// Tell system that this thread needs the system awake. Should prevent screensaver from launching.
SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS
| EXECUTION_STATE.ES_DISPLAY_REQUIRED
| EXECUTION_STATE.ES_SYSTEM_REQUIRED);
t.Elapsed += new ElapsedEventHandler(t_Elapsed);
t.Enabled = true;
}
void t_Elapsed(object sender, ElapsedEventArgs e)
{
if (this.BackColor == Color.White) this.BackColor = Color.Black;
else this.BackColor = Color.White;
}
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Escape)
{
Cursor.Show();
Application.Exit();
}
}
}
}
I ran it on the monitor which had bad retention for about 24 hours, and the burn-in is almost gone. I'll leave it run over the weekend to see if I can get rid of it completely.
Depending upon how bad the monitor is burned-in, the required run time could be minutes, hours or days. Some retention is permanent, so results may vary.
Please test and let me know how it works for you.
Compiled using .Net Framework 4 Client.
The reason it is named "WF" is that this is the windows form version. I wrote a DirectX version but it kind of sucks and the executable is much larger.
Attachments
Last edited: