通过窗口句柄获取未知进程的名称?

时间:2012-03-07 01:18:18

标签: ruby win32ole

我只需要知道HWND

就可以获得进程的名称

我知道win32api或dl或win32 / api是可能的,但我不知道那个api太奇怪的参数...我是noob编程

我通过win32 / api(不是win32api)获得HWND,是一个整数,而不是十六进制,但我可以轻松转换它...

这是给我处理的代码......

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 个答案:

答案 0 :(得分:1)

我不认识Ruby,但是因为你无论如何直接调用WinAPI,我可以用C给你一个例子。假设你已经有一个名为HWND范围的hWnd(错误处理省略了为简洁起见:

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);