const
LVM_GETITEMCOUNT=
$1000
+
4
;
LVM_SETITEMPOSITION=
$1000
+
15
;
var
pid: DWORD;
hProcess: THandle;
addr
:
Pointer
;
n, pos, s, k:
integer
;
Dummy: DWORD;
PItem: ^LV_ITEM;
Item: LV_ITEM;
begin
GetWindowThreadProcessID(h,@pid);
hProcess:=OpenProcess(PROCESS_VM_READ
or
PROCESS_VM_OPERATION
or
PROCESS_VM_WRITE,
false
,pid);
addr
:=VirtualAllocEx(hProcess,
nil
,
4096
,MEM_RESERVE
or
MEM_COMMIT,PAGE_READWRITE);
n:=SendMessage(h,LVM_GETITEMCOUNT,
0
,
0
);
Pos :=
0
;
s:=
0
;
repeat
Item
.
stateMask := LVIS_SELECTED
or
LVIS_FOCUSED;
Item
.
state := LVIS_SELECTED
or
LVIS_FOCUSED;
WriteProcessMemory(hProcess, PItem, @Item, SizeOf(LV_ITEM), Dummy);
<b>
SendMessage(h, LVM_SETITEMSTATE, WPARAM(StrToInt(sg
.
Cells[
0
, pos])), LPARAM(PItem));
Sleep(
100
);
PostMessage(h,WM_KEYDOWN,VK_RETURN,
0
);
Sleep(
30
);
PostMessage(h,WM_KEYUP,VK_RETURN,
1
);
Sleep(
100
);
for
k:=
0
to
n-
1
do
begin
WriteProcessMemory(hProcess, PItem, @Item, sizeof(LV_ITEM), Dummy);
SendMessage(h, LVM_SETITEMSTATE, WPARAM(k), LPARAM(PItem));
end
;
inc(Pos);
inc(S);
sleep(
100
);
until
(S>
17
)
or
(Pos=n)
or
(Pos=sg
.
RowCount);
end
;