判断指定的进程或程序是否存在方法
分类: Windows program 2011-06-27 15:14 112人阅读 评论(0) 收藏 举报
一、判断指定程序名的进程是否存在
BOOL EnumWindows( WNDENUMPROC lpEnumFunc, // pointer to callback function LPARAM lParam // application-defined value);
The EnumWindows function enumerates all top-level windows on the screen by passing the handle to each window, in turn, to an application-defined callback function. EnumWindows continues until the last top-level window is enumerated or the callback function returns FALSE.
view plain
BOOL CALLBACK IpEnumFunc(HWND hwnd,LPARAM lParam)
{
char wndName[100];
::GetWindowText(hwnd,wndName,sizeof(wndName));
if(wndName!="")
{
if(strcmp(wndName,name1)==0)
{
WndHnd=hwnd;
flag=1;
}
}
return 1;
}
二、判断指定进程名的进程是否存在
view plain
DWORD GetProcessidFromName(LPCTSTR name)
{
PROCESSENTRY32 pe;
DWORD id=0;
HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe.dwSize=sizeof(PROCESSENTRY32);
if(!Process32First(hSnapshot,&pe))
return 0;
while(1)
{
pe.dwSize=sizeof(PROCESSENTRY32);
if(Process32Next(hSnapshot,&pe)==FALSE)
break;
if(strcmp(pe.szExeFile,name)==0)
{
id=pe.th32ProcessID;
break;
}
}
CloseHandle(hSnapshot);
return id;
}
如果返回值不为零,则存在,否则不存在。
三、VC判断程序调用的外部进程是否结束
view plain
PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
si.wShowWindow=SW_HIDE;
si.dwFlags=STARTF_USESHOWWINDOW;
bool fRet=CreateProcess(NULL,str.GetBuffer(str.GetLength()),NULL,FALSE,NULL,NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW,NULL,NULL,&si,&pi);
///判断
DWORD ExitCode;
ExitCode=STILL_ACTIVE;
while(ExitCode==STILL_ACTIVE)
{
GetExitCodeProcess(pi.hProcess,&ExitCode);
}
四、VC判断进程是否存在?比如我想知道记事本是否运行,要用到哪些函数?
view plain
enProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE,aProcesses[i]);
// 取得特定PID的进程名
if (hProcess )
{
if ( EnumProcessModules(hProcess,&hMod,sizeof(hMod), &cbNeeded))
{
GetModuleBaseName( hProcess, hMod,szProcessName,sizeof(szProcessName));
//将取得的进程名与输入的进程名比较,如相同则返回进程PID
if(!stricmp(szProcessName, InputProcessName))
{
CloseHandle(hProcess);
return aProcesses[i];
}
}
}//end of if (hProcess)
}//end of for
//没有找到相应的进程名,返回0
CloseHandle(hProcess);
return 0;
}
也可以枚举得到所有进程的应用程序名,然后和知道应用程序名比较判断。
五、实现程序只运行一次的方法
实现程序只运行一次的方法很多,但是原理都是一样的,就是运行第一次的时候设置一个标记,每次运行的时候检查该标记,如果有就说明已经运行了。
具体实现:
1、在程序初始化的时候 (InitInstance()) 枚举所有的窗口,查找本程序的实例是否存在
2、在主窗口初始化的时候在本窗口的属性列表中添加一个标记,以便程序查找.
部分关键代码 :
1、在App的InitInstance()中枚举所有窗口,查找本程序实例
view plain
HWND oldHWnd = NULL;
EnumWindows(EnumWndProc,(LPARAM)&oldHWnd); //枚举所有运行的窗口
if(oldHWnd != NULL)
{
AfxMessageBox( "本程序已经在运行了 ");
::ShowWindow(oldHWnd,SW_SHOWNORMAL); //激活找到的前一个程序
::SetForegroundWindow(oldHWnd); //把它设为前景窗口
return false; //退出本次运行
}
2、添加EnumWndProc窗口过程函数://添加的标识只运行一次的属性名
view plain
CString g_szPropName = "Your Prop Name "; //自己定义一个属性名
HANDLE g_hValue = (HANDLE)1; //自己定义一个属性值
BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam)
{
HANDLE h = GetProp(hwnd,g_szPropName);
if( h == g_hValue)
{
*(HWND*)lParam = hwnd;
return false;
}
return true;
}
3、在主窗口的 OnInitDialog()中添加属性 //设置窗口属性
SetProp(m_hWnd,g_szPropName,g_hValue);
再次启动时,先检查当前存在的所有窗口,如果有标题相同的,则把先前运行的窗口当成当前窗口
我的程序如下:
view plain
HWND hWnd_Exist;
hWnd_Exist=::GetDesktopWindow();
hWnd_Exist=::GetWindow(hWnd_Exist,GW_CHILD);
for(;;)
{
if(hWnd_Exist==NULL)
{
break;
}
char s[256];
memset(s,0,256);
::SendMessage(hWnd_Exist,WM_GETTEXT,255,(LONG)s);
if(strstr(s, "****** ")!=NULL)
break;
hWnd_Exist=::GetWindow(hWnd_Exist,GW_HWNDNEXT);
}
if(hWnd_Exist != NULL)
{
::ShowWindow(hWnd_Exist,SW_SHOWNORMAL);
::SetForegroundWindow(hWnd_Exist);
exit(0);
}
声明一个全局 CMutex 变量:
CMutex mutexApp(FALSE, _T( "VPOS2000Server ")); //用此互斥量阻止多个实例
在你的 CWinApp 类的重载函数: InitInstance 中加入如下代码:
view plain
if (!mutexApp.Lock(1))
return FALSE;
::CreateMutex(NULL, TRUE, m_pszExeName);
if(ERROR_ALREADY_EXISTS == GetLastError())
{
CWnd* pPrevHwnd = CWnd::GetDesktopWindow()-> GetWindow(GW_CHILD);
while(pPrevHwnd)
{
if(::GetProp(pPrevHwnd-> GetSafeHwnd(), m_pszExeName))
{
if(pPrevHwnd-> IsIconic())
{
pPrevHwnd-> ShowWindow(SW_RESTORE);
}
pPrevHwnd-> SetForegroundWindow();
pPrevHwnd-> GetLastActivePopup()-> SetForegroundWindow();
return FALSE;
}
pPrevHwnd = pPrevHwnd-> GetWindow(GW_HWNDNEXT);
}
TRACE( "Could not fond frevious instance main window ! ");
return FALSE;
}
创建一个全局的互斥量,每次启动时检查是否存在。
view plain
BOOL CRTDBApp::OnlyOneInstance()
{
if(::CreateMutex(NULL, TRUE, "onlyone ") == NULL )
{
TRACE0( "CreateMutex error. ");
return FALSE;
};
if( ::GetLastError() == ERROR_ALREADY_EXISTS) {
CWnd* pPrevWnd = CWnd::FindWindow(NULL, "onlyonehwnd ");
if(pPrevWnd)
{
if( pPrevWnd-> IsIconic())
pPrevWnd-> ShowWindow(SW_RESTORE);
pPrevWnd-> SetForegroundWindow();
pPrevWnd-> GetLastActivePopup()-> SetForegroundWindow();
return FALSE;
}
};
return TRUE;
} 相关推荐
C++判断进程是否存在
判断进程是否存在,使用遍历所有进程方法,查看所找的进程信息
C++ 判断进程是否存在
一、判断指定程序名的进程是否存在 BOOL EnumWindows( WNDENUMPROC lpEnumFunc, // pointer to callback function LPARAM lParam // application-defined value); The EnumWindows function enumerates all top-level windows on the screen by passing the handle to each window, in turn
PCB Layout总结
PCB Layout作为硬件设计中的一个环节,也是很重要的一个环节;在硬件电路设计合理的情况下,他其实是影响性能的一个绝对重要的指标。现在很多的PCB Layout工程师都是按照硬件工程师或者PI SI工程师给出的约束规则来完成布局布线的,这些也就是俗称的 “拉线工”。他们重复而机械的完成一块块PCB设计,一段时间设计后,他们中的一些或许已经有了这样的一些经验:哪些要做等长,哪些要走粗、哪些要平...
C/C++ 判断进程是否存在
用于检查指定名称的进程是否存在。它通过遍历系统中的所有进程,对比输入的进程名(不区分大小写)与快照中的进程名,以判断是否存在指定进程。需要注意的是,当前进程需要具备足够的权限才能打开其他进程的快照。在实际运行时,确保以管理员权限运行或具备足够的权限以避免访问限制。函数获取第一个进程信息。在遍历过程中,将进程名转换为小写,并与输入的进程名进行比较。如果存在与输入名称匹配的进程,则返回。如果存在该进程,输出"存在";函数创建一个进程相关的快照句柄。函数:该函数接受一个进程名(,表示未找到匹配的进程。
【数据挖掘】心跳信号分类预测 之 特征工程 —— 学习笔记(三)
三、特征工程 3.1 看书 常言道,“巧妇难为无米之炊”。在 ML 中,数据和特征将作“米”,模型和算法则为“妇”。若无数量充足的数据、良好表示的特征,再强大的模型也难以得到满意的结果 (garbage in,garbage out)。对于 ML 问题,数据和特征往往决定了结果的上限,而模型、算法的选择及优化则是在逐步接近该上限。 特征工程,顾名思义,是对原始数据进行一系列工程处理,将其提炼为特征,作为输入供算法和模型使用。在本质上,特征工程是一个表示和展现数据的过程。在实际中,特征工程旨在去除...
Anki小白必看:手把手教你打造高颜值个性化笔记模板(附Leaflyer模板下载)
本文为Anki新手提供详细的个性化笔记模板设计指南,从基础配置到高级定制技巧,帮助用户打造高效记忆系统。特别推荐Leaflyer模板下载,通过视觉优化和功能强化,显著提升学习体验和记忆效率。
我寫的進程處理類---方便新建,結束,和查看進程!
/*------------------------------------ Author: Ted--Nefarian Zhu Date: 2011/04/20 03:30 Version: V1.00 All rights reserved ! Life
秦时明月6.2魔改版_从零到一部署指南_含安卓客户端配置与GM后台直通
本文提供《秦时明月》6.2魔改版从零开始的完整部署指南。详细讲解CentOS服务器环境准备、服务端文件部署与安装、关键端口开放及进程验证。重点涵盖安卓客户端APK的IP修改与重签名方法,并介绍了GM后台工具的访问与使用,助你快速搭建并管理专属游戏服务器。
Ubuntu 24.04 极速部署 Dify:从零到一的保姆级实践
本文详细介绍了在Ubuntu 24.04系统上快速部署Dify的完整教程,从环境准备到部署验证,再到深度优化和安全加固,提供了一套保姆级的实践指南。通过使用Docker和Docker Compose,结合国内镜像源加速,帮助用户高效完成Dify的安装和配置,确保系统稳定运行。
TI单芯片毫米波雷达1642demo代码走读(一)
今天我们来实际看下代码。 首先使用CCS软件导入demo工程,工程有两个,一个是ARM的工程,工程名是mmw_mss_16xx;另一个是DSP的工程,工程名为mmw_dss_16xx。我们将这两个工程的主函数打开,分别位于mss_main.c和dss_main.c文件中。 先看mss的主函数,代码如下。我为每行代码都加了中文注释和自己的理解。 int main (void) { Task_Params taskPara...
判断进程是64bit还是32bit
#pragmaregion Includes#include<stdio.h>#include <windows.h>#pragmaendregionBOOL DoesWin32MethodExist(PCWSTR pszModuleName, PCSTR pszMethodName){HMODULE hModule = GetModuleHandle(pszModule...
大模型系列——Ollama-OCR 简明教程
Llama 3.2-Vision 是一个多模态大型语言模型,有 11B 和 90B 两种大小,能够处理文本和图像输入以生成文本输出。该模型在视觉识别、图像推理、图像描述和回答与图像相关的问题方面表现出色,在多个行业基准测试中优于现有的开源和闭源多模态模型。在本文中,我将介绍如何调用由 Ollama 运行的 Llama 3.2-Vision 11B 建模服务并使用实现图像文本识别 (OCR) 功能。
判断进程是否存在的几种方法
判断进程是否存在的几种方法 参考 判断进程是否存在的几种方法 注意 通过 pid 去判断一个程序是否还在运行并不是很妥当,因为: 因为内核会在进程消亡时回收进程ID,这个 ID 可能被分配给其他进程,所以随着时间的推移,相同的进程ID可能指向不同的进程。 一个进程 ID 存在,但是该进程是一个僵尸进程(例如,一个已经死亡,但其父进程还没有执行 wait() 来获得其终止状态的进程) 方法一:发送 0 号信号法 当向一个进程发送 0 号信号(所谓的 null 信号)时,该信号并不会被真的发送,但
【RT-DETR有效改进】全新的SOATA轻量化下采样操作ADown(轻量又涨点,附手撕结构图)
本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的ADown模块来改进我们的Conv模块,其中YOLOv9针对于这个模块并没有介绍,只是在其项目文件中用到了,我将其整理出来用于我们的YOLOv8的项目,经过实验我发现该卷积模块(作为下采样模块)首先可以大幅度降低参数值,其次其精度上也有很高的提升,同时本文的内容目前网络上并无其它人总结(也是最新发布的,可以说BUff是集满了)大家可以尝试以下在自己数据集上的效果。
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
python判断一个进程是否存在的3种方法
在python中,如何判断一个进程是否存在呢?可以使用Popen执行shell命令判断进程是否存在,或者检查/proc 目录下是否存在进程相对应的目录,最佳的方法是向进程发送信号0, 下面分别介绍 1. Popen 使用subprocess模块的Popen执行shell 命令,ps -ef | grep 126055 会筛选出进程执行命令中带有126055 的进程信息。 import subprocess pid = 126055 p = subprocess.Popen('ps -ef | grep.
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
QT使用QProcess类,判断某个进程是否存在
前言 需求是判断win系统中,Qt 拉起某个程序,如果程序不存在则拉起,存在则实现程序进程切换,如果要进行这样的逻辑操作,就必须要判断程序的进程是在存在,是否已经启动成功!下面是实现代码。 实现代码 bool IsProcessExist(const QString &processName) { QProcess process; process.start("tasklist"); process.waitForFinished(); QByteArray r
lwip-2.0.3
lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
C#判断当前启动程序进程是否存在
System.Threading.Mutex mutex;//注意,此变量要定义为成员变量,而不是局部变量 bool CheckMultiInstance() { bool createdNew = true; mutex = new System.Threading.Mutex(true, "_TEST_Mutex_",
java 根据指定进程名判断是否存在
我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1如何在Java中判断指定进程是否存在 在软件开发中,判断指定进程是否存在的功能是一个常见需求。本文将教你如何使用Java实现这一功能,适合刚入行的新手理解。整个过程可以分成几个简单的步骤。...
VC判断指定程序是否运行,杀掉指定进程
#include /* 名称: IsRunning 描述: 判断某进程是否存在 参数: lpszProcessFileName[in]:Pointer to a null-terminated string specifying the name of the executable file for the process 返回: If the proc
6920



被折叠的 条评论
为什么被折叠?



