已知一个用OpenProcess得到的HANDLE,如何通过这个HANDLE得到它所属窗口的句柄HWND?

时间:2022-08-29 14:32:31
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwx);

如何通过hProc得到窗口句柄?

要在WIN98,2000系统都可以用呀。
解决了另外再给分。

13 个解决方案

#1


use EnumWindows and GetWindowThreadProcessId , see

http://msdn.microsoft.com/msdnmag/issues/02/07/CQA/default.aspx

#2


Psapi.h
是98下和2000下都能用的吗?

#3


I think not, see

http://msdn.microsoft.com/library/en-us/perfmon/base/enumprocesses.asp?frame=true

Client: Included in Windows XP, Windows 2000 Professional, and Windows NT Workstation 4.0.
Server: Included in Windows Server 2003, Windows 2000 Server, and Windows NT Server 4.0.

#4


应该不能直接得到
一个进程通常都会对应多个窗口句柄(少则2~3个,多则几十个)
似乎只能枚举系统中的所有窗口句柄,然后逐一判断它们所属的进程。

#5


98下怎么办呢,现在2000的已经OK了?

#6


EnumWindows and GetWindowThreadProcessId should work on 98 too

#7


HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwx);

现在知道hProc的值,
如何得到他所属窗口的HWND,或程序名PATH都可以。

GetWindowThreadProcessId 恐怕用不上。

#8


look ^ study

#9


如果要获得程序名PATH的话可以这样做:
调用EnumProcessModules获取进程对应的模块名
然后对获得的第一个模块调用GetModuleFileNameEx就可以得到带完整路径的应用程序可执行文件名。

#10


学习ing...

#11


EnumThreadWindows

#12


回复人: thisisjjjj(Jeffry) ( ) 信誉:99  
如果要获得程序名PATH的话可以这样做:
调用EnumProcessModules获取进程对应的模块名
然后对获得的第一个模块调用GetModuleFileNameEx就可以得到带完整路径的应用程序可执行文件名。

-------------------


GetModuleFileNameEx是在psapi.h中的,只能在2000下用~~
98下就没办法了。

#13


回复人: flyelf(空谷清音) ( ) 信誉:100 
EnumThreadWindows

------------------------------
Win32 API EnumThreadWindows(DWORD threadId,WNDENUMPROC lpfn,LPARAM lParam) 
所以也不能~

#1


use EnumWindows and GetWindowThreadProcessId , see

http://msdn.microsoft.com/msdnmag/issues/02/07/CQA/default.aspx

#2


Psapi.h
是98下和2000下都能用的吗?

#3


I think not, see

http://msdn.microsoft.com/library/en-us/perfmon/base/enumprocesses.asp?frame=true

Client: Included in Windows XP, Windows 2000 Professional, and Windows NT Workstation 4.0.
Server: Included in Windows Server 2003, Windows 2000 Server, and Windows NT Server 4.0.

#4


应该不能直接得到
一个进程通常都会对应多个窗口句柄(少则2~3个,多则几十个)
似乎只能枚举系统中的所有窗口句柄,然后逐一判断它们所属的进程。

#5


98下怎么办呢,现在2000的已经OK了?

#6


EnumWindows and GetWindowThreadProcessId should work on 98 too

#7


HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwx);

现在知道hProc的值,
如何得到他所属窗口的HWND,或程序名PATH都可以。

GetWindowThreadProcessId 恐怕用不上。

#8


look ^ study

#9


如果要获得程序名PATH的话可以这样做:
调用EnumProcessModules获取进程对应的模块名
然后对获得的第一个模块调用GetModuleFileNameEx就可以得到带完整路径的应用程序可执行文件名。

#10


学习ing...

#11


EnumThreadWindows

#12


回复人: thisisjjjj(Jeffry) ( ) 信誉:99  
如果要获得程序名PATH的话可以这样做:
调用EnumProcessModules获取进程对应的模块名
然后对获得的第一个模块调用GetModuleFileNameEx就可以得到带完整路径的应用程序可执行文件名。

-------------------


GetModuleFileNameEx是在psapi.h中的,只能在2000下用~~
98下就没办法了。

#13


回复人: flyelf(空谷清音) ( ) 信誉:100 
EnumThreadWindows

------------------------------
Win32 API EnumThreadWindows(DWORD threadId,WNDENUMPROC lpfn,LPARAM lParam) 
所以也不能~