转: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); }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步