abir janela DOS maximizada fechar janela DOS automaticamente

25/09/2004

Olá
Tudo bem?
Com os comandos abaixo eu abro uma janela DOS em janela modo normal e em tela cheia. O que eu gostaria é que abrisse em janela modo maximizado e que ao sair do programa DOS a janela se fechasse automaticamente.
Será que alguém poderia me ajudar.
Desde já agradeço.
João Schroeder

WinExec(´programa.exe´,Sw_ShowNormal);
WinExec(´programa.exe´,Sw_Maximize);
[size=24:04b6a90eee][/size:04b6a90eee]


Joao_schroeder

Respostas

26/09/2004

Dopi

Crie um Atalho para o seu programa (arquivo PIF) com as configuraçoes que voce quer para a Janela DOS (tela cheia, fechar ao sair, etc...)

Agora use o winexec com o arquivo PIF criado e nao com o EXE...


Responder Citar

26/09/2004

Joao_schroeder

Funcionou, mas são vários programas que tenho de chamar e vou ter de criar vários atalhos.

Se tiver outro jeito dentro de uma linha de comando seria melhor, mas mesmo assim valeu.

Vou fazer assim da maneira que explicaste, até descobrir se existe outra maneira.

Muito obrigado


Responder Citar

27/09/2004

Tiba

... Com os comandos abaixo eu abro uma janela DOS em janela modo normal e em tela cheia. ... WinExec(´programa.exe´,Sw_ShowNormal); WinExec(´programa.exe´,Sw_Maximize);


com o SW_MAXIMIZE vc está abrindo o programa em TELA CHEIA (INTEIRA) ?? ou em Janela Maximizada ?

também estou tentando abrir um programa em Tela Inteira e este comando aqui para mim abre apenas em Janela Maximizada.


Responder Citar

27/09/2004

Dopi

Será que existe algum componente ou chamada a API do Windows para criar atalhos (PIF) ? Se houver, você pode criar os atalhos dinamicamente durante a execução do programa.....

Outra alternativa é abrir o arquivo PIF, substituir a linha de Comando (onde consta o nome do EXE), para cada programa, antes de executar o PIF. Segue abaixo um código que faz + ou - isso.... Usei-o para criar um instalador Windows para meu programa DOS....

program PifPath;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes;

Var FS : TFileStream ;
    Arq : String;
    Buffer : Pchar ;
    Copia, TextIn, TextOut, String1, String2 : String ;
    Erro  : boolean ;
    dif, i, nRead : integer ;


begin

Erro := (ParamCount < 3) ;
Arq  := ParamStr(1) ;

if (not Erro) and (not FileExists(Arq)) then begin
   Writeln(´File: ´+Arq+´ not found...´) ;
   Erro := true ;
end ;

if Erro then
  begin
   writeln ;
   writeln(´This simple programa, just change the Path in a Windows PIF file´) ;
   writeln(´That can be util if you want make a instalattion procedure for DOS programas´) ;
   writeln ;
   writeln(´Usage:  PifPath  FILE.PIF  OldPath  NewPath´) ;
   writeln ;
   writeln(´Will replace all ocurences of OldPath by NewPath´) ;
   writeln(´It is Case-Insensitive.´) ;
   writeln ;
   writeln(´Ex: PifPath C:\DJLOJA D:\DJLOJA´) ;
   writeln ;
 end
else
 begin

   String1 := ParamStr(2) ;
   String2 := ParamStr(3) ;
   dif    := length(String2) - length(String1) ;

   try
      FS := TFileStream.Create(Arq,fmOpenReadWrite);
      FS.Seek(0,soFromBeginning) ;

      GetMem(Buffer, FS.Size + 1) ;
      nRead := FS.Read(Buffer^,FS.Size) ;

      TextIn := ´´ ;
      SetString(TextIn,Buffer,nRead) ;
      Copia := TextIn ;

      TextOut := ´´ ;
      while length(TextIn) > 0 do begin
         i := pos(UpperCase(string1),Uppercase(TextIn)) ;

         if i = 0 then
          begin
            TextOut := TextOut + TextIn ;
            TextIn  := ´´ ;
          end
         else begin
            TextOut := TextOut + copy(TextIn,0,i - 1) + String2 ;
            TextIn  := copy(TextIn,i + length(string1),length(TextIn)) ;

            if dif <> 0 then begin
               i := pos(#0,TextIn) ;
               TextOut := TextOut + copy(TextIn,0,i - 1) ;

               if dif < 0 then
                  TextOut := TextOut + StringOfChar(0,abs(dif))
               else
                  i := i + dif ;

               TextIn := copy(TextIn,i,length(TextIn)) ;
            end ;
         end ;
      end ;

      FS.Size := length(TextOut) ;
      FS.Seek(0,soFromBeginning) ;
      FS.Write(pchar(TextOut)^,length(TextOut)) ;
   finally
      FreeMem(Buffer) ;
      FS.Free ;
   end ;
end ;

end.



Responder Citar

27/09/2004

Joao_schroeder

Olá Tiba
Eu mexi tanto que nem sei o que fiz, mas acho que mostrava tela cheia, porque eu até achava estranho isso. Mas o modo como o Dopi ensinou no início é só colocar nas propriedades do atalho como tela cheia que funciona. Agora eu vou tentar esse último modo.


Responder Citar

28/09/2004

Joao_schroeder

Olá Daniel
Obrigado pelo código. Parece que vai servir, mas eu não entendi como vai ser a sintaxe para
poder ler o arquivo .pif que desejo e colocar a linha de comando que eu desejo que execute.
Eu tentei assim. Foi o que me pareceu na mensagem de erro deste programa.
WinExec(´c:\projetos\PifPath c:\windows\desktop\programa.pif c:\projetos\men000.exe c:\projetos\sc0006.exe´,sw_minimize);
WinExec(´c:\windows\desktop\programa.pif´,Sw_ShowNormal);

Fiquei na dúvida se eu deveria fazer isso. Trocar abaixo o valor de arq.
begin
Erro := (ParamCount < 3) ;
//Arq := ParamStr(1) ;
Arq := ´c:\windows\desktop\programa.pif´ ;

O início do teu código é assim e...

program PifPath;

{$APPTYPE CONSOLE}

uses
SysUtils, Classes;

Var FS : TFileStream ;
Arq : String;
Buffer : Pchar ;
Copia, TextIn, TextOut, String1, String2 : String ;
Erro : boolean ;
dif, i, nRead : integer ;


begin
---------------------------------

o início do meu é assim. Eu não sei criar program, então criei unit. Será que tem algum problema.
E aí tem que colocar interface e implementation.
unit PifPath;

{$APPTYPE CONSOLE}

interface

uses
SysUtils, Classes;

Var FS : TFileStream ;
Arq : String;
Buffer : Pchar ;
Copia, TextIn, TextOut, String1, String2 : String ;
Erro : boolean ;
dif, i, nRead : integer ;

implementation

begin


Responder Citar