Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 通过窗口句柄获取未知进程的名称?_Ruby_Win32ole - Fatal编程技术网

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

Ruby 通过窗口句柄获取未知进程的名称?,ruby,win32ole,Ruby,Win32ole,我需要通过只知道HWND来获得进程的名称 我知道这在win32 api、dl或win32/api中是可能的,但我对那个api太奇怪的参数一无所知。。。我是noob编程 我通过win32/api(不是win32 api)获得HWND,是一个整数,不是十六进制,但我可以很容易地转换它 这是给我句柄的代码 require 'win32/api' include Win32 # Callback example - Enumerate windows EnumWindows = API.new

我需要通过只知道HWND来获得进程的名称

我知道这在win32 api、dl或win32/api中是可能的,但我对那个api太奇怪的参数一无所知。。。我是noob编程

我通过win32/api(不是win32 api)获得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 ')
现在呢


请帮忙

我不知道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);