职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 2415|回复: 1

VC根据文件名获取程序进程

[复制链接]
梦段桥 发表于 2007-3-13 20:46 | 显示全部楼层 |阅读模式
VC:如何根据文件名来获取程序进程和窗口句柄的代码 (原创)

根据系统进程中的模块名和运行文件名称的匹配来查找程序进程的代码如下(因为窗口类和窗口名都在变化,所以只能如此了)。
  1. //做系统进程快照
  2. Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  3. //找第一个进程
  4. f = Process32First(Snapshot, &processListStr);
  5. while(f)
  6. {
  7. char *t1="3SMeeting.exe"; //这是运行文件名
  8. if (*processListStr.szExeFile ==*t1){
  9. sprintf( szHello, "ProcessID:%X  EXE:%s",processListStr.th32ProcessID,processListStr.szExeFile);
  10. TextOut(hdc, rt.left, rt.top, szHello,strlen(szHello));
  11. break;
  12. }
  13. f = Process32Next(Snapshot, &processListStr); //继续查找
  14. }
  15. CloseHandle(Snapshot);
复制代码
在VC中获取其它窗口句柄的方法很多,但用FindWindow等要根据窗口类和窗口标题来查找得到窗口句柄,正好碰到窗口类和窗口标题都是不断变化的,下面的代码是我经过实践得到的。
根据窗口名的一部分来获取窗口的句柄,代码如下:
  1. int i;
  2. //以桌面为父窗口来查找第一个主窗口
  3. hWndPrevious   =   GetWindow(GetDesktopWindow(),GW_CHILD);
  4. LPTSTR m_pszExeName;
  5.   while   (IsWindow(hWndPrevious))   
  6.   {
  7.   int i=GetWindowTextLength(hWndPrevious);
  8.   GetWindowText(hWndPrevious,szHello,i);//获取窗口标题
  9. //这里我的窗口中只有下面几个字是不变的
  10.   if (strstr(szHello,"当前用户数:")){
  11.    sprintf( szHello1, "Hwnd:%X  Title:%s",hWndPrevious,szHello);
  12. TextOut(hdc, rt.left, rt.top, szHello1,strlen(szHello1));
  13. break;
  14. //匹配,这时hWndPrevious就是所要找的窗口的句柄
  15.   }
  16.   hWndPrevious   =  GetWindow(hWndPrevious,GW_HWNDNEXT);
  17.   }   
复制代码
欢迎指正。
已经来了吗 发表于 2011-7-17 10:47 | 显示全部楼层
楼上的稍等啦
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-20 10:02 , Processed in 0.150025 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表