我想要做的是让外部应用程序(进程)像TopMost Aero一样可以点击。问题是我可以让Aero工作或者通过TopMost单击窗口,但不能同时使用两者。 代码的注释部分(/ * DwmApi ... * /)是Aero代码,它也删除了进程窗口的标题栏,下面是点击窗口的代码(如果我不需要alpha设置有Aero,这里用于测试目的。)
以下链接显示了Aero代码的作用: http://ru11en.wordpress.com/category/mikumikudance/
这是点击“直通”代码的链接: Topmost form, clicking "through" possible?
请注意,如果我更改GWL_STYLE = -17,程序将不再删除标题栏。
//GWL_STYLE=-16; GWL.ExStyle=-20;
private void transparency_Click(object sender, EventArgs e)
{
ProcessItem selectedItem = (ProcessItem)this.comboBox1.SelectedItem;
if (selectedItem != null)
{
IntPtr handle = selectedItem.Handle;
if (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);
}
}
}