jplj,
Cita:
Empezado por jplj
...Volver a mostrar una ventana abierta con ShellExecute..."traer al frente" el documento abierto, y no tener que "abrir" una nueva copia...En principio cualquier tipo de archivo que suela ser empleado para almacenar información...
|
Revisa este código:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellAPI, ComCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
public
end;
const
FileName : Array[0..3] of String = ('Nelson.txt', 'Nelson.xlsx', 'Nelson.pdf', 'Nelson.jpg');
FilePrg : Array[0..3] of String = (' - NotePad',
' - Microsoft Excel',
' - Adobe Reader',
' - Windows Photo Viewer');
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
i : Integer;
begin
for i := Low(FileName) to High(FileName) do
ListBox1.Items.Add(FileName[i]);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
WindowHandle : THandle;
WindowName : String;
begin
WindowName := FileName[ListBox1.ItemIndex] + FilePrg[ListBox1.ItemIndex];
WindowHandle := FindWindow(nil,PChar(WindowName));
if SetForegroundWindow(WindowHandle) then
ShowWindow(WindowHandle, SW_SHOWNORMAL)
else
ShellExecute(0, nil, PChar(FileName[ListBox1.ItemIndex]),'', '',SW_SHOWNORMAL);
end;
end.
El código anterior en Delphi 7 bajo Windows 7 Professional x32,
permite abrir los archivos contenidos en el TListBox con su aplicación por default en Windows por medio de ShellExecute y en caso de ser seleccionados nuevamente colocar la ventana de la aplicación en el tope del Z-Order (Si esta activa) o abrirla nuevamente si esta fue previamente cerrada, en resumen:
Se abre una sola ventana por archivo seleccionado.
Nota: Es fundamental que se coloque el nombre correcto de la aplicación (
Como aparece en la ventana de la misma), en el formato:
" - ApplicationName",
si lo anterior no es correcto la aplicación se abrirá tantas veces como sea llamada.
Revisa esta información:
Espero sea útil
Nelson.