cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1643|回复: 4

咨询高人基于LabWindows进程搜索函数的嵌入

[复制链接]
发表于 2007-4-22 20:29:27 | 显示全部楼层 |阅读模式
咨询高人基于LabWindows进程搜索函数的嵌入
我应用LabWindows做毕业设计,做进程管理系统.....我不知道用哪个函数能搜索进程并把搜索的进程在Textbox中显示......
望高手指点指点......
发表于 2007-4-23 12:04:53 | 显示全部楼层
在CVI中不知道有没有这样的函数,估计您得用系统的API进行调用了!可以去MSDN查查哪个函数能实现!
发表于 2007-4-23 12:05:32 | 显示全部楼层
在网上找了一个VC的;
原贴地址如下:
http://maxsblog.bokee.com/viewdiary.13304642.html



在VC中枚举系统所有进程+通过进程获取对应窗口 分类:时来运转之网络转转转需要引用的头文件:Tlhelp32.h

用到的API函数:CreateToolhelp32Snapshot、Process32First、Process32Next

代码如下:

// 枚举所有进程
void CEnumProcDlg::EnumProc(void)
{
PROCESSENTRY32 proc;
HANDLE snap = NULL;
CString procInfo;
BOOL theloop;
char exeName[] = ("qq.exe");
char ss[100] = {'\0'};
int i = 0;

snap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0); //获取进程快照句柄
proc.dwSize = sizeof(PROCESSENTRY32);
theloop = Process32First(snap, &proc); //查找第一个进程
while(theloop)
{
  procInfo.Format("进程名:%s  进程ID:%d   父进程ID:%d",proc.szExeFile,proc.th32ProcessID,proc.th32ParentProcessID);
  ChgString(proc.szExeFile, ss);//自定义函数,字符转化为小写
  if(strcmp(exeName,ss) == 0 )
  {
   HANDLE g_hQQ = OpenProcess(PROCESS_ALL_ACCESS,TRUE,proc.th32ProcessID); //获取进程句柄
//   if(g_hQQ!=NULL)
//    MessageBox("OK","OK",MB_OK); //输出提示信息
  }
  //if(strcmp("QQ.EXE",proc.szExeFile) == 0 )
  // MessageBox("OK","OK",MB_OK);
  procInfo.Format("%s",proc.szExeFile);
  m_ListCtrl.InsertItem(i,procInfo);
  procInfo.Format("%d",proc.th32ProcessID);
  m_ListCtrl.SetItem(i,1,LVIF_TEXT,procInfo,0,0,0,0);
  procInfo.Format("%d",proc.th32ParentProcessID);
  m_ListCtrl.SetItem(i,2,LVIF_TEXT,procInfo,0,0,0,0);
  theloop = Process32Next(snap,&proc); //查找下一个进程
  i++;
}
m_ListCtrl.SetRedraw(TRUE);
}

/////////////////another tech////////////////////////

可以啊,玫举窗口句柄,然后用窗口句柄去取得进程ID,比较得到的进程ID是不是你的进程ID,如果是,那么呢就得到了窗口句柄,如果不是,继续玫举。

那,这样:

DWORD dwProcessID; //你的进程号

VOID GetWindowHandle()
{
EnumWindows( EnumWindowsProc, (LPARAM)NULL);
}

static BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
DWORD pid = 0;

// 取得窗口的进程号
if (!GetWindowThreadProcessId( hwnd, &pid ))
{
return TRUE; // 继续玫举
}

// 查找窗口在任务列表中的对应项
if(dwProcessID == pid)
return FALSE;

return TRUE; // 继续玫举
}
////////////////通过进程获取对应窗口///////////////////

我通过CreateToolhelp32Snapshot遍历了整个进程,我想通过某进程的     HANDLE获取其对应主窗体的HWND,如何办?请高手指教。      
  ---------------------------------------------------------------      
      
  EnumWindows(EnumWindowsProcGetWndTitle,0);                         //得到所有窗口列表      
      
  void     EnumWindowsProcGetWndTitle(hWnd,lparam)      
  {      
                        DWORD     ProcID     =     0;      
                        GetWindowThreadProcessId(hWnd,&ProcID);      
                        if(ProcID==YourProcID)//如果窗口的processid等于你的ID      
                        {      
                                                HWND     pWnd     =     GetParent(hWnd);      
                                                while(GetParent(pWnd)!=NULL)//得到父窗口的句柄      
                                                                        pWnd     =     GetParent(pWnd);      
                                                //ok         pWnd     就是主窗口了。      
                        }      
  }   


你可以通过这个链接引用该篇文章:http://maxsblog.bokee.com/tb.b?diaryId=13304642
 楼主| 发表于 2007-4-24 12:26:14 | 显示全部楼层
呵呵,谢谢您帮忙找的资料
发表于 2007-4-25 20:46:58 | 显示全部楼层
用汽车上的座位当沙发!

牛比
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-4-7 15:25 , Processed in 0.462095 second(s), 6 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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