如何从窗口的到文件的路径??????????!!!!!!!!!!(50分)

  • 主题发起人 主题发起人 lsx_delphi
  • 开始时间 开始时间
L

lsx_delphi

Unregistered / Unconfirmed
GUEST, unregistred user!
我用窗口列举把我想要的窗口找到后,
我想的到它的这个窗口所在的文件路径,有什么办法??
give me an answer please,thanks!!
 
你指的是列出你所要找的程序吧
如果你那样的话
你可用findfisr
;和findnext函数
你查一下帮助就知道怎样用了,那里有例子
 
试一下这个函数:
function HWndToFileName(Handle: HWnd): string;
var
; hInstance: THandle;
; nSize: Cardinal;
; Buff: array[0..MAX_PATH - 1] of Char;

begin
; Result := '';
; hInstance := GetWindowLong(Handle, GWL_HINSTANCE);
; if hInstance <> 0 then
; begin
; ; nSize := MAX_PATH;
; ; nSize := GetModuleFileName(hInstance, @Buff, nSize);
; ; if nSize <> 0 then
; ; ; SetString(Result, Buff, nSize);
; end;
end;
 
to micony:
; ; 我不是想通过进程来得到程序的文件名,这个我会
; ; 我就是想通过窗口名来得到文件名(和路径)
to bbkxjy
; ;你的程序初看原理是对的,为什么调试结果却是很奇怪,你能回答我吗?
我是这样做的:
procedure TForm1.Button1Click(Sender: TObject);
var ;hCurWindow: HWnd; ;// 窗口句柄
; ; ;filename,s:string;
; ; ;WinText: array [0..255] of char;
begin
// 获取第一个窗口的句柄
; hCurWindow := GetWindow(Handle, GW_HWNDFIRST);
; ; ; while hCurWindow <> 0 do
; ; ; ; ; begin
; ; ; ; ; ;// 获取窗口的名称
; ; ; ; ; ;if GetWindowText(hCurWindow, @WinText, 255)>0 then
; ; ; ; ; ; ; begin
; ; ; ; ; ; ; ;s:=StrPas(@WinText);
; ; ; ; ; ; ; ;if AnsiStrPos(PChar(s),pchar('记事本'))<>nil//如果窗口名包含有'记事本'
; ; ; ; ; ; ; ; ; then
; ; ; ; ; ; ; ; ; ; ;begin
; ; ; ; ; ; ; ; ; ; ; label1.caption:=s;
; ; ; ; ; ; ; ; ; ; ; filename:=HWndToFileName(hCurWindow);//这个就是你给出的函数
; ; ; ; ; ; ; ; ; ; ; label2.caption:=filenameff;
; ; ; ; ; ; ; ; ; ; ;end;
; ; ; ; ; ; ; ;end;
; ; ; ; ; ;// 获取下一个窗口的句柄
; ; ; ; ; ;hCurWindow:=GetWindow(hCurWindow, GW_HWNDNEXT);
; ; ; ; ;end;
; ; ; end;
结果label2.caption显示的是的:d:/borland/delphi5/project/project1.exe
即就是这个正在运行的delphi程序!不是想要的‘记事本’的文件路径!为何??谢谢!
 
接受答案了.
 
请看函数说明,hModule参数为module的句柄,而非窗口的句柄,当该参数为NULL,或无效值时,
返回的是产生该进程的文件.当然就是运行着的DELPHI程序.

DWORD GetModuleFileName(
; ; HMODULE hModule, // handle to module to find filename for
; ; LPTSTR lpFilename, // pointer to buffer for module path
; ; DWORD nSize // size of buffer, in characters
; ;);
;

Parameters

hModule

Identifies the module whose executable filename is being requested. If this parameter is NULL, GetModuleFileName returns the path for the file used to create the calling process.
 
后退
顶部