2015-05-31 60 views
-1

編輯2:對於那些認爲這是重複的人,沒有這不是。這是在不同的背景下,知道如果一個進程正在運行,我不知道我需要轉換,直到在這裏'馬丁'給我的答案:https://stackoverflow.com/a/12637971/4908011C++:如何檢查一個確定的過程是否正在運行

我在Windows 7中使用Visual Studio 2013 Deluxe。我似乎無法找到任何方法來使兼容的x32控制檯應用程序找到一個進程。

我需要知道某個進程是否正在運行,例如, RobloxPlayerBeta.exe

我不斷收到錯誤:

WCHAR* incompatible with const char*

在 'STRCMP(procEntry.szExeFile,名)'

我使用的代碼:

bool ProcessRunning(const char* name) 
{ 
HANDLE SnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 

if (SnapShot == INVALID_HANDLE_VALUE) 
    return false; 

PROCESSENTRY32 procEntry; 
procEntry.dwSize = sizeof(PROCESSENTRY32); 

if (!Process32First(SnapShot, &procEntry)) 
    return false; 

do 
{ 
    if (strcmp(procEntry.szExeFile, name) == 0) 
     return true; 
} while (Process32Next(SnapShot, &procEntry)); 

return false; 
} 
+0

向我們展示一些代碼,否則我們無法幫助您。你如何枚舉正在運行的進程? – Nidhoegger

+0

你能發表一些代碼嗎? – zmbq

+0

增加了一些代碼 – realmaster42

回答

2

好,編譯器消息明確:

PROCESSENTRY32結構,szExeFile是t而你輸入的函數是const char*。你得到的錯誤,因爲strcmp預計char *而不是一個寬字符。你需要或者

  1. 轉換chartchar字符串(例如,參見here
  2. 提供輸入作爲tchar
  3. 用適當的功能比較(見,例如,在here

然而,由於您使用C++,你爲什麼不使用std::wstring(並執行轉換根據this question

+0

如何將其轉換爲tchar?編輯:我是C++新手,我仍然在學習,我希望有人教我如何做這些轉換,並解決這個問題... – realmaster42

+0

@ realmaster42我更新了答案 – martin

+0

呃哦,它談論TCHAR我的問題是WCHAR。編輯:好的,謝謝,我發現了轉換,它的工作。 – realmaster42

3

TCHAR如果您的程序是爲Unicode編譯的,則爲寬字符類型,否則爲窄字符類型。當您使用VS2013創建新項目時,它將設置爲Unicode,因此TCHAR很可能是寬字符類型。最簡單的解決方案是將項目設置更改爲非Unicode編譯。

  1. 右鍵單擊解決方案資源管理器窗口中的項目並選擇「屬性」。
  2. 選擇「配置屬性」,然後選擇「常規」。
  3. 將「字符集」條目從「Unicode」更改爲「未設置」或「多字節」。

當您現在編譯時,TCHAR將設置爲窄字符類型,並且您的代碼應該編譯。

+0

這是一個很好的答案,當寫我的typedef註釋時,我也考慮過這個,但是再次駁斥了這個。這可能是最簡單的解決方案。 – martin

+0

哦,謝謝,這工作也很好,比馬丁快... – realmaster42

相關問題