인터넷에서 찾아서..
한번 테스트 할려고...
<!--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
라고 뜨는군요 다른 분들은 다 저렇게 해서. 쓰시던데 저는 뭐를 빠트린걸까요??
초보를 위해.. 조언좀 부탁드립니다.
두가지 실수가 있습니다.
첫째
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으로 넘겨줘야 겠죠
그럼...