您可以創建一個小型(非gui)啓動器應用程序,爲您調用新程序(我知道,這就是您稱之爲硬解決方案),然後在任務調度器上調度此啓動器。
這個啓動器應用程序將不得不創建de過程(CreateProcess function),然後從pID獲取窗口句柄...使用窗口句柄,您可以使用SetForegroundWindow來執行您所需的操作,或調用其他函數最大化等。
既然你標記了delphi,我發佈了一個可能的delphi實現。
function WindowFromPID(pID: Cardinal; VisibleWindow: Boolean): Cardinal;
type
TProcData = record
pID: Cardinal;
pHandle: Cardinal;
VisibleWindow: Boolean;
end;
var
wPData: TProcData;
function EnumProc(Handle: HWND; var pProcData: TProcData): Bool; stdcall;
var pID: DWORD;
begin
Result := True;
if pProcData.VisibleWindow then
if not IsWindowVisible(Handle) then
Exit;
GetWindowThreadProcessId(Handle, @pID);
if pID = pProcData.pID then begin
if GetWindow(Handle, GW_OWNER) = 0 then begin
pProcData.pHandle := Handle;
Result := false;
end;
end;
end;
begin
wPData.pHandle := 0;
wPData.pID := pID;
wPData.VisibleWindow := VisibleWindow;
EnumWindows(@EnumProc, Integer(@wPData));
while (wPData.pHandle = 0) do begin
Sleep(50);
EnumWindows(@EnumProc, Integer(@wPData));
end;
Result := wPData.pHandle;
end;
procedure RunAndGetWindowHandle(const FileName, Params: String; const WindowState: Word): Cardinal;
var
SUInfo: TStartupInfo;
CmdLine: String;
ProcInfo: TProcessInformation
begin
CmdLine := '"' + Filename + '"' + Params;
FillChar(SUInfo, SizeOf(SUInfo), #0);
with SUInfo do begin
cb := SizeOf(SUInfo);
dwFlags := StartF_UseShowWindow;
wShowWindow := WindowState;
end;
if not CreateProcess(Nil, PChar(CmdLine), nil, nil, False, Create_New_Console Or Normal_Priority_Class, nil, PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo) then
raise Exception.Create('Error running process');
if WaitForSingleObject(ProcInfo.hProcess, 50) <> WAIT_TIMEOUT then
raise Exception.Create('Error running process!');
CloseHandle(ProcInfo.hThread);
while Result = 0 do begin
Sleep(50);
Result := WindowFromPID(ProcInfo.dwProcessId, true);
end;
end;
...
var WindowHandle: Cardinal;
begin
WindowHandle := RunAndGetWindowHandle("powerpnt.exe", " /s", SW_SHOWNORMAL);
SetForegroundWindow(WindowHandle);
end;
希望這就是你需要的..抱歉,如果不是。
最好的問候。
我不確定你在這裏找什麼。我會建議[SetForegroundWindow](http://msdn.microsoft.com/en-us/library/windows/desktop/ms633539%28v=vs.85%29.aspx),但是在#1之後。我推測你已經發布了delphi標籤,因爲你正在尋找一種編碼解決方案,而這很可能除非你能夠做一個COM解決方案。 – Glenn1234