|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Координаты ярлыков
Пишу прогу, которая будет симулировать вертолёт на рабочем столе, который будет маневрировать и взрываться при врезании в папку или ярлык на рабочем столе. Помогите плз! Дайте процедуру, которая будет определять координаты ярлыков и записывать их в массив:
Код:
koor:array [1..100] of TPoint; Жизнь - игра. Сюжет тупой, зато графика офигенная |
#2
|
||||
|
||||
рабочий стол это ListView. через ListView_GetItemCount получаешь количество элементов, через LVM_GETITEMPOSITION их позицию.
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
lekssp (30.04.2013)
|
#3
|
||||
|
||||
можете поподробней. на одном форуме тоже так сказали. А я не понял или что то не так сделал. Если можно то дайте плз исходник. Очень прошу
Жизнь - игра. Сюжет тупой, зато графика офигенная |
#4
|
||||
|
||||
Что за народ пошел, только и делают, что клянчат примеры.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
||||
|
||||
Цитата:
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
lekssp (30.04.2013)
|
#6
|
||||
|
||||
Жизнь - игра. Сюжет тупой, зато графика офигенная |
#7
|
||||
|
||||
ну, сойдет...
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
lekssp (30.04.2013)
|
#8
|
||||
|
||||
Так ведь оно не работает !!!
Жизнь - игра. Сюжет тупой, зато графика офигенная |
#9
|
||||
|
||||
а это?
http://zalil.ru/34472163 Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
lekssp (30.04.2013)
|
#10
|
||||
|
||||
Спасибо! Круто! А не мог бы ты выложить исходник, а то я посмотрев exe файл попробовал ещё раз ... и опять не работает.
Жизнь - игра. Сюжет тупой, зато графика офигенная |
#11
|
||||
|
||||
Код:
unit Unit1; interface uses CommCtrl, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Log: TMemo; procedure FormCreate(Sender: TObject); private { Private declarations } procedure GetItemPosition; public { Public declarations } end; var Form1: TForm1; hListView: THandle = 0; implementation {$R *.dfm} function EnumWindowsProc(hwnd: HWND; lParam: LPARAM): Boolean; stdcall; var hShellDLL: THandle; begin Result:=True; hShellDLL:=FindWindowEx(hwnd, 0, 'SHELLDLL_DefView', nil); if hShellDLL<>0 then begin hListView:=FindWindowEx(hShellDLL, 0, 'SysListView32', nil); if hListView<>0 then Result:=False; end; end; procedure TForm1.FormCreate(Sender: TObject); var aiconmetrics: ICONMETRICS; r: TRect; begin aiconmetrics.cbSize:=SizeOf(ICONMETRICS); SystemParametersInfo(SPI_GETICONMETRICS, SizeOf(ICONMETRICS), @aiconmetrics, 0); Log.Lines.Add('HorzSpacing='+IntToStr(aiconmetrics.iHorzSpacing)); Log.Lines.Add('VertSpacing='+IntToStr(aiconmetrics.iVertSpacing)); Log.Lines.Add('ScreenWidth='+IntToStr(Screen.Width)); Log.Lines.Add('ScreenHeight='+IntToStr(Screen.Height)); SystemParametersInfo(SPI_GETWORKAREA, 0, @r, 0); Log.Lines.Add('WORKAREA = '+IntToStr(r.Left)+', '+IntToStr(r.Top)+' - '+IntToStr(r.Right)+', '+IntToStr(r.Bottom)); EnumWindows(@EnumWindowsProc, 0); if hListView<>0 then begin Log.Lines.Add('hListView='+IntToStr(hListView)); Log.Lines.Add('ItemCount='+IntToStr(ListView_GetItemCount(hListView))); Log.Lines.Add('--'); GetItemPosition; end; end; procedure TForm1.GetItemPosition; var ProcessId: DWORD; hProcess: DWORD; BufItem: PChar; BufText: PChar; APoint: TPoint; LVItem: TLVItem; data: array [0..MAX_PATH] of Char; dummy: Cardinal; ItemCount: Integer; i: Integer; len: Integer; begin GetWindowThreadProcessId(hListView, ProcessId); hProcess:=OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId); BufItem:=VirtualAllocEx(hProcess, nil, $1000, MEM_COMMIT, PAGE_EXECUTE_READWRITE); BufText:=BufItem; Inc(BufText, SizeOf(TLVItem)); ZeroMemory(@LVItem, SizeOf(TLVItem)); LVItem.pszText:=BufText; LVItem.cchTextMax:=SizeOf(data); WriteProcessMemory(hProcess, BufItem, @LVItem, $1000, dummy); ItemCount:=ListView_GetItemCount(hListView); for i:=0 to ItemCount-1 do begin len:=SendMessage(hListView, LVM_GETITEMTEXT, i, LPARAM(BufItem)); ReadProcessMemory(hProcess, BufText, @data[0], len, dummy); SendMessage(hListView, LVM_GETITEMPOSITION, i, LPARAM(BufText)); ReadProcessMemory(hProcess, BufText, @APoint, SizeOf(TPoint), dummy); Log.Lines.Add(Copy(data, 1, len)+' : '+IntToStr(APoint.X)+', '+IntToStr(APoint.Y)); end; VirtualFreeEx(hProcess, BufItem, 0, MEM_RELEASE); CloseHandle(hProcess); end; end. Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
lekssp (30.04.2013)
|
#12
|
||||
|
||||
Большое спасибо
Жизнь - игра. Сюжет тупой, зато графика офигенная |
#13
|
||||
|
||||
|
#14
|
|||
|
|||
Можно exe-шник готовый посмотреть? Интересно что получилось..
|