В настоящее время я пытаюсь написать программу на C #, которая изменяет цвет активного окна в диспетчере окон рабочего стола Windows 8. Я выделил запись реестра, содержащую конкретное значение, и изменил ее на значение по своему выбору.
Сейчас я пытаюсь добиться немедленного изменения цвета без перезапуска оконного менеджера (по-немецки «desktopfenster manager» - не знаю точно английского названия процесса).
Вот код для изменения значения:
RegistryKey key;
public void initialise()
{
key = Registry.CurrentUser;
key = key.OpenSubKey("Software\\Microsoft\\Windows\\DWM",true);
Object theValue = key.GetValue("ColorizationColor", RegistryValueKind.DWord);
System.Console.Write("Value before switch: ");
System.Console.WriteLine(String.Format("{0:X}", theValue));
System.Console.ReadKey();
}
public void setColor()
{
key.SetValue("ColorizationColor", unchecked((int) 0xff00ff00u), RegistryValueKind.DWord);
Object theValue = key.GetValue("ColorizationColor", RegistryValueKind.DWord);
System.Console.Write("Value after switch: ");
System.Console.WriteLine(String.Format("{0:X}", theValue));
System.Console.ReadKey();
}
Теперь я пытаюсь отправить широковещательное сообщение диспетчеру окон, чтобы заставить его обновить свой статус. К сожалению, я никогда не работал с ним и не могу понять, что именно делать.
Google говорит мне, что я должен определить
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(
IntPtr hWnd,
int Msg,
IntPtr wParam,
string lParam,
int fuFlags,
int uTimeout,
IntPtr lpdwResult
);
А затем вызовите его в моей функции следующим образом:
SendMessageTimeout((IntPtr)0xffff, 0x001A, IntPtr.Zero, "Environment",
2, 5000, IntPtr.Zero);
Это не работает, к тому же я все равно не знаю, на правильном ли я пути. Однако цвет меняется после повторного входа в мою учетную запись пользователя.
Ах, я должен добавить, что в итоге программа должна случайным образом изменить цвет окна, изменив значение
HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM\ColorizationColor
получить своеобразное «Радужное окно».
Я также дал
HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM\ColorizationColorBalance
альфа-значение 00 (в то время как ColorizationColor имеет ff в начале)