CreateProcess钩子添加CommandLine

我有一个项目是添加一些特定的标志(命令行)到Chrome浏览器,问题是我正在通过创build一个新的Chrome快捷方式,我想要执行的标志这样做。

在最后的日子里,这个解决方法变得太肤浅了,我被要求做更深入的事情。 在Windowsregistry,我没有find任何好的解决scheme, 总是有人运行Chrome时添加此标志,所以我开始考虑挂钩CreateProcess到浏览器,并检查是否即将运行的过程是铬,然后我添加lpCommandLine属性中的标志。

我知道挂钩到资源pipe理器是一个相当“侵入”的解决scheme,但这变得很有帮助,因为我有一些其他的实现,我正在推迟这个项目,挂钩将帮助我完成所有的工作。

我得到了钩子的工作,我尝试了很多方式来添加命令行,当铬find,但没有成功…现在(我试过至less8种不同的解决scheme)我的绕道function是:

function InterceptCreateProcess(lpApplicationName: PChar; lpCommandLine: PChar; lpProcessAttributes, lpThreadAttributes: PSecurityAttributes; bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: Pointer; lpCurrentDirectory: PChar; const lpStartupInfo: STARTUPINFO; var lpProcessInformation: PROCESS_INFORMATION): BOOL; stdcall; var Cmd: string; begin Result:= CreateProcessNext(lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation); if (POS(Chrome, UpperCase(String(lpApplicationName))) > 0) then begin Cmd:= ' --show-fps-counter'; lpCommandLine:= PChar(WideString(lpCommandLine + Cmd)); ShowMessage(lpCommandLine); end; end; 

“–show-fps-counter”是我试图添加没有成功的命令行。

我的Delphi版本是XE4。

好吧,这是一个非常明显的事情…我需要添加参数BEFORE调用CreateProcessNext(原始功能)! 所以,干脆做:

  if (POS(Chrome, UpperCase(String(lpApplicationName))) > 0) then begin lpCommandLine:= PChar(lpCommandLine + ' --show-fps-counter'); end; Result:= CreateProcessNext(lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation); 

作品…请注意,我只是倒序,以改变lpCommandLine。 感谢所有的参与者,我仍然会考虑这里所说的。