gpt4 book ai didi

delphi - LVM_GETITEMPOSITION

转载 作者:行者123 更新时间:2023-12-02 01:03:57 26 4
gpt4 key购买 nike

我尝试使用 LVM_GETITEMPOSITION 设置/获取桌面图标位置。设置位置可以按预期工作,但获取位置却不能。

当我发送消息(DeskHandle, LVM_GETITEMPOSITION, 1, ppt);资源管理器崩溃了,这显然是因为 ppt 是我的进程中唯一有效的地址,所以我需要将 dll 注入(inject)资源管理器的内存地址空间..这就是我再次陷入困境的地方

问题是返回位置总是0,0

dll:

library Project2_dll;

uses
SysUtils,Classes,windows,messages,dialogs,commctrl;

{$R *.res}

procedure hookit; stdcall;
var ppt:tpoint;
Desktop,DeskHandle : hwnd;
DeskThread : cardinal;
begin
Desktop := FindWindow('ProgMan', nil);
Desktop := FindWindowEx(Desktop, 0, 'SHELLDLL_DefView', nil);
DeskThread := GetWindowThreadProcessID(Desktop, nil);
DeskHandle := FindWindowEx(Desktop, 0, 'SysListView32', nil);

sendmessage(DeskHandle, LVM_GETITEMPOSITION, 1, Longint(@ppt) );
showmessage(inttostr(ppt.X)+' '+inttostr(ppt.Y));
end;

exports hookit;

begin

end.

exe:

var
lib : hwnd;
prc: procedure; stdcall;

procedure TForm2.Button1Click(Sender: TObject);
var hListView : HWND;
DeskThread : cardinal;
begin
hListView := FindWindow('ProgMan', nil);
hListView := FindWindowEx(hListView, 0, 'SHELLDLL_DefView', nil);
DeskThread := GetWindowThreadProcessID(hListView, nil);

lib:= LoadLibrary('Project2_dll.dll');
prc := GetProcAddress(lib, 'hookit');

HH := SetWindowsHookEx(WH_MOUSE,GetProcAddress(lib, 'getit'),lib,DeskThread);

prc;
end;

我已经在 SO 看到了一些类似的问题,但没有一个有帮助。

ps:在 Delphi XE、Windows 7 x64 中运行此程序,并假设 SysListView32 始终是 progman 的子级(而不是 WorkerW)

感谢任何帮助^_^

最佳答案

您无法将 32 位 DLL 注入(inject) 64 位进程。为了将 DLL 注入(inject) 64 位资源管理器,您需要获取 XE2 或 XE3 并构建 64 位 DLL。或者,如果您无法访问 64 位 Delphi,则用 C++ 编写这部分代码。

事实上,您的代码无论如何都不会注入(inject)。它只是从您的进程中调用 SendMessage。注入(inject)通常涉及对 CreateRemoteThread 的调用。

事实上你不需要注入(inject)。您可以使用VirtualAllocEx在资源管理器进程中分配内存。然后,您可以在 SendMessage 中传递该地址。由于该内存位于其他进程中,因此您必须使用 ReadProcessMemory 和 WriteProcessMemory 来访问它。不过,您仍然需要在 64 位进程中执行此操作。

我本以为 shell 为您提供了获取此信息的工具,而无需破解资源管理器进程的内存。

关于delphi - LVM_GETITEMPOSITION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12374011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com