如何从窗口句柄得到文件名称,不是可执行文件的名称,以下的方法得到是可执行文件的名称
GetWindowThreadProcessId(hWnd, @hProcessID);
hProcess:= OpenProcess(PROCESS_ALL_ACCESS, False, hProcessID);
EnumProcessModules(hProcess, @hMod, SizeOf(hMod), Size);
GetModuleFileNameEx(hProcess, hMod, Buf, SizeOf(Buf));
CloseHandle(hProcess);
Result:= StrPas(Buf); 比如,我打开一个c:\a.txt文件, 现在只知到打开a.txt文件后的窗口的句柄,我想从窗口句柄得到C:\a.txt 这个文件名 并不是想要得到notepad.exe
GetWindowThreadProcessId(hWnd, @hProcessID);
hProcess:= OpenProcess(PROCESS_ALL_ACCESS, False, hProcessID);
EnumProcessModules(hProcess, @hMod, SizeOf(hMod), Size);
GetModuleFileNameEx(hProcess, hMod, Buf, SizeOf(Buf));
CloseHandle(hProcess);
Result:= StrPas(Buf); 比如,我打开一个c:\a.txt文件, 现在只知到打开a.txt文件后的窗口的句柄,我想从窗口句柄得到C:\a.txt 这个文件名 并不是想要得到notepad.exe
HMODULE hModule, // handle to module to find filename for
LPTSTR lpFilename, // pointer to buffer for module path
DWORD nSize // size of buffer, in characters
);
这个API似乎可以满足要求
hProcess:= OpenProcess(PROCESS_ALL_ACCESS, False, hProcessID);
EnumProcessModules(hProcess, @hMod, SizeOf(hMod), Size);
GetModuleFileName(hMod,Buf,SizeOf(Buf));
CloseHandle(hProcess);
Result:= StrPas(Buf); 是这样吗??
buf: PChar;
begin
buf := StrAlloc(MAX_PATH+1);
SendMessage(Handle, WM_GETTEXT, MAX_PATH+1, integer(@buf[0]));
ShowMessage(buf); //得到 a.txt - 记事本
StrDispose(buf);
end;
OpenDialog1.FileName//文件名(有后缀,即文件类型)
ExtractFileName(OpenDialog1.FileName);//文件后缀,即文件类型
ExtractFileExt(OpenDialog1.FileName);//文件所在的磁盘盘符
ExtractFileDrive(OpenDialog1.FileName);//文件路径(不含文件名)
ExtractFilePath(OpenDialog1.FileName);
This function is not available on Windows.