為何抓桌面上圖示的座標都為(0,0) |
尚未結案
|
beldandy
一般會員 ![]() ![]() 發表:4 回覆:2 積分:1 註冊:2003-02-12 發送簡訊給我 |
我寫了一段程式如下 function TForm1.GetItemPosition(hwndLV: HWND; i: Integer;
var ppt: TPoint): Bool;
begin
Result := Bool( SendMessage(hWndLV, LVM_GETITEMPOSITION, i, Longint(@ppt)) );
end; procedure TForm1.Button1Click(Sender: TObject);
var
iCount,i : integer;
nowpo : TPoint;
begin
RichEdit1.Lines.Clear;
hdesk := FindWindow('progman','Program Manager');
hdesk := FindWindowEx(hdesk,0,'SHELLDLL_DefView',nil);
hdesk := FindWindowEx(hdesk,0,'SysListView32','FolderView');
huse := hdesk;
iCount := SendMessage(hdesk, LVM_GETITEMCOUNT, 0, 0);
ShowMessage(IntToStr(iCount));
For i := 0 to iCount - 1 Do
If GetItemPosition(hdesk,i,nowpo) Then
RichEdit1.Lines.Add('(' IntToStr(nowpo.X) ',' IntToStr(nowpo.Y) ')');
end; 為何我抓到的座標都為(0,0)??
不知道我那裡寫錯了??
|
aquarius
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:3 回覆:347 積分:330 註冊:2003-05-21 發送簡訊給我 |
主要的問題就是因為你的程式, 和 'progman' 並不是同一個行程. 所以SendMessage(hWndLV, LVM_GETITEMPOSITION, i, Longint(@ppt)) 傳入的這個 ADDRESS, 沒有辦法被正確的 ACCESS 到, 因為你的主程式是另一個行程(PROCESS). 想要取得桌面 ICON 的座標, 必需先掛一個 SYSTEM HOOK 起來, 才能取得正確的座標. 因為程式碼還要分成 DLL 及 EXE , 所以就不寫範例了, 你自個兒試試吧!!..
------
水瓶男的blog: http://791909.blogspot.com |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |