Получить имя неизвестного процесса по дескриптору окна? - PullRequest
0 голосов
/ 07 марта 2012

Мне нужно получить имя процесса, зная только HWND

Я знаю, что это возможно с win32api или dl или win32 / api, но я ничего не знаю об этих слишком странных параметрах этогоapi ... я программирую noob

я получаю HWND с помощью win32 / api (не win32api), это целое число, а не шестнадцатеричное, но я могу легко его преобразовать ...

Это код, который дает мне ручку ...

require 'win32/api'
include Win32

# Callback example - Enumerate windows
EnumWindows     = API.new('EnumWindows', 'KP', 'L', 'user32')
GetWindowText   = API.new('GetWindowText', 'LPI', 'I', 'user32')
EnumWindowsProc = API::Callback.new('LP', 'I'){ |handle, param|
  buf = "\0" * 200
  GetWindowText.call(handle, buf, 200);

  if (!buf.index(param).nil?)
    puts "window was found: handle #{handle}"
    0 # stop looking after we find it
  else
    1
  end
}

EnumWindows.call(EnumWindowsProc, 'the title here ')

и что теперь?

пожалуйста, помогите!

1 Ответ

1 голос
/ 07 марта 2012

Я не знаю Ruby, но так как вы все равно вызываете WinAPI напрямую, я могу привести вам пример на C. Предполагая, что у вас уже есть HWND с именем hWnd scoped (обработка ошибок для краткости опущена):

HANDLE hProcess;
DWORD  dwPID;
WCHAR  lpFilename[MAX_PATH];

GetWindowThreadProcessId(hWnd, &dwPID)
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwPID);
GetModuleFileNameEx(hProcess, NULL, lpFilename, _countof(lpFilename));
CloseHandle(hProcess);
...