Chamar calculadora do Windows, Como Faço?

20/03/2006

Olá!!

Gostaria de saber como faco para chamar a calculadora do Windows
a partir da versao 98 atraves do meu aplicativo.

Grato.


Developerb

Respostas

20/03/2006

Paullsoftware

WinExc(´C:\Windows\Calc.exe´,SW_NORMAL);

acho que isso resolve! :wink:


Responder Citar

20/03/2006

Paulocesar1301

Declare ShellAPI no seu Uses e:

ShellExecute(0, nil, PChar(´CALC.EXE´), nil, nil, SW_ShowNORMAL);



Responder Citar

20/03/2006

Developerb

Gostaria de saber como faco para chamar a calculadora somente um VEZ e
definir o local onde ela devera aparecer.
Tipo a minha ideia seria na frente do Aplicativo estila( ShowModal ) e centralizado na tela.


Responder Citar

20/03/2006

Martins

Gostaria de saber como faco para chamar a calculadora somente um VEZ e definir o local onde ela devera aparecer. Tipo a minha ideia seria na frente do Aplicativo estila( ShowModal ) e centralizado na tela.


Trabalhe com o Handle da Janela da Calculadora.


Responder Citar

20/03/2006

Adriano Santos

procedure TForm1.Button1Click(Sender: TObject);
var
  H : HWND;
begin
  H := FindWindow(nIl, ´Calculadora´);
  if H > 0 then //Calculadora jah aberta
    SetForegroundWindow(H)
  else
  begin
    WinExec(´C:\WINNT\SYSTEM32\CALC.EXE´, SW_SHOWNORMAL);
    SetForegroundWindow(h);
  end;

end;



Responder Citar

20/03/2006

Adriano Santos

Você ainda pode fazer algo mais legal, posicionar a calculadora perto do mouse, veja um exemplo simples:

procedure TForm1.Button1Click(Sender: TObject);
var
  H : HWND;
  Pt: TPoint;
  rRect : TRect;
begin
  GetCursorPos(Pt);
  H := FindWindow(nil, ´Calculadora´);
  if H > 0 then //Calculadora jah aberta
  begin
    //pega o retângulo da janela
    GetWindowRect(h, rRect);
    //move a janela para a posição do mouse
    MoveWindow(H, Pt.X, Pt.Y, rRect.Right - rRect.Left, rRect.Bottom - rRect.Top, True);
    //puxa pra frente a calculadora
    SetForegroundWindow(h);
  end
  else
  begin
    //Abre
    WinExec(´C:\WINNT\SYSTEM32\CALC.EXE´, SW_SHOWNORMAL);
    //Atualiza a variaval H com o handle da janela (agora aberta)
    H := FindWindow(nil, ´Calculadora´);
    //pega o retângulo da janela
    GetWindowRect(h, rRect);
    //move a janela para a posição do mouse
    MoveWindow(H, Pt.X, Pt.Y, rRect.Right - rRect.Left, rRect.Bottom - rRect.Top, True);
    //puxa pra frente a calculadora
    SetForegroundWindow(h);
  end;
end;




Responder Citar

20/03/2006

Developerb

Esta dando erro de Execucao na seguinte linha....

var
  H: HWND;
>>Erro: CONSTANT or Type Indetifier Expected



Responder Citar

20/03/2006

Martins

Esta dando erro de Execucao na seguinte linha....
var
  H: HWND;
>>Erro: CONSTANT or Type Indetifier Expected


Mas deveria dar erro algum, verifique se vc tem a unit [b:c37ed0a432]Windows[/b:c37ed0a432] declarada no [b:c37ed0a432]uses[/b:c37ed0a432]

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
....

procedure TForm1.Button1Click(Sender: TObject);
var
  H : HWND;
  Pt: TPoint; 
  rRect : TRect; 
begin 
  GetCursorPos(Pt);
  H := FindWindow(nil, ´Calculadora´); 
  if H > 0 then //Calculadora jah aberta 
  begin 
    //pega o retângulo da janela 
    GetWindowRect(h, rRect); 
    //move a janela para a posição do mouse 
    MoveWindow(H, Pt.X, Pt.Y, rRect.Right - rRect.Left, rRect.Bottom - rRect.Top, True); 
    //puxa pra frente a calculadora 
    SetForegroundWindow(h);
  end
  else 
  begin 
    //Abre a Calculadora sem precisar do caminho, ela já está no path do windows. 
    WinExec(´CALC.EXE´, SW_SHOWNORMAL);
    //Atualiza a variaval H com o handle da janela (agora aberta) 
    H := FindWindow(nil, ´Calculadora´); 
    //pega o retângulo da janela 
    GetWindowRect(h, rRect); 
    //move a janela para a posição do mouse 
    MoveWindow(H, Pt.X, Pt.Y, rRect.Right - rRect.Left, rRect.Bottom - rRect.Top, True); 
    //puxa pra frente a calculadora 
    SetForegroundWindow(h); 
  end; 
end;


Boa sorte!!!


Responder Citar

20/03/2006

Adriano Santos

[quote:44a26fab80=´DeveloperB´]Esta dando erro de Execucao na seguinte linha....
var
  H: HWND;
>>Erro: CONSTANT or Type Indetifier Expected


Mas deveria dar erro algum, verifique se vc tem a unit [b:44a26fab80]Windows[/b:44a26fab80] declarada no [b:44a26fab80]uses[/b:44a26fab80]

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
....

procedure TForm1.Button1Click(Sender: TObject);
var
  H : HWND;
  Pt: TPoint; 
  rRect : TRect; 
begin 
  GetCursorPos(Pt);
  H := FindWindow(nil, ´Calculadora´); 
  if H > 0 then //Calculadora jah aberta 
  begin 
    //pega o retângulo da janela 
    GetWindowRect(h, rRect); 
    //move a janela para a posição do mouse 
    MoveWindow(H, Pt.X, Pt.Y, rRect.Right - rRect.Left, rRect.Bottom - rRect.Top, True); 
    //puxa pra frente a calculadora 
    SetForegroundWindow(h);
  end
  else 
  begin 
    //Abre a Calculadora sem precisar do caminho, ela já está no path do windows. 
    WinExec(´CALC.EXE´, SW_SHOWNORMAL);
    //Atualiza a variaval H com o handle da janela (agora aberta) 
    H := FindWindow(nil, ´Calculadora´); 
    //pega o retângulo da janela 
    GetWindowRect(h, rRect); 
    //move a janela para a posição do mouse 
    MoveWindow(H, Pt.X, Pt.Y, rRect.Right - rRect.Left, rRect.Bottom - rRect.Top, True); 
    //puxa pra frente a calculadora 
    SetForegroundWindow(h); 
  end; 
end;


Boa sorte!!![/quote:44a26fab80]

É isso mesmo Martins, precisa da unit Windows, só isso.


Responder Citar

20/03/2006

Developerb

Acertei o problema referente ao tipo da variavel declarada....
Coloquei o seguinte >>
var
  H : THandle


Funcionou corretamente, fica agradecido pela ajuda de todos...


Responder Citar

20/03/2006

Adriano Santos

Acertei o problema referente ao tipo da variavel declarada.... Coloquei o seguinte >>
var
  H : THandle
Funcionou corretamente, fica agradecido pela ajuda de todos...


Tranquilo, ambos os tipos estão declarados em Windows, com uma particularidade:

[quote:0c111734ad=´Declaração de THandle na unit Windows´]
THandle = System.THandle;
{Note que o THandle está vindo da unit System}
[quote:0c111734ad=´Declaração do THandle na unit System´]
THandle = LongWord;
[/quote:0c111734ad]
[/quote:0c111734ad]

Já HWND é declarada desta forma também na Unit Windows:

[quote:0c111734ad=´Declaração de HWND na unit Windows´]
HWND = type LongWord;
[/quote:0c111734ad]

É isso ai :D


Responder Citar

20/03/2006

Martins

[quote]Acertei o problema referente ao tipo da variavel declarada.... Coloquei o seguinte >>
var
  H : THandle
Funcionou corretamente, fica agradecido pela ajuda de todos...


Tranquilo, ambos os tipos estão declarados em Windows, com uma particularidade:

[quote:5f61936e8d=´Declaração de THandle na unit Windows´]
THandle = System.THandle;
{Note que o THandle está vindo da unit System}
[quote:5f61936e8d=´Declaração do THandle na unit System´]
THandle = LongWord;
[/quote:5f61936e8d]
[/quote:5f61936e8d]

Já HWND é declarada desta forma também na Unit Windows:

[quote:5f61936e8d=´Declaração de HWND na unit Windows´]
HWND = type LongWord;
[/quote:5f61936e8d]

É isso ai :D[/quote:5f61936e8d]

É isso aí Adriano, informação é sempre bem vinda, ainda mais para a galera q está iniciando.

Valew.


Responder Citar

04/05/2006

Carlos_tedex

Caro Adriano Santos,

Essa dica sobre ´posicionar a calculadora perto do mouse´ me ajudou p/ posicionar a calculadora em um ponto XY da tela que eu precisava... valew...


Responder Citar

04/05/2006

Adriano Santos

Caro Adriano Santos, Essa dica sobre ´posicionar a calculadora perto do mouse´ me ajudou p/ posicionar a calculadora em um ponto XY da tela que eu precisava... valew...


Que isso, é um prazer ajudar os camaradas...

As ordens sempre.


Responder Citar