亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

判斷指定的進程或程序是否存在方法小結(vc等)

2020-01-26 16:22:34
字體:
來源:轉載
供稿:網友
一、判斷指定程序名的進程是否存在
     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.
復制代碼 代碼如下:

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;
}

二、判斷指定進程名的進程是否存在
復制代碼 代碼如下:

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判斷程序調用的外部進程是否結束
復制代碼 代碼如下:

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判斷進程是否存在?比如我想知道記事本是否運行,要用到哪些函數?
復制代碼 代碼如下:

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()中枚舉所有窗口,查找本程序實例
復制代碼 代碼如下:

HWND   oldHWnd   =   NULL;
EnumWindows(EnumWndProc,(LPARAM)&oldHWnd);  //枚舉所有運行的窗口
if(oldHWnd   !=   NULL)
{
AfxMessageBox( "本程序已經在運行了 ");
::ShowWindow(oldHWnd,SW_SHOWNORMAL);   //激活找到的前一個程序
::SetForegroundWindow(oldHWnd);       //把它設為前景窗口
return   false;                       //退出本次運行
}

2、添加EnumWndProc窗口過程函數://添加的標識只運行一次的屬性名
復制代碼 代碼如下:

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);
再次啟動時,先檢查當前存在的所有窗口,如果有標題相同的,則把先前運行的窗口當成當前窗口
我的程序如下:
復制代碼 代碼如下:

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   中加入如下代碼: 
復制代碼 代碼如下:

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;  
        }

創建一個全局的互斥量,每次啟動時檢查是否存在。
復制代碼 代碼如下:

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;
}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲免费电影在线观看| 欧美成aaa人片在线观看蜜臀| 日韩一区二区三区在线播放| 国产美女精品视频免费观看| 91福利视频在线观看| 久久天天躁狠狠躁夜夜爽蜜月| 国产婷婷色综合av蜜臀av| 日本免费久久高清视频| 国产精品久久网| 亚洲成人激情在线观看| 日韩亚洲一区二区| 日韩中文在线中文网三级| 国产主播精品在线| 国产精品福利在线观看网址| 国产精品一区av| 欧美电影免费观看高清| 欧美成人国产va精品日本一级| 欧美精品18videos性欧美| 欧美性xxxxxxxxx| 最好看的2019年中文视频| 久久久精品亚洲| 欧美日韩国产中字| 97不卡在线视频| 77777少妇光屁股久久一区| 亚洲美女av在线播放| 亚洲欧洲一区二区三区在线观看| 91欧美精品午夜性色福利在线| 疯狂蹂躏欧美一区二区精品| 国产亚洲精品91在线| 成人免费观看49www在线观看| 久久电影一区二区| 亚洲免费伊人电影在线观看av| 亚洲男人的天堂在线播放| 正在播放国产一区| 国产精品专区一| 欧美精品九九久久| 国产精品青青在线观看爽香蕉| 九九精品在线播放| 亚洲精品国产福利| 亚洲综合成人婷婷小说| 国产精品久久久久久婷婷天堂| 欧美裸体男粗大视频在线观看| 丝袜一区二区三区| 91影院在线免费观看视频| 国产精品十八以下禁看| 国产免费一区二区三区香蕉精| 中日韩午夜理伦电影免费| 日本亚洲欧洲色| 亚洲理论在线a中文字幕| 米奇精品一区二区三区在线观看| 亚洲免费中文字幕| 97精品国产aⅴ7777| 亚洲欧美另类国产| 精品久久久久久中文字幕大豆网| 久久免费观看视频| 性欧美亚洲xxxx乳在线观看| 亚洲一区二区黄| 91情侣偷在线精品国产| 久久久久久久久久亚洲| 91最新国产视频| 国模吧一区二区三区| 欧美一级视频在线观看| 久久免费成人精品视频| 久久视频免费在线播放| 色诱女教师一区二区三区| 精品国产视频在线| 国产主播欧美精品| 久久国产加勒比精品无码| 好吊成人免视频| 亚洲国产精品va在线看黑人| 国产一区二区三区欧美| 日韩成人av在线播放| 日韩中文第一页| 丝袜情趣国产精品| 精品丝袜一区二区三区| 日韩av电影手机在线观看| 精品国产一区二区三区久久久狼| 日韩av综合网| 欧美—级a级欧美特级ar全黄| 国产一区二区丝袜| 精品国产美女在线| 国产亚洲欧洲在线| 国产精品入口夜色视频大尺度| 欧美电影免费观看高清| 91免费看片在线| 国产欧美精品xxxx另类| 91九色视频在线| 亚洲欧美制服中文字幕| 亚洲国产福利在线| 欧美黄色成人网| 欧美在线国产精品| 精品国产老师黑色丝袜高跟鞋| 欧美精品亚州精品| 亚洲综合第一页| 成人啪啪免费看| 日本久久精品视频| 欧美精品在线网站| 国产精品成人免费电影| 日韩国产高清污视频在线观看| 97精品国产97久久久久久| 最新中文字幕亚洲| 色偷偷综合社区| 亚洲韩国欧洲国产日产av| 久久亚洲精品成人| 精品国产户外野外| 久久久精品视频成人| 国产自摸综合网| 热久久这里只有精品| 国产精品自产拍在线观看中文| 国产精品久久久91| 国产一区二区三区在线播放免费观看| 国产精品十八以下禁看| 欧美一级视频免费在线观看| 亚洲国产古装精品网站| 精品久久久久久久久久久| 精品久久久久久中文字幕一区奶水| 97国产精品久久| 成人网在线观看| 亚洲成人久久电影| 美女扒开尿口让男人操亚洲视频网站| 亚洲黄页网在线观看| 91免费高清视频| 福利视频一区二区| 国产三级精品网站| 在线观看视频99| 久久免费国产精品1| 97av视频在线| 成人在线视频福利| 亚洲欧美日韩一区二区三区在线| 精品久久久久久久久久久久久久| 亚洲精品一区中文字幕乱码| 日韩人在线观看| 日韩精品一区二区视频| 91社区国产高清| 国产剧情久久久久久| 国产在线日韩在线| 色多多国产成人永久免费网站| 欧美日韩午夜剧场| 97成人精品区在线播放| 91免费电影网站| 欧美激情综合色| 久久久人成影片一区二区三区| 亚洲精品成人久久久| 国产精品av在线| 疯狂做受xxxx欧美肥白少妇| 中国日韩欧美久久久久久久久| 欧美日韩一区二区三区在线免费观看| 北条麻妃在线一区二区| 尤物yw午夜国产精品视频明星| 精品国产一区二区三区久久狼黑人| 国产91精品久久久久| 欧美激情啊啊啊| 日韩在线免费视频观看| 日韩经典一区二区三区| 懂色av一区二区三区| 午夜精品久久久久久久久久久久久| 中文亚洲视频在线| 亚洲色图综合久久| 97在线视频免费| 欧美成人精品不卡视频在线观看| 性色av一区二区三区免费| 欧美日韩裸体免费视频| 大胆欧美人体视频| 97人人模人人爽人人喊中文字|