如何使用 Delphi 在控制台应用程序中激活玻璃效果(Windows Vista/7)

Posted

技术标签:

【中文标题】如何使用 Delphi 在控制台应用程序中激活玻璃效果(Windows Vista/7)【英文标题】:How can activate a glass effect (windows Vista/7) in a console application using Delphi 【发布时间】:2010-12-18 12:01:36 【问题描述】:

因为我可以在我的控制台应用程序上激活玻璃效果。我使用的是 Windows 7 和 Delphi 2010。

我找到了this 应用程序,所以应该可以。

【问题讨论】:

控制台窗口是共享资源。它不属于您的程序。不要对不属于您的窗口进行全局更改。如果您的客户希望他们的控制台窗口看起来很漂亮,他们可以安装您链接到的程序。 【参考方案1】:

几周前,我在博客上发布了this article。

关键是使用GetConsoleWindowDwmEnableBlurBehindWindow 函数。

GetConsoleWindow 函数检索与调用进程关联的控制台使用的窗口句柄。

DwmEnableBlurBehindWindow 函数在提供的窗口句柄上启用模糊效果(玻璃)。

program ConsoleGlassDelphi;

$APPTYPE CONSOLE

    uses
  Windows,
  SysUtils;

type
  DWM_BLURBEHIND = record
    dwFlags                 : DWORD;
    fEnable                 : BOOL;
    hRgnBlur                : HRGN;
    fTransitionOnMaximized  : BOOL;
  end;

function DwmEnableBlurBehindWindow(hWnd : HWND; const pBlurBehind : DWM_BLURBEHIND) : HRESULT; stdcall; external  'dwmapi.dll' name 'DwmEnableBlurBehindWindow';//function to enable the glass effect
function GetConsoleWindow: HWND; stdcall; external kernel32 name 'GetConsoleWindow'; //get the handle of the console window

function DWM_EnableBlurBehind(hwnd : HWND; AEnable: Boolean; hRgnBlur : HRGN = 0; ATransitionOnMaximized: Boolean = False; AFlags: Cardinal = 1): HRESULT;
var
  pBlurBehind : DWM_BLURBEHIND;
begin
  pBlurBehind.dwFlags:=AFlags;
  pBlurBehind.fEnable:=AEnable;
  pBlurBehind.hRgnBlur:=hRgnBlur;
  pBlurBehind.fTransitionOnMaximized:=ATransitionOnMaximized;
  Result:=DwmEnableBlurBehindWindow(hwnd, pBlurBehind);
end;

begin
  try
    DWM_EnableBlurBehind(GetConsoleWindow(), True);
    Writeln('See my glass effect');
    Writeln('Go Delphi Go');
    Readln;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

这只是一个基本的例子;您必须检查 Windows 操作系统版本以避免出现问题。

【讨论】:

如果“窗口颜色和外观”设置为霜状...白色背景上的白色文本,则此方法效果不佳

以上是关于如何使用 Delphi 在控制台应用程序中激活玻璃效果(Windows Vista/7)的主要内容,如果未能解决你的问题,请参考以下文章

从 Delphi 应用程序中激活文件病毒扫描

delphi控制台程序输出中文乱码,如何解决?

delphi下如何制作纯dos下能够运行的程序,并非是控制台程序

delphi中如何实现多线程socket通信时

Delphi如何在Form的标题栏绘制自定义文字

如何在DELPHI中用程序控制报表打印要素的位置