社区
进程/线程/DLL
帖子详情
如果知道一个进程的句柄,如何得到它的id?
111
2001-03-06 08:04:00
ast
...全文
263
7
打赏
收藏
如果知道一个进程的句柄,如何得到它的id?
ast
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
panda_w
2001-03-06
打赏
举报
回复
看看这两个贴子
http://www.csdn.net/expert/Topic/40582.shtm
http://www.csdn.net/expert/Topic/8453.shtm
DataBind
2001-03-06
打赏
举报
回复
为什么要这么做,CreateProcess的参数中
BOOL CreateProcess(
LPCTSTR lpApplicationName, // name of executable module
LPTSTR lpCommandLine, // command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
BOOL bInheritHandles, // handle inheritance option
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // new environment block
LPCTSTR lpCurrentDirectory, // current directory name
LPSTARTUPINFO lpStartupInfo, // startup information
LPPROCESS_INFORMATION lpProcessInformation // process information
);
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId; //就是他
DWORD dwThreadId;
} PROCESS_INFORMATION;
herohowk
2001-03-06
打赏
举报
回复
如果你要的不是当前进程的, 只有枚举所有的进程ID, 在比较每一个ID的handle是否与你的handle相等, 要注意id与handle的生存周期
herohowk
2001-03-06
打赏
举报
回复
如果你要的不是当前进程的, 只有枚举所有的进程ID, 在比较每一个ID的handle是否与你的handle相等, 要注意id与handle的生存周期
111
2001-03-06
打赏
举报
回复
可是Shellexecuteex只返回了进程句柄,怎么得到进程ID呢?
herohowk
2001-03-06
打赏
举报
回复
你没理解CreateProcess(...).
information是生成的参数
herohowk
2001-03-06
打赏
举报
回复
有两条路线
1, 枚举进程或快照进程(得到所有进程ID),再由ID得到handle(openprocess or toolhelp32)
2, 先由id得到window, 再由window得到handle
通过窗口
句柄
取得
进程
ID
通过窗口
句柄
取得
进程
ID
,源码是易语言API函数GetWindowThreadProcess
Id
的应用教程。@易语言代码大全详解。
VC
进程
ID
获得主窗口
句柄
获得
进程
名
VC获得
进程
ID
获得主线程
ID
获得窗口
句柄
获得主窗口获得
进程
名 1.窗口类名 窗口
句柄
窗口标题 窗口
句柄
HWND FindWindow( LPCTSTR lpClassName, //窗口类名 可用 VC或者VS自带的Spy++查看 LPCTSTR lpWindowName //窗口标题 ); 举例: 以 记事本为例, 记事本 窗口类名 为:NotePad, 窗口标题 视按具体情况而定,假设为"新建 文本文档.txt - 记事本" 窗口类名 窗口
句柄
TCHAR lpClassName[]=TEXT("NotePad"); HWND hWnd=::FindWindow(lpClassName,NULL); if(hWnd && IsWindow(hWnd)) ::ShowWindow(hWnd,SW_H
ID
E); 窗口标题 窗口
句柄
TCHAR lpWindowName[]=TEXT("新建 文本文档.txt - 记事本"); HWND hWnd=::FindWindow(NULL,lpWindowName); if(hWnd && IsWindow(hWnd)) ::ShowWindow(hWnd,SW_H
ID
E); 2.窗口
句柄
进程
ID
窗口
句柄
主线程
ID
要使用到的函数: DWORD GetWindowThreadProcess
Id
( HWND hWnd, //目标窗口
句柄
LPDWORD lpdwProcess
Id
//返回目标窗口对应
进程
ID
); 例子: DWORD dwProc
Id
=0;//存放返回的
进程
ID
DWORD dwThread
Id
=0;//存放返回的主线程
ID
HWND hWnd=XXXX;//这里省略,可能用任务方式
得到
一个
窗口的
句柄
.比如用1中的方法. dwThread
Id
=GetWindowThreadProcess
Id
(hWnd,&dwProc
Id
);//同时
得到
进程
ID
和主线程
ID
. 3.窗口HAND CWnd 用CWnd::FromHandle(HWND hWnd)函数.很多类都有这个函数. 4.
进程
名
进程
ID
(注:
进程
名,即在"任务管理器"中看到的名字) 用CCheckObject类(详细实现源文件); 例子: 以记事本为例,
进程
名为 NOTEPAD.EXE (不一定是大写哦,
得到
任务管理器是显示而定); CCheckObject ch; TCHAR Name[]=TEXT("NOTEPAD.EXE"); DWORD dwProc
Id
=ch.GetProcess
Id
(Name); 5.
进程
名 主线程
ID
例子: CCheckObject ch; TCHAR Name[]=TEXT("NOTEPAD.EXE"); DWORD dwThread
Id
=ch.GetThread
Id
(Name); 6.
进程
名 主窗口
句柄
CCheckObject ch; TCHAR Name[]=TEXT("NOTEPAD.EXE"); HWND hWnd=ch.GetTargetWindowHanle(Name); 7. 其它说明 从CCheckObject类和上面的源码中,不难写出从
进程
ID
主线程
ID
进程
ID
主窗口
句柄
主线程
ID
--->主窗口
句柄
等等其它类似转换. 对于主窗口,特点如下: A. 不能用
进程
ID
,要用线程
ID
,因为
一个
进程
可能有多个线程,每个线程都可能会有主窗口. B. 主窗口不会有WS_CHILD属性 C. 主窗口没有父窗口 D. 主窗口一般都有子窗口(这个不是一定的,但是具有普遍性)
通过
进程
id
获取主窗口
句柄
及主窗口标题
通过
进程
id
获取到所在
进程
的主窗口的
句柄
,及通过该主窗口
句柄
获取当前主窗口的标题,
进程
名;这是
一个
demo例程,仅供参考
易语言-通过窗口
句柄
取得
进程
ID
通过窗口
句柄
取得
进程
ID
,源码是易语言API函数GetWindowThreadProcess
Id
的应用教程。
获取当前活动窗口的标题
获取当前活动窗口的标题,
进程
的
ID
,和
句柄
。一后想干什么都行
进程/线程/DLL
15,467
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章