Проблема в последнем параметре:
winapi.CreateProcess(nil, 'cmd.exe /k', nil, nil, 0, 0, si, nil)
Функция CreateProcess возвращает 5 параметров:
local r, hProcess, hThread, dwProcessId, dwThreadId = winapi.CreateProcess(nil, 'cmd.exe /k', nil, nil, 0, 0, si, nil)
if r > 0 then
--...
winapi.CloseHandle(hProcess)
winapi.CloseHandle(hThread)
end
Насчет взаимодействия, я пока не вижу вариантов как это можно сделать.