Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Duda acerca de ShellExecute (https://www.clubdelphi.com/foros/showthread.php?t=17050)

Chupi 21-12-2004 16:12:32

Duda acerca de ShellExecute
 
Hola me gustaria saber si podría poner un codigo para que se ejecute el ShellExecute para todos los usuarios, aver que me explico, un ejemplo:

ShellExecute ('C:\Documents and Settings\Administrador' ) ;

Donde Administrador puede estar el nombre de otro usuario y me pregunto si ay un comando para que funcione con todos, algo asi como ¨users¨, no se mejor dejo de decir burradas y me ayudais, GRACIAS.;)

PDT: eta es mi 1ª pregunta aqui ;)

defcon1_es 21-12-2004 16:37:14

Hola,
¿pero qué fichero quieres ejecutar exactamente?

ShellExecute sirve para realizar acciones sobre ficheros,
¿qué es lo que quieres hacer?

PD: Ayuda de MS sobre ShellExecute
http://msdn.microsoft.com/library/de...ellexecute.asp

Chupi 21-12-2004 18:46:25

quiero crear un boton que me lleve a un directorio que se encuentra en documents & settings, cosa que ya consegui. Lo que pasa que solo me funciona a mi por lo siguiente:

"El boton que cree en la aplicacion me lleva al siguiente directorio..."

C:\Documents and Settings\Chupi\Configuración local\Archivos temporales de Internet

"...y a unas cuantas personas les gusto mi aplicacion porque son unos gandules."

Entonces yo no boy a estar creando aplicaciones para cada uno de los usuarios que me la pidan. Así es como lo puse y funciona, pero solo para mí:

ShellExecute ( 'C:\Documents and Settings\Chupi\Configuración local\Archivos temporales de Internet' )

El problema esta en "Chupi", no todo el mundo tiene este directorio claro.

GRACIAS por atenderme.

maeyanes 21-12-2004 19:59:57

Usa la variable del sistema %HOMEPATH% para averiguar el dato que necesitas.

Puedes usar esta función:

Código Delphi [-]
function GetEnvVarValue(const VarName: string): string;
var
  BufSize: Integer;  // buffer size required for value
begin
  // Get required buffer size (inc. terminal #0)
  BufSize := GetEnvironmentVariable(PChar(VarName), nil, 0);
  if BufSize > 0 then
  begin
    // Read env var value into result string
    SetLength(Result, BufSize - 1); 
    GetEnvironmentVariable(PChar(VarName), PChar(Result), BufSize)
  end
  else
    // No such environment variable
    Result := '';
end;

%HOMEPATH% contiene el valor: C:\Documents and Settings\UserName, ya solo le tienes que agregar el resto de la ruta deseada.


Saludos...

roman 21-12-2004 22:31:54

Otra forma es usar la siguiente función:

Código Delphi [-]
uses
  ShlObj;

function GetSpecialFolder(nFolder: Integer): String;
var
  Path: array[0..MAX_PATH] of Char;

begin
  ShlObj.SHGetSpecialFolderPath(0, Path, nFolder, false);
  Result := Path;
end;

que te da la ruta de muchos folders de este tipo. En tu caso usarías:

Código Delphi [-]
Edit1.Text := GetSpecialFolder(CSIDL_INTERNET_CACHE);

Si consultas la ayuda del SDK de Windows para la función ShGetSpecialFolderLocation podrás ver los valores que puedes dar al parámetro nFolder.

// Saludos

Chupi 22-12-2004 14:36:42

ya lo capte
 
Ok, gracias creo que ya me quedo claro, aver si me compro el dichoso libro porque si no boy a estar con dudas hasta que me canse.

Chupi 22-12-2004 15:01:30

Pues parece que no funciona, le puse el siguiente codigo y nada:

procedure TForm1.Button1Click(Sender: TObject);
function GetSpecialFolder(nFolder: Integer): String;
var
Path: array[0..MAX_PATH] of Char;
begin
ShlObj.SHGetSpecialFolderPath(0, Path, nFolder, false);
Result := Path;
end;
End;
end.

Me da los siguientes errores:

[Error] Unit1.pas(39): BEGIN expected but END found
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

roman 22-12-2004 16:33:07

No pongas el cuerpo de la función dentro del procedimiento. La función está para que puedas usarla desde cualquier parte. Suponiendo que vas a colocar la ruta en un edit al moment de hacer click al botón, pondrías:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := GetSpecialFolder(CSIDL_INTERNET_CACHE);
end;

pero la definición de la función la dejas fuera.

// Saludos

pd: ¿A qué libro te refieres? Ten encuenta que ningún libro bastará y tienes que recurrir a varias fuentes. Para cuestiones relacionadas con las APIs de Windows, una fuente invaluable es la ayuda del SDK de Windows que se incluye con Delphi o que puedes consultar más actualizada y completa
directamente en línea en http://msdn.microsoft.com/library/

Chupi 22-12-2004 16:44:46

Jooo...
 
Ok pero sigo teniendo problemas de tozudo porque no tengo ni idea y puse lo siguiente:

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShlObj, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function GetSpecialFolder(nFolder: Integer): String;
procedure TForm1.Button1Click(Sender: TObject);
var
Path: array[0..MAX_PATH] of Char;
begin
ShlObj.SHGetSpecialFolderPath(0, Path, nFolder, false);
Result := Path;
end;
End;
end.

Y los errores:

[Error] Unit1.pas(27): ';' expected but '.' found
[Error] Unit1.pas(12): Unsatisfied forward or external declaration: 'TForm1.Button1Click'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

Seguro que la respuesta esta ante mis narizes lo que pasa que todavia no entiendo muy bien los codigos, solo me se los basicos.

Y acerca de lo del libro es mas bien un manual de como usar el delphi.

PD: Gracias por aguantarme.

maeyanes 22-12-2004 16:50:50

Sigues poniendo mal tú código...

Debes hacerlo así más o menos...

Código Delphi [-]

// Inicio de unidad y Declaraciones...

function GetSpecialFolder(nFolder: Integer): String;
var
  Path: array[0..MAX_PATH] of Char;

begin
  ShlObj.SHGetSpecialFolderPath(0, Path, nFolder, false);
  Result := Path;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := GetSpecialFolder(CSIDL_INTERNET_CACHE);
end;

Chupi 22-12-2004 18:46:32

no es eso
 
no quiero nada de un texto, tan solo es una variable que no se donde ponerla pero si se que la del win2K es USERPROFILE% y la del XP es %HOMEPATCH% y yo me toy aciendo un lio.

PD: vamos a batir un record en mensajitos colega.

maeyanes 22-12-2004 19:08:23

Retomando lo que deseas hacer en realidad, este sería el código que tienes que utilizar en el evento OnClick del botón.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Path: string;

begin
  Path := GetSpecialFolder(CSIDL_INTERNET_CACHE);
  // Path tendría algo como: 'C:\Documents and Settings\Chupi\Configuración
  // local\Archivos temporales de Internet'
  ShellExecute (Path)
end;

Chupi 23-12-2004 15:55:40

por último
 
¿me podriais mandar la funcion completa? y me quito un gran problema de la cabeza, (así de paso me lo estudio), os lo agradecería bastante.

;) Gracias y SALUDOS.


La franja horaria es GMT +2. Ahora son las 15:24:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi