ここの[過去のTips集]-[DelphiによるWin32API]
-[現在表示されているウインドウを列挙する]を
試してみたのですが次の場所でエラーが出てしまいます。
> EnumWindows(@EnumWindowProc, 0);
>[エラー] test.pas(49): 変数が必要です
環境はWIN2KSP2+Delphi7proです。
よろしくお願いします。
Halbow です。
[現在表示されている子ウインドウを列挙する]
じゃなくて、
[現在表示されているウインドウを列挙する]
じゃないですか?
function EnumWindowProc(Handle: hWnd; lPalam: Integer):Boolean;Stdcall;
var
Title: array[0..255] of char;
begin
//タイトルがあって表示されているウインドウをメモに書き込む
If (GetWindowText(Handle, Title,255 ) <> 0) And
IsWindowVisible(Handle) then
Form1.Memo1.Lines.Add(Title);
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Clear ;
EnumWindows(@EnumWindowProc, 0);
end;
コピペして実行してみましたが問題なくうまくいっています。
>[現在表示されているウインドウを列挙する]
>
>じゃないですか?
その通りです。失礼しました。
そして基本的なミスでした。
>function TForm1.EnumWindowProc(Handle: hWnd; lPalam:Integer):Boolean;Stdcall;
自分は関数や手続きの中で使用される以外は
private、public部で全て定義すると勝手に思い込んで
いたので機械的にこれを補完していました。
しかしよく見るとEnumWindowProcはAPIですね。
Stdcallの意味もなんとなくでよく理解していなかった
ので迂闊でした。
>コピペして実行してみましたが
の部分でもしかするとと思い試してみたところ
やっと間違いにやっと気づくことができました。
ありがとうございました。
Halbow です。
>自分は関数や手続きの中で使用される以外は
>private、public部で全て定義すると勝手に思い込んで
>いたので機械的にこれを補完していました。
EnumWindowProc() は EnumWindows() API を実行したときに
システムから呼ばれるコールバック関数ですよね。ですから、
Delphi のクラスのメソッドにすることはできません。
けっこう重要なことですので覚えておいてください。
即答ありがとうございます。
コールバック関数、相手から呼び出してもらう関数のことですね。
Tipsばかり試して基本ができていないので少し恥ずかしいです。
基本からやり直してきます。
ツイート | ![]() |