Delphi – 显示来自SW_HIDE状态的控制台应用程序
我在Delphi中有一个控制台应用程序,我从另一个应用程序开始这样:
FillChar(ExecInfo,SizeOf(ExecInfo),0); With ExecInfo Do Begin cbSize := SizeOf(ExecInfo); fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_NOASYNC; Wnd := GetActiveWindow(); lpVerb := PChar('runas'); lpFile := PChar(FsCurrentPath + 'InstallInstall_Elevated.exe'); lpDirectory := PChar(FNew.sBinDir); lpParameters := PChar(sl.DelimitedText); nShow := SW_HIDE End; ShellExecuteEx(@ExecInfo); 在某些情况下,我想让它显示出来(采取SW_SHOWNORMAL状态).我该怎么做? 这样它不会显示: ShowWindow(GetConsoleWindow,SW_SHOW); 即使不是这样的: BringWindowToTop(GetConsoleWindow); SetActiveWindow(GetConsoleWindow); SetForegroundWindow(GetConsoleWindow); ShowWindow(GetConsoleWindow,SW_SHOW) 但它以这种方式表现出来: MessageBox(GetConsoleWindow,PChar(IntToStr(GetConsoleWindow)),PChar(''),MB_SETFOREGROUND); ShowWindow(GetConsoleWindow,SW_SHOW); 但当然我不想要这个消息框. 问题是什么? 解决方法
shell通过CreateProcess()将您通过SHELLEXECUTEINFO提供的信息传递给控制台应用程序,该控制台应用程序在您第一次尝试显示控制台窗口时会遵循该信息.
因此,第一次调用ShowWindow时,传递给ShellExecuteEx()的SW_HIDE生效.在后续调用中,您指定的参数将生效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |