我想要做的是让一个外部应用程序(进程)像可以点击的透明一样去 TopMost Aero。问题是我可以让 Aero 工作或 TopMost 点击窗口,但不能两者兼而有之。代码的注释部分 (/*DwmApi... */) 是 Aero 代码,它还删除了进程窗口的标题栏,下面是点击窗口的代码(如果我不需要设置 alpha开启 Aero,这里用于测试目的)。
这是一个显示 Aero 代码功能的链接: http ://ru11en.wordpress.com/category/mikumikudance/
这里是点击“通过”代码的链接:最 上面的表单,点击“通过”可能吗?
请注意,如果我更改 GWL_STYLE=-17,程序将不再删除标题栏。
//GWL_STYLE=-16; GWL.ExStyle=-20;
私人无效透明度_点击(对象发送者,EventArgs e)
{
ProcessItem selectedItem = (ProcessItem)this.comboBox1.SelectedItem;
if (selectedItem != null)
{
IntPtr 句柄 = selectedItem.Handle;
如果(句柄!= IntPtr.Zero)
{
/*DwmApi.DwmExtendIntoClientAll(handle);
int num = GetWindowLong(handle, GWL_STYLE) & ~WS_OVERLAPPEDWINDOW;
SetWindowLong(handle, GWL_STYLE, num);
SetWindowPos(handle, IntPtr.Zero, 0, 0, 0, 0, SWP__REFRESH);
*/
int wl = GetWindowLong(handle, GWL.ExStyle);
original = wl;
wl = wl | 0x80000 | 0x20;
SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
SetWindowLong(handle, GWL.ExStyle, wl);
SetLayeredWindowAttributes(handle, 0, 200, LWA.Alpha);
}
}
}