Форум: "WinAPI";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];
ВнизЗначки на рабочем чтоле Найти похожие ветки
← →
Антипыч (2002-12-26 14:28) [0]Как получить координаты значков на рабочем столе? С помощью listview_getitemposition не выходит, потому что, как я узнал, эта процедура не может работать из чущого процесса. Может где в реестре есть???
Заранее благодарю.
← →
bloodman (2002-12-26 16:02) [1]Тебе сюда:
http://www.delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=1013434997&n=15
← →
Антипыч (2002-12-26 22:43) [2]Спасибо большое, это именно то, что мне надо.
← →
Антипыч (2002-12-26 23:35) [3]Радость была преждевременной. Я сейчас проверил этот код, и оказалось, что он не работает.Он выдаёт ошибку(если убрать проверку результата, а с ней всегда возвращает 0). Подскажите, почему так.
Заранее благодарю.
← →
SottNick (2002-12-27 13:10) [4]Joke.dpr:
program Joke;
uses Windows, Registry;
var
hinstDLL: HINST;
hkprcMessage: TFNHookProc;
msg: TMsg;
mhhk:hhook;
Reg:TRegIniFile;
begin
Reg:=TRegIniFile.Create("SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
Reg.WriteString("","Joke",ParamStr(0));
hinstDLL := LoadLibrary("DHook.dll");
hkprcMessage := GetProcAddress(hinstDLL, "GetMsgProc");
mhhk:=SetWindowsHookEx(WH_GETMESSAGE, hkprcMessage, hinstDLL, 0);
repeat until not GetMessage(msg, 0, 0, 0);
end.
DHook.dpr:
library DHook;
uses
Windows,
MyHook in "MyHook.pas";
exports
GetMsgProc;
begin
end.
MyHook.pas:
unit MyHook;
interface
uses Windows,Messages;
var
g_hhk: HHOOK;
function GetMsgProc(nCode: Integer; wParam: WPARAM;
lParam: LPARAM ): LRESULT; stdcall;
implementation
uses commctrl;
function GetMsgProc(nCode: Integer; wParam: WPARAM;
lParam: LPARAM ): LRESULT;
function GetDesktopListViewHandle: THandle;
var
S: String;
begin
Result := FindWindow("ProgMan", nil);
Result := GetWindow(Result, GW_CHILD);
Result := GetWindow(Result, GW_CHILD);
SetLength(S, 40);
GetClassName(Result, PChar(S), 39);
if PChar(S) <> "SysListView32" then Result := 0;
end;
type
PMsg=^TMsg;
var
DMsg:PMsg;
DWND:HWND;
HitInfo:TLVHITTESTINFO;
ItemNum:integer;
ItemPos,MousePos:TPoint;
ItemRect:TRect;
begin
DWND:=GetDesktopListViewHandle;
DMsg:=PMsg(lParam);
if (nCode = HC_ACTION) and (DMsg^.hwnd=DWND) then
begin
if DMsg^.message=WM_MOUSEMOVE then
begin
HitInfo.pt:=DMsg^.pt;
HitInfo.flags:=LVHT_ONITEMICON;
ItemNum:=ListView_HitTest(DWND,HitInfo);
if ItemNum>-1 then
begin
MousePos:=DMsg^.pt;
ListView_GetItemPosition(DWND,ItemNum,ItemPos);
ListView_GetItemRect(DWND,ItemNum,ItemRect,0);
if ((ItemRect.Right-ItemRect.Left) div 2)+ItemPos.x begin
ItemPos.x:=MousePos.x-(ItemRect.Right-ItemRect.Left);
end
else
begin
ItemPos.x:=MousePos.x+4;
end;
if ((ItemRect.Bottom-ItemRect.Top) div 2)+ItemPos.y1 begin
ItemPos.y:=MousePos.y-(ItemRect.Bottom-ItemRect.Top);
end
else
begin
ItemPos.y:=MousePos.y+4;
end;
ListView_SetItemPosition(DWND,ItemNum,ItemPos.x,ItemPos.y);
end;
end;
Result := 0;
end
else
Result := CallNextHookEx(g_hhk, nCode, wParam, lParam);
end;
end.
← →
Антипыч (2002-12-30 23:15) [5]А почему первый вариант у меня не работает, хотя у многих он работает. Может из-за того, что у меня win2k, если так, то помогите сне его переделать под мою систему.
Заранее благодарю.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c