mylovexinping 发表于 2007-4-22 20:29:27

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

咨询高人基于LabWindows进程搜索函数的嵌入
我应用LabWindows做毕业设计,做进程管理系统.....我不知道用哪个函数能搜索进程并把搜索的进程在Textbox中显示......
望高手指点指点......

cpubbs 发表于 2007-4-23 12:04:53

在CVI中不知道有没有这样的函数,估计您得用系统的API进行调用了!可以去MSDN查查哪个函数能实现!

cpubbs 发表于 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 = {'\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

mylovexinping 发表于 2007-4-24 12:26:14

呵呵,谢谢您帮忙找的资料

easons 发表于 2007-4-25 20:46:58

用汽车上的座位当沙发!

牛比
页: [1]
查看完整版本: 咨询高人基于LabWindows进程搜索函数的嵌入