检查Handle(HWND)是否为控制台

时间:2015-08-08 15:47:23

标签: delphi

目前我通过EnumWindows检查HWND是否为控制台并检查ClassName。

function EnumWindows(AHandle: HWND; AParam: LPARAM): BOOL; stdcall;
var
  classname: array[0.. 255] of Char;
begin
  GetClassName(AHandle, classname, 255);

  if classname = 'ConsoleWindowClass' then
  begin
    // do something
    Result := False;
  end
  else
    Result := True;
end;

我想知道是否有更好的方法来完成这样的事情?

检查Style(或/和ExStyle)会“更好”吗?

1 个答案:

答案 0 :(得分:0)

您可以使用INotifyPropertyChangedAttachConsole检测其他进程是否提供控制台。还有一点需要注意:有些控制台窗口没有FreeConsole - 这里AttachConsole返回GetConsoleWindowthis github repository中对此行为有一个非常好的解释。

声明:

0

枚举进程

function AttachConsole(dwProcessID: Integer): Boolean; stdcall; external 'kernel32.dll';
function FreeConsole(): Boolean; stdcall; external 'kernel32.dll';
function GetConsoleWindow: HWND; stdcall; external kernel32;

积分