Q&A

  • EnumWindows 를 사용 하고 싶습니다
인터넷에서 찾아서..

한번 테스트 할려고...

<!--CodeS-->

procedure TfrmMain.Button1Click(Sender: TObject);
begin
  EnumWindows(@EnumWindowsProc, 0);
end;

function EnumWindowsProc(hwnd: hwnd; lParam: lParam): Bool;
var
str : string;
begin
GetWindowText(hwnd, PChar(str), 255);
TMemo(LParam).Lines.Add('Handle = ' + IntToStr(hwnd) + ', ' + str);
Result := True;
end;

<!--CodeE-->

이렇게 코드를 만들어 봤습니다.

근데 EnumWindows(@EnumWindowsProc, 0) 에서...

@EnumWindowsProc 부분에

[DCC Error] untMain.pas(30): E2036 Variable required

라고 뜨는군요 다른 분들은 다 저렇게 해서. 쓰시던데 저는 뭐를 빠트린걸까요??

초보를 위해.. 조언좀 부탁드립니다.
1  COMMENTS
  • Profile
    장성호 2009.09.10 11:48

    두가지 실수가 있습니다.

    첫째

    EnumWindows 로 넘겨주는 callback함수는
    Calling-convension이 stdcall 입니다.

    님의 EnumWindowsProc 함수는 아무것도 적혀있지 않으니 기본인 fastcall 이될것입니다.

    함수를 다음과 같이 선언하세요

    function EnumWindowsProc(hwnd: hwnd;lparam:LParam): boolean; stdcall;



    두번째
    EnumWindowsProc 함수안에 보면 lParam으로 넘어온놈을 TMemo로 casting하여서 사용합니다.
    그런데 EnumWindows 호출할때는 lparam으로 0를 줬네요 아무것도 안넘긴거죠


    procedure TForm1.Button3Click(Sender: TObject);
    begin
    EnumWindows(@EnumWindowsProc, LParam(Memo1));
    end;


    위와같이 현재폼의 Memo 컴포넌트를 lparam으로 넘겨줘야 겠죠


    그럼...