如何在表单的标题栏中最小化,最大化和关闭按钮旁边绘制自定义按钮?
我知道您需要使用Win32 API调用并覆盖WndProc过程,但我无法找到一个正常的解决方案.
有谁知道如何做到这一点?更具体地说,有没有人知道在Vista中有效的方法?
我正在尝试获取所有打开的应用程序的列表.具体来说,如果您打开任务管理器并转到应用程序选项卡,该列表.
我尝试过使用这样的东西:
foreach (var p in Process.GetProcesses())
{
    try
    {
        if (!String.IsNullOrEmpty(p.MainWindowTitle))
        {
            sb.Append("\r\n");
            sb.Append("Window title: " + p.MainWindowTitle.ToString());
            sb.Append("\r\n");
        }
    }
    catch
    {
    }
}
就像我发现的一些例子一样,但这并没有为我提供所有的应用程序.它只抓住了我在任务管理器中看到的一半,或者我知道我已经打开了.例如,由于某种原因,此方法不会选择Notepad ++或Skype,但是它会选择谷歌浏览器,计算器和Microsoft Word.
有谁知道为什么这不正常或如何这样做?
此外,一位朋友建议它可能是一个权限问题,但我以管理员身份运行visual studio,但它没有改变.
编辑:我得到的问题是,我给出的大多数解决方案只返回所有进程的列表,这不是我想要的.我只想要打开的应用程序或窗口,就像任务管理器上显示的列表一样.不是每个进程的列表.
另外,我知道这里有错误的代码,包括空的catch块.这是一个一次性项目,只是为了弄清楚这是如何起作用的.
在我的应用程序中,我有一个表单,我通过使用DWM API的方法DwmExtendFrameIntoClientArea来调整,以扩展Aero Glass标题栏的高度,以便在Aero框架上绘制我的表单客户区的一部分.为了达到这个效果,我还在客户区域的一部分绘制了一个黑色矩形,它在玻璃框架上方,因此它看起来很透明,正如许多在线文章所暗示的那样.这在Windows Vista/Windows 7下运行良好但是当我下载VS 2010并使用.NET Framework 4.0作为我的trarget框架来构建我的应用程序时,这种方法不再有效.问题是黑色矩形是可见的,即在Aero玻璃上绘图时,黑色不再被认为是透明的.有没有人知道这可能有什么问题以及如何克服它?
这是我之前在Windows Vista/7 Aero Titlebar上绘制自定义按钮问题的后续内容.
我最近重新讨论了这个主题,并发现这篇文章基本上是在启用Aero的标题栏(Windows Vista和7)上"绘制"按钮的黑客.代码的作用是在当前窗口上创建一个透明窗口并将按钮放在其上,给标题栏上的其他按钮留下印象.唯一的问题是按钮看起来像常规的WinForms按钮!
我的问题是,我如何阅读windows shell样式(又名主题)才能创建与Control Box中的样式相同的按钮(见图)?
我想答案是在.NET(VB.NET或C#).我可以使用非托管代码.

在MFC中,默认情况下,对话框标题栏的字体与系统设置相对应。如何更改字体样式?