C++ 我需要通过windows句柄(HWND)和#xFF0C获取文件;我该怎么做?;
我需要制作一个安全软件来限制用户在Windows中的复制和粘贴。所以我用C++ API钩子来勾选剪贴板。当某个进程想要获取ClipboardData时,我可以获取最近设置ClipboardData的窗口句柄 但是现在我需要像设置剪贴板数据的窗口中的文件路径一样获取文件信息。我该怎么做 例如,记事本进程打开一个文件“C:\1.txt”,并绘制一个窗口来显示C++ 我需要通过windows句柄(HWND)和#xFF0C获取文件;我该怎么做?;,c++,windows,hook,C++,Windows,Hook,我需要制作一个安全软件来限制用户在Windows中的复制和粘贴。所以我用C++ API钩子来勾选剪贴板。当某个进程想要获取ClipboardData时,我可以获取最近设置ClipboardData的窗口句柄 但是现在我需要像设置剪贴板数据的窗口中的文件路径一样获取文件信息。我该怎么做 例如,记事本进程打开一个文件“C:\1.txt”,并绘制一个窗口来显示 txt数据。我可以获取窗口句柄,如何获取txt文件路径。使用如下方式: DWORD proc_id; TCHAR path[MAX_PATH]
txt数据。我可以获取窗口句柄,如何获取txt文件路径。使用如下方式:
DWORD proc_id;
TCHAR path[MAX_PATH];
GetWindowThreadProcessId(wnd, &proc_id);
HANDLE proc_handle = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, proc_id);
GetProcessImageFileName(proc_handle, path, MAX_PATH);
CloseHandle(proc_handle);
您可能需要阅读和。这个问题似乎基于一个有缺陷的假设,即
HWND
只有一个文件。这是不真实的。Explorer.EXE在其主窗口中显示许多文件,而大多数对话框不显示任何文件。如果您试图获取进程的EXE路径,则不需要EnumProcessModules()
,只需将NULL传递给GetModuleFileNameEx()
的hModule
参数即可。但是,请注意,文档中说:“要检索远程进程的主可执行模块的名称,请使用GetProcessImageFileName
或QueryFullProcessImageName
函数。这比使用空模块句柄调用GetModuleFileNameEx
函数更有效、更可靠。”,谢谢我已经更正了答案。请注意,GetProcessImageFileName()
(还有QueryFullProcessImageName()
)只需要PROCESS\u QUERY\u LIMITED\u信息
权限。不要请求比实际需要更多的权限抱歉,我不需要EXE文件路径。例如,notepad.EXE打开一个文件“C:\1.txt”。我需要txt文件路径