お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"ウィンドウの列挙"





みなさん、こんにちわ。
コールバック関数を使ったWin32APIの仕組みを研究しているうちに
面白いものが見られるようになったので、自信はないながらもここに
挙げてみました。

すべての可視ウィンドウはデスクトップの子ウィンドウだということで、
GetDesktopWindow の返り値をもとに、GetChildWindows で子を列挙します。
で、有効そうなデバイスコンテキストが得られたウィンドウハンドルに
ついては、ちょっとしたマークを描画します。

いろんなアプリを動かしながらこれを試すと、画面は汚れますがいろいろな
示唆を得られました。

フォームの上にボタンを1個置いて、クリック時イベントを記述します。

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

function EnumWndProc(h: hWnd; p: LPARAM):Boolean; stdcall;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function EnumWndProc(h: hWnd; p: LPARAM):Boolean; stdcall;
var
  z: HDC;
begin
  z := GetDC(h);
  if z <> 0 then begin
    Rectangle(z, 0,0,8,8);
    MoveToEx(z, 4, 4, nil);
    LineTo(z, 999, 4);
    MoveToEx(z, 4, 4, nil);
    LineTo(z, 4, 999);
  end;
  ReleaseDC(h, z);
  Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  q: hWnd;
begin
  q := GetDesktopWindow;
  EnumChildWindows(q, @EnumWndProc, 0);
end;

00413番の発言で、折井哲さんが似たサンプルを挙げていらっしゃるのに
気づきました。比較して勉強させてもらいます(^^)

                                     00/05/26(金) 20:48 東洞31(CZB13222)

Original document by 東洞31        氏 ID:(CZB13222)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum