名前 題名 ▼ Mr.XRAYさん > [ 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 です. > タスクバーの表示にも注目ですね. GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link