प्राप्त करें मैं वर्तमान में चल रही प्रक्रियाओं की एक सूची प्राप्त करने के लिए EnumProcesses फ़ंक्शन का उपयोग कर रहा हूं। चूंकि मेरा एप्लिकेशन उपयोगकर्ता स्थान में चलता है, हालांकि, यह सिस्टम प्रक्रियाओं सहित उपयोगकर्ता के अंतर्गत चल रही प्रक्रियाओं के लिए हैंडल प्राप्त करने में सक्षम नहीं है। क्या कोई और तरीका है जो मुझे इन तक पहुंच प्रदान करेगा? मुझे बस प्रक्रिया के नाम की जरूरत है।पूर्ण चलने की प्रक्रिया सूची (विज़ुअल सी ++)
उत्तर
मुझे अंततः एक समाधान मिला (मेरे आखिरी हताश प्रयास के रूप में यहां पोस्ट करने के बाद आंकड़े)। अगर किसी और को केवल सिस्टम (सभी प्रक्रियाओं) पर चल रहे प्रक्रिया नामों की एक सूची की आवश्यकता है, तो यह आपके लिए यह करेगा।
एक डब्लूएमआई क्वेरी (डब्लूएमआई के इंटरफ़ेस का उपयोग करके काफी संभव है, लेकिन आपको वीबी (स्क्रिप्ट) केंद्रित दस्तावेज़ों का अनुवाद करने की आवश्यकता होगी) यहां सहायता कर सकती है। Win32_Process
कक्षा में आपको जो चाहिए वह है।
हालांकि, मैंने इसका परीक्षण नहीं किया है, मुझे लगता है कि आपको एक ही समस्या मिल जाएगी: एक गैर-प्रशासक केवल अपनी प्रक्रिया देख सकता है।
बस इस जवाब में जोड़ने के लिए, मैं मामलों के लिए इस का निर्माण किया है जब आप देख रहे हैं पूरी सूची के बजाय सिर्फ एक विशेष प्रक्रिया के लिए।
bool FindRunningProcess(AnsiString process) {
/*
Function takes in a string value for the process it is looking for like ST3Monitor.exe
then loops through all of the processes that are currently running on windows.
If the process is found it is running, therefore the function returns true.
*/
AnsiString compare;
bool procRunning = false;
HANDLE hProcessSnap;
PROCESSENTRY32 pe32;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE) {
procRunning = false;
} else {
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hProcessSnap, &pe32)) { // Gets first running process
if (pe32.szExeFile == process) {
procRunning = true;
} else {
// loop through all running processes looking for process
while (Process32Next(hProcessSnap, &pe32)) {
// Set to an AnsiString instead of Char[] to make compare easier
compare = pe32.szExeFile;
if (compare == process) {
// if found process is running, set to true and break from loop
procRunning = true;
break;
}
}
}
// clean the snapshot object
CloseHandle(hProcessSnap);
}
}
return procRunning;
}
मैं यहाँ ध्यान देना चाहिए इस Embarcadero रेड स्टूडियो (सी ++ बिल्डर) @Remy_Lebeau प्रणाली में और प्रति लिखा गया था :: AnsiString अपने VCL/FMX चौखटे में 8 बिट एएनएसआई चरित्र डेटा के लिए एक सी ++ बिल्डर स्ट्रिंग वर्ग है।
आप सभी की जरूरत सिर्फ प्रक्रिया के नाम हैं, तो इस तरह के रूप WTSEnumerateProcesses का उपयोग करें:
WTS_PROCESS_INFO* pWPIs = NULL;
DWORD dwProcCount = 0;
if(WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, NULL, 1, &pWPIs, &dwProcCount))
{
//Go through all processes retrieved
for(DWORD i = 0; i < dwProcCount; i++)
{
//pWPIs[i].pProcessName = process file name only, no path!
//pWPIs[i].ProcessId = process ID
//pWPIs[i].SessionId = session ID, if you need to limit it to the logged in user processes
//pWPIs[i].pUserSid = user SID that started the process
}
}
//Free memory
if(pWPIs)
{
WTSFreeMemory(pWPIs);
pWPIs = NULL;
}
इस पद्धति का उपयोग करने का लाभ यह है कि आप व्यक्तिगत रूप से प्रत्येक प्रक्रिया खोलें और फिर जैसा कि इसके नाम को पुनः प्राप्त करने की जरूरत नहीं है है यदि आप EnumProcesses के साथ गए तो आपको क्या करना होगा, यदि आप अपने उपयोगकर्ता खाते की तुलना में उच्च विशेषाधिकारों के साथ चलने वाली प्रक्रियाओं को खोलने का प्रयास करते हैं तो यह भी काम नहीं करेगा।
इसके अतिरिक्त यह विधि लूप में Process32First()
/Process32Next()
पर कॉल करने से भी अधिक तेज़ है।
WTSEnumerateProcesses
एक कम ज्ञात एपीआई है जो विंडोज एक्सपी के बाद से उपलब्ध है।
- 1. विज़ुअल सी #
- 2. विज़ुअल सी ++
- 3. विज़ुअल सी ++
- 4. विज़ुअल सी #
- 5. विज़ुअल सी ++
- 6. विज़ुअल सी ++
- 7. विज़ुअल सी ++
- 8. विज़ुअल सी #
- 9. विज़ुअल सी ++
- 10. विज़ुअल सी ++ 2010
- 11. 64 बिट विज़ुअल सी
- 12. विज़ुअल सी # 2010 एक्सप्रेस
- 13. विज़ुअल सी ++ एक्सप्रेस 2008
- 14. विज़ुअल सी ++ x64 लेयर
- 15. विज़ुअल सी ++ TODO कार्य सूची तत्व नहीं दिखा रहा है
- 16. (विज़ुअल) सी ++ परियोजना निर्भरता विश्लेषण
- 17. लिंक्ड सूची प्रविष्टि चलने का समय भ्रम की स्थिति
- 18. प्रक्रिया की सूची कैसे प्राप्त करें
- 19. मारने की प्रक्रिया एक्सेल सी #
- 20. माइक्रोसॉफ्ट विज़ुअल सी ++ कोड अनुकूलन
- 21. विज़ुअल सी ++ 'फोर्स शामिल' विकल्प
- 22. विज़ुअल सी ++ संकलक के डिफ़ॉल्ट विकल्प
- 23. विज़ुअल सी ++ में रिएक्टर कार्यक्षमता की कमी क्यों है?
- 24. विज़ुअल स्टूडियो
- 25. विज़ुअल स्रोत सुरक्षित - विज़ुअल स्टूडियो
- 26. बैच प्रक्रिया सूची
- 27. सी ++ डिमन प्रक्रिया की निगरानी कैसे करें?
- 28. विज़ुअल-स्टूडियो 2010 को सी ++ 11
- 29. प्रक्रिया की स्थिति की स्थिति
- 30. jQuery मोबाइल सूची फ़िल्टर व्यवहार की तरह स्वत: पूर्ण
आपको इसमें रुचि हो सकती है: http://stackoverflow.com/q/30604485/560648। –
धन्यवाद, मुझे यहां ध्यान देना चाहिए कि यह एम्बरकेडरो आरएडी स्टूडियो (सी ++ बिल्डर) और प्रति @ रेमी_लेबेउ सिस्टम में लिखा गया था :: AnsiString अपने वीसीएल/एफएमएक्स फ्रेमवर्क में 8 बिट एएनएसआई चरित्र डेटा के लिए एक सी ++ बिल्डर स्ट्रिंग क्लास है। – Phil
निश्चित रूप से उस विवरण को आपके उत्तर में जोड़ने के लायक है! चीयर्स। –