mfc中如何获得进程中所有进程句柄名

toma2008 2014-11-26 12:02:08
其实我是想关闭一个外部运行的exe程序,我又不知道这个程序的句柄,所有想先找出这个句柄,再关闭。
...全文
358 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-11-26
  • 打赏
  • 举报
回复
GetWindowThreadProcessId The GetWindowThreadProcessId function retrieves the identifier of the thread that created the specified window and, optionally, the identifier of the process that created the window. DWORD GetWindowThreadProcessId( HWND hWnd, // handle to window LPDWORD lpdwProcessId // address of variable for process identifier ); Parameters hWnd Handle to the window. lpdwProcessId Pointer to a 32-bit value that receives the process identifier. If this parameter is not NULL, GetWindowThreadProcessId copies the identifier of the process to the 32-bit value; otherwise, it does not. Return Values The return value is the identifier of the thread that created the window. QuickInfo Windows NT: Requires version 3.1 or later. Windows: Requires Windows 95 or later. Windows CE: Requires version 1.0 or later. Header: Declared in winuser.h. Import Library: Use user32.lib. See Also Windows Overview, Window Functions
赵4老师 2014-11-26
  • 打赏
  • 举报
回复
引用 3 楼 toma2008 的回复:
我换一种问法,如何获得;目标窗口标题
GetWindowText The GetWindowText function copies the text of the specified window's title bar (if it has one) into a buffer. If the specified window is a control, the text of the control is copied. However, GetWindowText cannot retrieve the text of a control in another application. int GetWindowText( HWND hWnd, // handle to window or control with text LPTSTR lpString, // address of buffer for text int nMaxCount // maximum number of characters to copy ); Parameters hWnd Handle to the window or control containing the text. lpString Pointer to the buffer that will receive the text. nMaxCount Specifies the maximum number of characters to copy to the buffer, including the NULL character. If the text exceeds this limit, it is truncated. Return Values If the function succeeds, the return value is the length, in characters, of the copied string, not including the terminating null character. If the window has no title bar or text, if the title bar is empty, or if the window or control handle is invalid, the return value is zero. To get extended error information, callGetLastError. This function cannot retrieve the text of an edit control in another application. Remarks If the target window is owned by the current process, GetWindowText causes a WM_GETTEXT message to be sent to the specified window or control. If the target window is owned by another process and has a caption, GetWindowText retrieves the window caption text. If the window does not have a caption, the return value is a null string. QuickInfo Windows NT: Requires version 3.1 or later. Windows: Requires Windows 95 or later. Windows CE: Requires version 1.0 or later. Header: Declared in winuser.h. Import Library: Use user32.lib. Unicode: Implemented as Unicode and ANSI versions on Windows NT. See Also Windows Overview, Window Functions, GetWindowTextLength, SetWindowText, WM_GETTEXT
toma2008 2014-11-26
  • 打赏
  • 举报
回复
我换一种问法,如何获得;目标窗口标题
lis2012 2014-11-26
  • 打赏
  • 举报
回复
HWND hWnd; DWORD dwProcessID = 0;//获取进程ID hWnd =::FindWindow(NULL, "目标窗口标题 "); if(hWnd) { ::GetWindowThreadProcessId(hWnd,&dwProcessID);//获取进程ID }
笨笨仔 2014-11-26
  • 打赏
  • 举报
回复
函数:

// 取进程
BOOL CHelpCenterApp::GetProcessID(CString ProcessName, DWORD &hProcID, DWORD &ParentID)
{
	int con=0;
	CString str;
	PROCESSENTRY32 pe32;
	pe32.dwSize=sizeof(pe32);
	// 获得系统内所有进程快照
	HANDLE hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
	if(hProcessSnap==INVALID_HANDLE_VALUE)
	{
		// 出错
		return FALSE;
	}
	// 枚举列表中的第一个进程
	BOOL bProcess=Process32First(hProcessSnap,&pe32);
	while(bProcess)
	{
		str=pe32.szExeFile;
		// 比较进程名,找到要找的进程名
		if(ProcessName.CompareNoCase(str)==0)
		{
			con++;								// 进程数加1
		}
		// 继续查找
		bProcess=Process32Next(hProcessSnap,&pe32);
	}
	CloseHandle(hProcessSnap);
	if(con>1)
		return TRUE;							// 进程已经启动
	else
		return FALSE;							// 进程没有启动
}
应用 例如:

	name=_T("HelpCenter.exe");							// 获取本进程文件名
	// 以查进程方式检查程序是否已经运行
	BOOL bJudge=false;
	DWORD procID;										// 本进程ID
	DWORD parentID;										// 父进程ID
	bJudge=GetProcessID(name,procID,parentID);
	if(bJudge)
	{
		// 文件已经打开
		AfxMessageBox(_T("程序已经运行!"));
		exit(0);
	}

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧