我目前正在尝试编写一个c#programm,用于更改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();
}
现在我正在尝试的是向窗口管理器发送广播消息以强制它更新它的状态。不幸的是,我从来没有使用它,也无法弄清楚该怎么做。
谷歌告诉我必须定义 [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
alpha值为00(而ColorizationColor在开头有ff)