मेरे पास सी ++ में एक ऐप है जिसे यूनिकोड वर्ण सेट और मल्टीबाइट का उपयोग करने की आवश्यकता है। क्या इसको मदद देने का कोई तरीका है? मुझे ध्यान दें कि मल्टीबाइट पर मेरा प्रोजेक्ट होना आवश्यक है और मुझे इस यूनिकोड फ़ंक्शन का उपयोग करने की भी आवश्यकता है

मैंने पूरे इंटरनेट पर खोज की है और कुछ भी अच्छा नहीं मिला है।

DWORD GetProcId(const wchar_t *procName) // EXPERIMENTING
{
  DWORD procId = 0;
  HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if (hSnap != INVALID_HANDLE_VALUE) {
    PROCESSENTRY32 procEntry;
    procEntry.dwSize = sizeof(procEntry);

    if (Process32First(hSnap, &procEntry)) {
      do {
        if (!_wcsicmp(procEntry.szExeFile, procName)) // Error is here
        {
          procId = procEntry.th32ProcessID;
          break;
        }
      } while (Process32Next(hSnap, &procEntry));
    }
  }
  CloseHandle(hSnap);
  return procId;
}

procEntry.szExeFile केवल यूनिकोड वर्ण सेट पर संकलित होगा लेकिन मुझे मल्टीबाइट का उपयोग करने के लिए एप्लिकेशन की आवश्यकता है

0
Jinxedgrimmm 28 मार्च 2020, 11:19

1 उत्तर

सबसे बढ़िया उत्तर

आपका फ़ंक्शन इनपुट के रूप में यूनिकोड स्ट्रिंग लेता है, इसलिए आपको एपीआई के यूनिकोड संस्करण का स्पष्ट रूप से उपयोग करना चाहिए, न कि टीसीएचएआर संस्करण जिसे आप उपयोग करने का प्रयास कर रहे हैं, उदाहरण के लिए:

DWORD GetProcId(const wchar_t *procName)
{
    DWORD procId = 0;
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hSnap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32W procEntry;
        procEntry.dwSize = sizeof(procEntry);
        if (Process32FirstW(hSnap, &procEntry))
        {
            do
            {
                if (!_wcsicmp(procEntry.szExeFile, procName))
                {
                    procId = procEntry.th32ProcessID;
                    break;
                }
            }
            while (Process32NextW(hSnap, &procEntry));
        }
        CloseHandle(hSnap);
    }
    return procId;
}
2
Remy Lebeau 28 मार्च 2020, 10:03