我用CreateProcess启动一个进程,可以通过:LPPROCESS_INFORMATION 得到PID和被启动进程的HANDLE:
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} PROCESS_INFORMATION;我想得到该进程的类名,怎么办?有什么简单的方法么?
注:不想用EnumWindows。
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} PROCESS_INFORMATION;我想得到该进程的类名,怎么办?有什么简单的方法么?
注:不想用EnumWindows。
解决方案 »
- 怎么控制控件
- 怎么实现光标到的文本位置下加下划线!
- 国内一个新的VC++6.0汉化版
- 显示一窜字符,想让其中某个子窜的颜色不一样,有什么好办法?
- malloc申请的空间,自动清零吗? 有没有自动清零的 空间申请函数??
- 一个接口程序.要求:一个控制器(client)和一个模拟软件(server)之间实现实时传输数据?求教
- 请问这个函数模板有错么?应该如何改?
- 驱动里面打开modem口的问题。。。郁闷了2天。。。
- MFC,STL,COM,ATL中使用了哪些设计模式?
- 送分!关于在CHtmlView里面OnLButtonDown(UINT nFlags, CPoint point)根本就不执行的问题求教!
- 对话框响应按键
- 控件中的无模式对话框上的Edit框问题!
{
CString strName;
HANDLE hProcessSnap=NULL;
PROCESSENTRY32 pe32={0};
hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap==(HANDLE)-1)
{
::MessageBox(NULL,"查询进程失败!:(","错误提示",MB_OK);
return FALSE;
}
pe32.dwSize=sizeof(PROCESSENTRY32);
if(Process32First(hProcessSnap,&pe32))
{
do
{
if(nID==pe32.th32ProcessID) //判断制定进程号
{
strName.Format("进程编号%d的进程名为:%s",nID,pe32.szExeFile);
AfxMessageBox(strName);
}
}
while(Process32Next(hProcessSnap,&pe32));
}
else
{
::MessageBox(NULL,"出现意外错误!","错误提示",MB_OK);
return FALSE;
}
{
DWORD dwProcID;
HWND hWnd;
}EWS,*LPEWS;//枚举窗口,用于查找指定进程ID的主窗口。
BOOL CALLBACK EnumWindowsProc( HWND hwnd,LPARAM lParam )
{
LPEWS pTemp = reinterpret_cast<LPEWS>( lParam );
DWORD dwProcID;
GetWindowThreadProcessId( hwnd,&dwProcID );
if( dwProcID == pTemp->dwProcID )
{
TCHAR szClassName[256];
GetClassName( hwnd,szClassName,250 );
if( _tcscmp( szClassName,TEXT( "#32770" )) == 0 )
{
pTemp->hWnd = hwnd;
return FALSE;
}
} return TRUE;
}//查找指定进程ID的主窗口。
HWND CServerMonitorDlg::GetMainWnd( DWORD dwProcID )
{
EWS ews;
ews.dwProcID = dwProcID;
ews.hWnd = NULL;
EnumWindows(( WNDENUMPROC )EnumWindowsProc,( LPARAM )&ews ); return ews.hWnd;
}