VC获取进程ID 线程ID 窗口句柄
2014-10-09 20:51
309 查看
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_HIDE);
窗口标题--------> 窗口句柄
TCHAR lpWindowName[]=TEXT("新建 文本文档.txt - 记事本");
HWND hWnd=::FindWindow(NULL,lpWindowName);
if(hWnd && IsWindow(hWnd)) ::ShowWindow(hWnd,SW_HIDE);
2.窗口句柄-------> 进程ID 窗口句柄-------> 主线程ID
要使用到的函数:
DWORD GetWindowThreadProcessId(
HWND hWnd, //目标窗口句柄
LPDWORD lpdwProcessId //返回目标窗口对应进程ID
);
例子:
DWORD dwProcId=0;//存放返回的进程ID
DWORD dwThreadId=0;//存放返回的主线程ID
HWND hWnd=XXXX;//这里省略,可能用任务方式得到一个窗口的句柄.比如用1中的方法.
dwThreadId=GetWindowThreadProcessId(hWnd,&dwProcId);//同时得到进程ID和主线程ID.
3.窗口HAND ---> CWnd
用CWnd::FromHandle(HWND hWnd)函数.很多类都有这个函数.
4.进程名 ------> 进程ID
(注:进程名,即在"任务管理器"中看到的名字)
用CCheckObject类(详细实现源文件);
例子:
以记事本为例,进程名为 NOTEPAD.EXE (不一定是大写哦,得到任务管理器是显示而定);
CCheckObject ch;
TCHAR Name[]=TEXT("NOTEPAD.EXE");
DWORD dwProcId=ch.GetProcessId(Name);
5. 进程名 --------> 主线程ID
例子:
CCheckObject ch;
TCHAR Name[]=TEXT("NOTEPAD.EXE");
DWORD dwThreadId=ch.GetThreadId(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. 主窗口一般都有子窗口(这个不是一定的,但是具有普遍性)
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_HIDE);
窗口标题--------> 窗口句柄
TCHAR lpWindowName[]=TEXT("新建 文本文档.txt - 记事本");
HWND hWnd=::FindWindow(NULL,lpWindowName);
if(hWnd && IsWindow(hWnd)) ::ShowWindow(hWnd,SW_HIDE);
2.窗口句柄-------> 进程ID 窗口句柄-------> 主线程ID
要使用到的函数:
DWORD GetWindowThreadProcessId(
HWND hWnd, //目标窗口句柄
LPDWORD lpdwProcessId //返回目标窗口对应进程ID
);
例子:
DWORD dwProcId=0;//存放返回的进程ID
DWORD dwThreadId=0;//存放返回的主线程ID
HWND hWnd=XXXX;//这里省略,可能用任务方式得到一个窗口的句柄.比如用1中的方法.
dwThreadId=GetWindowThreadProcessId(hWnd,&dwProcId);//同时得到进程ID和主线程ID.
3.窗口HAND ---> CWnd
用CWnd::FromHandle(HWND hWnd)函数.很多类都有这个函数.
4.进程名 ------> 进程ID
(注:进程名,即在"任务管理器"中看到的名字)
用CCheckObject类(详细实现源文件);
例子:
以记事本为例,进程名为 NOTEPAD.EXE (不一定是大写哦,得到任务管理器是显示而定);
CCheckObject ch;
TCHAR Name[]=TEXT("NOTEPAD.EXE");
DWORD dwProcId=ch.GetProcessId(Name);
5. 进程名 --------> 主线程ID
例子:
CCheckObject ch;
TCHAR Name[]=TEXT("NOTEPAD.EXE");
DWORD dwThreadId=ch.GetThreadId(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. 主窗口一般都有子窗口(这个不是一定的,但是具有普遍性)
相关文章推荐
- VC由进程ID获取窗口句柄
- VC由进程ID获取窗口句柄的各种方
- VC由进程ID获取窗口句柄
- [转]C#获取窗口进程ID与句柄还有读写内存类
- 假如想自己写软件的话,可以先FindWindow找到那个窗口的句柄,然后用GetWindowThreadProcessId就可以得到这个窗口的进程ID和线程ID,有了这些ID就可以找到进程名称了。
- 窗口句柄,进程ID,进程句柄,线程ID,线程句柄
- VC怎么通过进程ID得到窗口句柄
- 通过进程名或进程ID获取进程句柄,窗口句柄
- 通过进程id获取窗口句柄
- VC++ 通过进程名或进程ID获取进程句柄
- WinAPI: GetWindowThreadProcessId - 获取指定窗口的进程 ID 或线程 ID
- WinCE进程ID获取窗口句柄
- VC小技巧一:获取窗口句柄、控件ID、DC等
- VC 根据线程句柄获得线程ID 根据线程句柄获得进程ID
- VC根据进程ID获得主窗口句柄(不是进程句柄)
- VC根据进程ID获得主窗口句柄(不是进程句柄)
- 通过进程ID获取窗口句柄(微软)
- 如何根据进程id获取该进程的主窗口句柄
- Delphi 通得进程ID获取主窗口句柄
- WIN API-VFP获取第三方窗体的控件信息(句柄,窗口ID,进程ID,类名,标题)