Задача: получить PID процесса, которому принадлежит foreground-окно.
Получаю хэндл окна через GetForegroundWindow, и передаю в GetWindowThreadProcessId.
Однако в некоторых случаях вызов завершается ошибкой "Invalid window handle."
Происходит это в случае если из конему запустить фар, сделать deattach, и снова attach.
Ниже lua-скрипт для воспроизведения:
local ffi = require"ffi"
local C = ffi.C
ffi.cdef[[
//https://msdn.microsoft.com/library/ms633505
HWND GetForegroundWindow(void);
//https://msdn.microsoft.com/library/ms633522
DWORD GetWindowThreadProcessId(HWND hWnd,LPDWORD lpdwProcessId);
]]
local hWnd = C.GetForegroundWindow()
local lpdwProcessId = ffi.new("DWORD[1]",1)
if 0==C.GetWindowThreadProcessId(hWnd,lpdwProcessId) then
far.Message("","",nil,"we")
else
far.Message(lpdwProcessId[0])
end
Хотелось бы понять в чём ошибка.
Originally reported on Google Code with ID 1879
Reported by
anton.sinitsinon 2015-01-22 19:21:32