请问各位高手,如何得出指定的window应用程序的Handle?(100分)

  • 主题发起人 主题发起人 joioy
  • 开始时间 开始时间
J

joioy

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位高手,如何得出指定的window应用程序的Handle?
 
findwindow()
具体参数你在bbs上查一下就行,它返回的就是你的应用程序的handle
 
findwindow

函数功能:该函数获得一个顶层窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数不查找子窗口。在查找时不区分大小写。

函数型:HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName);

参数:

IpClassName :指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobafAddAtom函数产生的全局成员。该成员为16位,必须位于IpClassName的低 16位,高位必须为 0。

IpWindowName:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为空,则为所有窗口全匹配。

返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄;如果函数失败,返回值为NULL。

若想获得更多错误信息,请调用GetLastError函数。

备注:Windows CE:若类名是一个成员,它必须是从 RegisterClass返回的成员。

速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;头文件:Winuser.h;库文件:user32.lib; Unicode:在 Windows NT上实现为 Unicode和 ANSI两种版本。
 
VAR
hHandle: THandle;
begin
hHandle:= FindWindow('TForm1','Form1');
end;
 
findwindow()是要给出应用程序的“标题”,但是如果我用openDialog打开一个文件,
反回的是一个字符串,如果用字符串来找该文件的Handle行不行?谢谢!
 
查阅可视窗口标题

下面只是举出一个例子提供参考:运用API函数GetWindow()配合GetWindowText()逐一查出各视窗的标题

1. File | New Project 开始一个新的工程
2. 在 Form1 中安排 Button 与 Memo 各一
3. 在 Button1 的 OnClick 事件中撰写程式如下:
procedure TForm1.Button1Click(Sender: Tobject);
var
hCurrentWindow: HWnd;
szText: array[0..254] of char;
begin
hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST);
while hCurrentWindow <> 0 do
begin
if GetWindowText(hCurrentWindow, @szText, 255)>0
then Memo1.Lines.Add(StrPas(@szText));
hCurrentWindow:=
GetWindow(hCurrentWindow, GW_HWNDNEXT);
end;
end;

 
to 楼主:
你的想法很牛,呵呵,不过不可能实现的。
 
1. 找到窗口:
procedure TForm1.Button1Click(Sender: TObject);
begin
人在昆明的办法 或 其它
end;

2.得到文件名字:
procedure TForm1.Button2Click(Sender: TObject);
var
_procfile : String;
begin
setlength(_procfile,119);
getmodulefilename(
getwindowlong(
form1.handle{可以替换为你的窗口句柄},
GWL_HINSTANCE),
pchar(_procfile),119);

_procfile:=string(pchar(_procfile));

showmessage(_procfile);// 显示文件名字
end;
 
多人接受答案了。
 
后退
顶部