Eseguire programma "a tutto schermo" (Windows 11)

di il
8 risposte

Eseguire programma "a tutto schermo" (Windows 11)

Salve,

uso la funzione qui sotto per eseguire un programma con interfaccia espansa a tutto schermo.
Sto avendo problemi con Windows 11. Quando uso il codice, che funziona bene con le versioni precedenti di Windows, l'eseguibile parte ma non è possibile interagire.
Qualcuno ha del codice che funziona anche su Windows 11 ? Utilizzo Delphi XE 10.2.3

grazie

Roberto
// Esempio d'uso: runProcess(percorso_file_eseguibile,'',false,SW_SHOWMAXIMIZED)

function runProcess(const aCmdLine, aParam: String; aWait : boolean; astate:shortint=-1):Boolean;
var
  StartupInfo : TStartupInfo;
  ProcessInfo : TProcessInformation;
  CmdLine     : string;
begin
  if astate=-1 then
    astate:=SW_SHOWNORMAL;
  if aParam = '' then CmdLine := aCmdLine
  else CmdLine := AddQuotes(aCmdLine) + ' ' + AddQuotes(aParam);
  {setup the startup information for the application }
  FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
  with StartupInfo do begin
    cb:= SizeOf(TStartupInfo);
    dwFlags:= STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
    wShowWindow:= astate;
  end;

  Result := CreateProcess(nil,PWideChar(CmdLine), nil, nil, False,
               NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo);

  if Result then
  begin
    if aWait then
       if Result then
       begin
         WaitForInputIdle(ProcessInfo.hProcess, INFINITE);
         WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
       end;

    CloseHandle(ProcessInfo.hProcess);
    CloseHandle(Processinfo.hThread);
  end;
end;

8 Risposte

  • Re: Eseguire programma "a tutto schermo" (Windows 11)

    Mi sembra strana come implementazione... hai provato a riprodurre questa alternativa?

    Ciao!
  • Re: Eseguire programma "a tutto schermo" (Windows 11)

    Ciao. Grazie per la risposta. Quello direi che è codice da eseguire nel programma su cui si vuole espandere interfaccia a tutto schermo (tra l'altro c'e' scritto che viene nascosta anche la taskbar, cosa che io non voglio).
    Io invece vorrei decidere nel programma chiamante se espandere, oppure no, a tutto schermo l'interfaccia del programma che viene richiamato ... A tutto schermo ma senza nascondere la taskbar di windows. Thanks
  • Re: Eseguire programma "a tutto schermo" (Windows 11)

    robnic ha scritto:


    Io invece vorrei decidere nel programma chiamante se espandere, oppure no, a tutto schermo l'interfaccia del programma che viene richiamato ... A tutto schermo ma senza nascondere la taskbar di windows.
    Che io sappia, la via più veloce è quella di usare ShellExecute per lanciare il programma, indicando la costante SW_SHOWMAXIMIZED per lo stile della finestra (vedi questo esempio), anche se "massimizzato" e "a tutto schermo" non sempre sono interpretati allo stesso modo, ma questo dipende anche dal tipo di applicazione di cui stiamo parlando (app Windows, a riga di comando, ecc.).

    Ciao!
  • Re: Eseguire programma "a tutto schermo" (Windows 11)

    Ok, vedo di cambiare usando shellexecute. E' una app. normale, non a linea di comando. Grazie.
  • Re: Eseguire programma "a tutto schermo" (Windows 11)

    Io uso questa, ma con win11 non ho modo di provare:
    FUNCTION EseguiFile(Const NomeName  : String;
                               Parametri : String;
                               ShowCmd   : Integer;//SW_SHOW
                               Attendi   : Boolean;
                               MostraMsg : Boolean) : THandle; Overload //nuova procedura
          VAR ExecInfo : TShellExecuteInfo;
              StrMsg   : String;
        BEGIN
              Result := 0;
    
              With ExecInfo Do
                 Begin
                 FillChar(ExecInfo,SizeOf(ExecInfo),0);
                 cbSize := SizeOf(ExecInfo);
                 fMask := SEE_MASK_NOCLOSEPROCESS Or SEE_MASK_FLAG_DDEWAIT Or SEE_MASK_FLAG_NO_UI;
                 lpFile := PChar(NomeName);
                 lpDirectory := PChar(ExtractFilePath(NomeName));
                 lpParameters := PChar(Parametri);
                 nShow := ShowCmd;
                 //lpVerb := PChar('runas');//come amministratore (usare la proc "LanciaComeAdmin")
                 End;
    
              If ShellExecuteEx(@ExecInfo)
                 Then Begin
                      Result := ExecInfo.hProcess;
                      If Attendi Then
                         WaitForSingleObject(ExecInfo.hProcess,INFINITE);
                      End
                 Else Begin
                      If MostraMsg Then
                         Begin
                         Case GetLastError of
                           ERROR_FILE_NOT_FOUND    : StrMsg := 'The specified file or dir was not found.';
                           ERROR_PATH_NOT_FOUND    : StrMsg := 'The specified path was not found.';
                           ERROR_DDE_FAIL          : StrMsg := 'The DDE transaction failed.';
                           ERROR_NO_ASSOCIATION    : StrMsg := 'There is no application associated with the given filename extension.';
                           ERROR_ACCESS_DENIED     : StrMsg := 'Access denied.';
                           ERROR_DLL_NOT_FOUND     : StrMsg := 'DLL-file not found.';
                           ERROR_CANCELLED         : StrMsg := 'The function prompted the user for the location of the application, but the user cancelled the request.';
                           ERROR_NOT_ENOUGH_MEMORY : StrMsg := 'Not enough memory.';
                           ERROR_SHARING_VIOLATION : StrMsg := 'Sharing violation.';
                           Else StrMsg := 'Unknown Error...';
                         End;
                         Messaggio(StrMsg,mtError,[mbOK]);
                         End;
                     End;
        END;
  • Re: Eseguire programma "a tutto schermo" (Windows 11)

    Grazie 1000, faccio una prova appena possibile.
  • Re: Eseguire programma "a tutto schermo" (Windows 11)

    Salve,
    Su win11 non so, ma ricordo che con WinXP e Win7 bastava usare un form senza bordo e massimizzato per avere l'esecuzione a tutto schermo.
  • Re: Eseguire programma "a tutto schermo" (Windows 11)

    Si, quello non è un problema. Posso farlo nella form del programma eseguito. Adesso pero' la logica è quello di farlo nel programma chiamante. Comunque se non trovo altra soluzione lo faccio nella form principale del programma che viene richiamato. Grazie.
Devi accedere o registrarti per scrivere nel forum
8 risposte