转:VC:如何根据文件名来获取程序进程和窗口句柄的代码(转载)

因为下面为博客主人原创,代码部分类型不清楚,可查查MSDN.
 
根据系统进程中的模块名和运行文件名称的匹配来查找程序进程的代码如下(因为窗口类和窗口名都在变化,所以只能如此了)。
 
//做系统进程快照
Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
//找第一个进程
f = Process32First(Snapshot, &processListStr);
while(f)
{
 char *t1="3SMeeting.exe"; //这是运行文件名
 if (*processListStr.szExeFile ==*t1){
 sprintf( szHello, "ProcessID:%X  EXE:%s",processListStr.th32ProcessID,processListStr.szExeFile);
 TextOut(hdc, rt.left, rt.top, szHello,strlen(szHello));
break;
 }
 f = Process32Next(Snapshot, &processListStr); //继续查找
}
CloseHandle(Snapshot);
在VC中获取其它窗口句柄的方法很多,但用FindWindow等要根据窗口类和窗口标题来查找得到窗口句柄,正好碰到窗口类和窗口标题都是不断变化的,下面的代码是我经过实践得到的。
根据窗口名的一部分来获取窗口的句柄,代码如下:
 
int i;
//以桌面为父窗口来查找第一个主窗口
hWndPrevious   =   GetWindow(GetDesktopWindow(),GW_CHILD);
 LPTSTR m_pszExeName;
  while   (IsWindow(hWndPrevious))    
  {
  int i=GetWindowTextLength(hWndPrevious);
  GetWindowText(hWndPrevious,szHello,i);//获取窗口标题
//这里我的窗口中只有下面几个字是不变的
  if (strstr(szHello,"当前用户数:")){
   sprintf( szHello1, "Hwnd:%X  Title:%s",hWndPrevious,szHello);
 TextOut(hdc, rt.left, rt.top, szHello1,strlen(szHello1));
 break;
//匹配,这时hWndPrevious就是所要找的窗口的句柄
  }
  hWndPrevious   =  GetWindow(hWndPrevious,GW_HWNDNEXT);
  }    

 

 

转载于:https://www.cnblogs.com/hjdx/archive/2013/02/28/2937804.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值