Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.13;
Скачать: CL | DM;

Вниз

Значки на рабочем чтоле   Найти похожие ветки 

 
Антипыч   (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 вся ветка

Текущий архив: 2003.02.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
3-38111
Шурик Ш
2003-01-28 11:09
2003.02.13
Действия с БД SQL


3-38107
Rule
2003-01-27 23:04
2003.02.13
Почему не работает программа с компонентами Интербейза


7-38575
Chrome2002
2002-12-09 15:37
2003.02.13
NTFS permissions


1-38364
Alexandr3
2003-02-04 07:36
2003.02.13
Помогите пожалуйста показать окно


14-38478
Туся
2003-01-30 11:14
2003.02.13
ICQ бесплатно