在系统中检测指定的窗口是否已经打开,检查某进程是否存在
2011-04-22 15:23
281 查看
LPCTSTR s_AppName = _T("ABCDEFG");//欲查找的线程ID.(SetProp函数指定的项)
UINT s_AppMagic = 1024;
//防止重复打开窗口
HANDLE handSemp = CreateSemaphore(NULL , 0 , 1 , s_AppName);//创建基于指定名字的信号量
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
HWND hwndPre = ::GetWindow(::GetDesktopWindow(), GW_CHILD);/*如果指定窗口是父窗口,则获得的是在Z序顶端的子窗口的句柄,否则为NULL。*/
while(::IsWindow(hwndPre))
{
if (::GetProp(hwndPre, s_AppName) == (HANDLE)s_AppMagic)/*如果属性表中包含了给定的字符串,那么返回值为相关的数据句柄。否则,返回值为NULL。 */
{
//此处即已在系统中找到了指定线程
if (::IsIconic(hwndPre)) //确定给定窗口是否是最小化(图标化)的窗口
{
::ShowWindow(hwndPre, SW_RESTORE);/*激活并显示窗口。SW_RESTORE:如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。 */
}
::SetForegroundWindow(hwndPre);/*将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。*/
}
hwndPre = GetWindow(hwndPre, GW_HWNDNEXT);
}
}
检查某进程是否存在:
PROCESSENTRY32 *info = new PROCESSENTRY32;
// 在使用这个结构之前,先设置它的大小
info->dwSize = sizeof(PROCESSENTRY32 );
CString proName = {"devenv.exe"};
HANDLE handlePro = NULL; //结束进程句柄
// 给系统内的所有进程拍一个快照
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
printf(" CreateToolhelp32Snapshot调用失败! /n");
return -1;
}
// 遍历进程快照,轮流显示每个进程的信息
BOOL bMore = ::Process32First(hProcessSnap, info);
BOOL terminate = FALSE;
while( bMore != FALSE)
{
if(proName.CompareNoCase(info->szExeFile) == 0)
{
handlePro=OpenProcess(PROCESS_TERMINATE, FALSE, info->th32ProcessID);
if (NULL == handlePro)
{
break;
}
//结束进程
terminate = TerminateProcess(handlePro, 0);
}
bMore = Process32Next(hProcessSnap, info);
}
::CloseHandle(hProcessSnap); //关闭该进程
return 1;
UINT s_AppMagic = 1024;
//防止重复打开窗口
HANDLE handSemp = CreateSemaphore(NULL , 0 , 1 , s_AppName);//创建基于指定名字的信号量
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
HWND hwndPre = ::GetWindow(::GetDesktopWindow(), GW_CHILD);/*如果指定窗口是父窗口,则获得的是在Z序顶端的子窗口的句柄,否则为NULL。*/
while(::IsWindow(hwndPre))
{
if (::GetProp(hwndPre, s_AppName) == (HANDLE)s_AppMagic)/*如果属性表中包含了给定的字符串,那么返回值为相关的数据句柄。否则,返回值为NULL。 */
{
//此处即已在系统中找到了指定线程
if (::IsIconic(hwndPre)) //确定给定窗口是否是最小化(图标化)的窗口
{
::ShowWindow(hwndPre, SW_RESTORE);/*激活并显示窗口。SW_RESTORE:如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。 */
}
::SetForegroundWindow(hwndPre);/*将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。*/
}
hwndPre = GetWindow(hwndPre, GW_HWNDNEXT);
}
}
检查某进程是否存在:
PROCESSENTRY32 *info = new PROCESSENTRY32;
// 在使用这个结构之前,先设置它的大小
info->dwSize = sizeof(PROCESSENTRY32 );
CString proName = {"devenv.exe"};
HANDLE handlePro = NULL; //结束进程句柄
// 给系统内的所有进程拍一个快照
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
printf(" CreateToolhelp32Snapshot调用失败! /n");
return -1;
}
// 遍历进程快照,轮流显示每个进程的信息
BOOL bMore = ::Process32First(hProcessSnap, info);
BOOL terminate = FALSE;
while( bMore != FALSE)
{
if(proName.CompareNoCase(info->szExeFile) == 0)
{
handlePro=OpenProcess(PROCESS_TERMINATE, FALSE, info->th32ProcessID);
if (NULL == handlePro)
{
break;
}
//结束进程
terminate = TerminateProcess(handlePro, 0);
}
bMore = Process32Next(hProcessSnap, info);
}
::CloseHandle(hProcessSnap); //关闭该进程
return 1;
相关文章推荐
- 在系统中检测指定的窗口是否已经打开,检查某进程是否存在
- 判断android系统中是否有指定apk存在,并打开
- js如何检测打开窗口是否存在的三个方法?
- Android检测系统中是否存在某进程
- VB-检测指定的进程是否存在
- 利用脚本检查个进程是否存在
- 判断指定的进程或程序是否存在方法
- delphi中如何查看某个程序在进程中是否已经存在
- 检测进程是否存在
- python定时检查某个进程是否已经关闭的方法
- 关于 WPF 在主窗口中用多线程打开的子窗口关闭后进程还存在,这个问的题的解决方法。
- 无法打开内核设备“\\.\Global\vmx86”: 系统找不到指定的文件。是否在安装 VMware Workstation 后重新引导?
- delphi中如何查看某个程序在进程中是否已经存在
- c/c++ 检查指定目录是否存在,不存在则创建改目录
- 检查进程是否存在
- 依据名称检测进程是否存在
- winform 检查窗口是否已打开
- Mysql 插入记录时检查记录是否已经存在,存在则更新,不存在则插入记录SQL
- JAVA检测指定的进程是否在运行
- 定时检测Memcached进程是否存在,若不存在自动启动它