Moin.
Ich starte aus meiner Anwendung heraus bedingt eine weitere von mir geschriebene Kommandozeilenanwendung. Anwendung 1 soll auf die Beendigung der Kommandozeilenanwendung warten. Das habe ich so gelöst:
Delphi-Quellcode:
FillChar(ExecuteInfo, SizeOf(ExecuteInfo), 0);
ExecuteInfo.cbSize := SizeOf(TShellExecuteInfo);
with ExecuteInfo do
begin
fMask := SEE_MASK_NOCLOSEPROCESS;
wnd := Application.Handle;
lpFile := PChar('App.exe');
// lpParameters := PChar('-t');
lpDirectory := PWideChar(ExtractFilePath(Application.ExeName) + '..\App\');
nShow := SW_SHOWMAXIMIZED;
end;
if ShellExecuteEx(@ExecuteInfo) then
begin
WaitForSingleObject(ExecuteInfo.hProcess, INFINITE);
GetExitCodeProcess(ExecuteInfo.hProcess, ExitCode);
...
...
Die Kommandozeilenanwendung brauch Adminrechte und fordert diese an. Das Maifest sieht so aus:
Code:
<?
xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-
com:
asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="Private.Unknown.MySampleApp"
type="
Win32"/>
<trustInfo xmlns="urn:schemas-microsoft-
com:
asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="
win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
</assembly>
Prinzipiell funktioniert das auch alles. Nur kommt der Benutzerkontensteuerungsdialog, der die Adminrechte anfordert nicht automatisch in den Vordergrund. Er blinkt nur unten in der Taskleiste vor sich hin und man muss in mit einem Klick in den Vordergrund holen.
Wie kann ich erreichen das er automatisch im Vordergrund erscheint wenn ich meine Kommandozeilenanwendung aus meiner anderen Anwendung heraus starte?