LiveCapture *MainWindow::OnInjectTrigger(uint32_t PID, const QList<EnvironmentModification> &env, const QString &name, CaptureOptions opts) { if(!PromptCloseLog()) return NULL; QString logfile = m_Ctx->TempLogFilename(name); void *envList = RENDERDOC_MakeEnvironmentModificationList(env.size()); for(int i = 0; i < env.size(); i++) RENDERDOC_SetEnvironmentModification(envList, i, env[i].variable.toUtf8().data(), env[i].value.toUtf8().data(), env[i].type, env[i].separator); uint32_t ret = RENDERDOC_InjectIntoProcess(PID, envList, logfile.toUtf8().data(), &opts, false); RENDERDOC_FreeEnvironmentModificationList(envList); if(ret == 0) { RDDialog::critical(this, tr("Error kicking capture"), tr("Error injecting into process %1 for capture.\n\nCheck diagnostic log in " "Help menu for more details.") .arg(PID)); return NULL; } LiveCapture *live = new LiveCapture(m_Ctx, "", ret, this, this); ShowLiveCapture(live); return live; }
uint32_t RenderManager::ExecuteAndInject(const QString &exe, const QString &workingDir, const QString &cmdLine, const QList<EnvironmentModification> &env, const QString &logfile, CaptureOptions opts) { // if (m_Remote == null) { void *envList = RENDERDOC_MakeEnvironmentModificationList(env.size()); for(int i = 0; i < env.size(); i++) RENDERDOC_SetEnvironmentModification(envList, i, env[i].variable.toUtf8().data(), env[i].value.toUtf8().data(), env[i].type, env[i].separator); uint32_t ret = RENDERDOC_ExecuteAndInject(exe.toUtf8().data(), workingDir.toUtf8().data(), cmdLine.toUtf8().data(), envList, logfile.toUtf8().data(), &opts, false); RENDERDOC_FreeEnvironmentModificationList(envList); return ret; } /* else { } */ }