[ GetWindowでのオーナーフォームハンドルの取得について ]
https://www.freeml.com/delphi-users/5087/latest
ということで MainFormOnTaskbar のテストです.
テストコードは以下です.
//-----------------------------------------------------------------------------
// ウィンドウのハンドルからクラス名を取得する関数
//-----------------------------------------------------------------------------
function GetClassNameStr(hWindow: HWND): string;
var
LLength : Integer;
LBuffer : array[0..MAX_PATH-1] of Char;
begin
FillChar(LBuffer, SizeOf(LBuffer), #0);
LLength := GetClassName(hWindow, LBuffer, Length(LBuffer));
if LLength > 0 then begin
SetString(Result, LBuffer, LLength);
end else begin
Result := '';
end;
end;
//=============================================================================
// 指定ウィンドウのオーナーウィンドウを取得してそのクラス名を表示
//
// MainFormOnTaskBar が True の時は TForm1 はトップレベルのウィンドウ
// MainFormOnTaskBar が False の時は TApplication がトップレベルのウィンドウ
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
LhTargetWnd : HWND;
LhOwnerWnd : HWND;
LIsVisible : Boolean;
begin
Memo1.Lines.Clear;
//Delphi2007以上
{$IF CompilerVersion > 18.49}
Memo1.Lines.Add('MainFormOnTaskbar : ' + BoolToStr(Application.MainFormOnTaskbar, True));
{$IFEND}
Memo1.Lines.Add('Application.Handle : $' + IntToHex(Application.Handle, 8));
LhTargetWnd := Handle;
LhOwnerWnd := GetWindow(LhTargetWnd, GW_OWNER);
Memo1.Lines.Add('');
Memo1.Lines.Add('Target Window');
Memo1.Lines.Add('Handle : $' + IntToHex(LhTargetWnd, 8));
Memo1.Lines.Add('ClassName : ' + GetClassNameStr(LhTargetWnd));
LIsVisible := IsWindowVisible(LhTargetWnd) and (LhTargetWnd <> 0);
Memo1.Lines.Add('Visible : ' + BoolToStr(LIsVisible, True));
Memo1.Lines.Add('');
Memo1.Lines.Add('Owner Window of Target window');
Memo1.Lines.Add('Handle : $' + IntToHex(LhOwnerWnd, 8));
Memo1.Lines.Add('ClassName : ' + GetClassNameStr(LhOwnerWnd));
LIsVisible := IsWindowVisible(LhOwnerWnd) and (LhOwnerWnd <> 0);
Memo1.Lines.Add('Visible : ' + BoolToStr(LIsVisible, True));
end;
下図は MainFormOnTaskBar が True の時です.
動作確認は Windows 7 U64(SP1) + Delphi XE5(UP2) Pro VCL-32 です.
タスクバーの表示にも注目ですね.
|