用windows API编写一个程序(B程序)去监测另外一个程序(A程序)是否运行,如果它(A程序)没有运行不做任何操作,如果它(A程序)运行,从它(A程序)运行的时候开始计时,等到它(A程序)退出时获得他的运行的时间?A程序是固定不变的一个简单示例程序。
小弟刚学这个windows编程,想了好久没有一点思路,各位大虾帮帮忙啊,最好能有可以运行代码。就当练练手吧哈
小弟刚学这个windows编程,想了好久没有一点思路,各位大虾帮帮忙啊,最好能有可以运行代码。就当练练手吧哈
http://www.codeproject.com/KB/threads/getprocesstimes.aspx
GetLastError()== ERROR_FILE_NOT_FOUND
WaitForSingleObject
http://download.csdn.net/source/2621894 这个源代码中用到过 可以看下
中的函数
OpenProcess 打开程序的句柄
WaitForSingleObject 等待OpenProcess打开程序句柄的结束上面我给那个例子中有OpenProcess的用法 比如结束程序 修改内存等
void CXxxxDlg:OnTimer(UINT nIDEvent)
{
HWND hwnd =::FindWindow(NULL,"你要测试的窗口");
if(hwnd )
{
开始计时代码!!
}
else
{
KillTimer(nIDEvent);
结束计时的代码,并显示结束时间
}
CDialog::OnTimer(nIDEvent);
}
PROCESSENTRY32 pe32;
memset(&pe32,0,sizeof(pe32));
pe32.dwSize=sizeof(pe32);
HANDLE hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap==INVALID_HANDLE_VALUE)
{
printf("create toolhelp32snapshot error\n");
return -1;
}
BOOL bmore= Process32First(hProcessSnap,&pe32);
while(bmore)
{
if(!strcmp(pe32.szExeFile,s))
{
i=pe32.th32ProcessID;
break;
}
bmore=Process32Next(hProcessSnap,&pe32);
}
CloseHandle(hProcessSnap);
加个 while 加个 sleep
当然 2楼 的方法最好
{
CString strExeName(lpsz);
strExeName.MakeLower();
HANDLE handle=::CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
PROCESSENTRY32 Info ;
Info.dwSize = sizeof(PROCESSENTRY32);
if(::Process32First(handle,&Info))
{
while(::Process32Next(handle,&Info)!=FALSE)
{
CString ss;
ss=Info.szExeFile;
ss.MakeLower();
if(ss.Compare(strExeName)==0)
{
#ifdef WINCE_HD
CloseToolhelp32Snapshot(handle);
#else
CloseHandle(handle);
#endif
return Info.th32ProcessID;
}
}
#ifdef WINCE_HD
CloseToolhelp32Snapshot(handle);
#else
CloseHandle(handle);
#endif
return FALSE;
}
}