Fórum Erro no WINEXEC #291908
16/08/2005
0
No meu sistema, há uma parte onde eu chamo programas externos, funciona beleza na parte de windows, como calculadora,,, config de video ou algum outro aplicativo windows, porem preciso que ele chame tbem um programinha no DOS, mas nao ta dando certo. tenho o atalho dele no meu computador, mas se eu coloco o endereco que ta neste atalho ele nao entra, bom, começa a entrar, aparece duas frases falando que o programa é feito em clipper e fecha a tela do DOS, mas nao entra no programa. E com o atalho ele entra normal !!! :( ,, estou usando o winexec, será que alguem ja teve este problema ?
Geisonc
Curtir tópico
+ 0
Responder
Posts
16/08/2005
Geisonc
pesquisando por outro nome, encontrei e consegui fazer com este codigo.
///
Declare dentro de
interface
Uses
ShellApi
Public
procedure ExecutaApp(Nome,State,NomeExec,Path:Pchar;Estado:Integer
implementation
procedure TFrmPrin.ExecutaApp(Nome,State,NomeExec,Path:Pchar;Estado:Integer);
//
// Executa um aplicativo somente se ele não estiver aberto, caso
// contrário apenas chama-o
//
// Valores para Estdo: SW_SHOWNORMAL Janela em modo normal
// SW_MAXIMIZE Janela maximizada
// SW_MINIMIZE Janela minimizada
// SW_HIDE Janela Escondida
//
// Veja um exemplo de como chamar a calculadora do Windows
//
// ExecutaApp(´CALCULADORA´,´OPEN´,´CALC.EXE´,´C:\WINDOWS´,8);
//
// Onde ´CALCULADORA´ é o nome da janela do aplicativo
//
var
TheWindows: HWND;
begin
theWindows := FindWindow(NIL,Nome);
if TheWindows <> 0 then
begin
SetForegroundWindow(TheWindows)
end
else
begin
if (Estado > 3) or (Estado < 1) then
begin
Estado := 1;
end;
ShellExecute(Application.Handle,State,NomeExec,NIL,Path,Estado);
end;
end;
este é o Procedimento ...
depois é vc criar um botão e com evento OnClick associando o evento ao procedimento ex:
procedure TFrmPrin.CalculadoraClick(Sender: TObject);
begin
ExecutaApp(´CALCULADORA´,´OPEN´,´CALC.EXE´,´C:\WINDOWS´,8);
end;
///
Declare dentro de
interface
Uses
ShellApi
Public
procedure ExecutaApp(Nome,State,NomeExec,Path:Pchar;Estado:Integer
implementation
procedure TFrmPrin.ExecutaApp(Nome,State,NomeExec,Path:Pchar;Estado:Integer);
//
// Executa um aplicativo somente se ele não estiver aberto, caso
// contrário apenas chama-o
//
// Valores para Estdo: SW_SHOWNORMAL Janela em modo normal
// SW_MAXIMIZE Janela maximizada
// SW_MINIMIZE Janela minimizada
// SW_HIDE Janela Escondida
//
// Veja um exemplo de como chamar a calculadora do Windows
//
// ExecutaApp(´CALCULADORA´,´OPEN´,´CALC.EXE´,´C:\WINDOWS´,8);
//
// Onde ´CALCULADORA´ é o nome da janela do aplicativo
//
var
TheWindows: HWND;
begin
theWindows := FindWindow(NIL,Nome);
if TheWindows <> 0 then
begin
SetForegroundWindow(TheWindows)
end
else
begin
if (Estado > 3) or (Estado < 1) then
begin
Estado := 1;
end;
ShellExecute(Application.Handle,State,NomeExec,NIL,Path,Estado);
end;
end;
este é o Procedimento ...
depois é vc criar um botão e com evento OnClick associando o evento ao procedimento ex:
procedure TFrmPrin.CalculadoraClick(Sender: TObject);
begin
ExecutaApp(´CALCULADORA´,´OPEN´,´CALC.EXE´,´C:\WINDOWS´,8);
end;
Responder
Gostei + 0
16/08/2005
Rjun
Você poderia usar o ShellExecute e executar o proprio atalho.
ShellExecute(Application.Handle, nil, PChar(´C:\Documents and Settings\usuario\Desktop\Aplicacao.lnk´), nil, nil, SW_SHOWNORMAL);
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)