title: Finding process name by PID
body: <p>I'm using the ctypes module and WinAPI to find the process name by PID.
  I've been looking at <a href="https://stackoverflow.com/a/865201/249552">this</a> example written in C/C++ and it's working except for the fact that the size of my <code>szExeFile</code> is 0 for every process. Am I missing something while using this API?</p>
  
  <pre><code>def find_pid_with_name(process_name: str):
      entry = PROCESSENTRY32()
      entry.dwSize = sizeof(PROCESSENTRY32)
  
      snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, None)
  
      if Process32First(snapshot, byref(entry)) == TRUE:
          while Process32Next(snapshot, byref(entry)) == TRUE:
              print(libc.wcslen(entry.szExeFile))
  
      CloseHandle(snapshot)
  </code></pre>
  
  <p>My structure definition for <code>PROCESSENTRY32</code>:</p>
  
  <pre><code>MAX_PATH = 260
  class PROCESSENTRY32(Structure):
      _fields_ = [
          ("dwSize", c_ulong),
          ("cntUsage", c_ulong),
          ("th32ProcessID", c_ulong),
          ("th32DefaultHeapID", POINTER(c_ulong)),
          ("th32ModuleId", c_ulong),
          ("cntThreads", c_ulong),
          ("th32ParentProcessID", c_ulong),
          ("dwFlags", c_ulong),
          ("szExeFile", c_wchar * MAX_PATH)
      ]
  </code></pre>
  
  <p>And my function definitions:</p>
  
  <pre><code>CreateToolhelp32Snapshot = windll.kernel32.CreateToolhelp32Snapshot
  CreateToolhelp32Snapshot.argtypes = [c_ulong, POINTER(c_ulong)]
  CreateToolhelp32Snapshot.restype = c_ulong
  
  libc = CDLL("msvcrt")
  libc.wcslen.argtypes = [c_wchar_p]
  
  Process32First = windll.kernel32.Process32First
  Process32First.argtypes = [c_ulong, POINTER(PROCESSENTRY32)]
  Process32First.restype = c_ubyte
  
  Process32Next = windll.kernel32.Process32Next
  Process32Next.argtypes = [c_ulong, POINTER(PROCESSENTRY32)]
  Process32Next.restype = c_ubyte
  </code></pre>