PDA

Ver la Versión Completa : Ejecutar programa a trves del PcAnyWhere


Iskariote0087
04-10-2006, 17:15:52
;) Hola un saludete para todos.
vereis tengo un programa desde el cual llamo al Symantec pcAnywhere pasandole una variable.Dependiendo de lo que contiene la variable me conecto con un Host o con otro.Es decir, desde mi ordenador me conecto a 120 equipos, he hecho un programa para no tener que estar entrando en el pcAnywhere buscando el Host al que quiero conectarme etc... de tal forma que lo que hago es hacer la llamada pasandole el parametro requerido (codigo de tienda) y se conecta.Bueno, despues del rollo ahi va, lo que necesito es que desde este programa una vez que ya me he conectado al Host, hacer una llamada a un programa que esta en ese Host. Seguro que es posible pero a mi se me escapa, quien me echa un cable?:(

Un saludo y gracias
Iskariote

Caral
04-10-2006, 19:29:08
Hola IsKariote0087
Interesante concepto, tambien uso pcAnywhere y no se me habia ocurrido algo asi, suena interesante.
Si pones el codigo del programa por aqui, tal vez entre varios podamos hechar a andar esto, repido es interesante.
Comparteo.
Saludos

Iskariote0087
04-10-2006, 19:43:35
De esta manera con poner en la caja de texto 'TxtCod.text' el codigo del Host y hacindo click sobre el boton se conecta directamente.Una cosa curiosa y que no he conseguido solucionar es que cuando se conecta te deja la conexion minimizada, es una chorrada porque con maximizarla ya esta pero no he encontrado la manera de que se ejecute maximizado.
Espero que te sirva la verdad es que si estas constantemente conectandote a diferentes equipos es una manera de ganar tiempo.
De todas formas si a alguien sabe como ejecutar un programa que este en el Host al que te has conectado desde el programa que esta en el servidor pues ya sabe......un saludo

procedure TForm1.BtPcAnywhereClick(Sender: TObject);
var
sinHandle1: THandle;
tienda:string;
searchResult : TSearchRec;
codigo:string;
tiendaAejecutar:string;
begin


if FindFirst('C:\Documents and Settings\All Users\Datos de programa\Symantec\pcAnywhere\*.CHF', faAnyFile, searchResult) = 0 then // si es o ha encontrado algo
begin
repeat
Codigo:=AnsiMidStr(searchResult.Name, 1, 5);
tienda:=AnsiMidStr(searchResult.Name, 6, 35);
tiendaAejecutar:= Codigo+ tienda;
If txtCod.Text= codigo then
shellexecuteA(sinHandle1,'open',
pansichar('C:\Documents and Settings\All Users\Datos de programa\Symantec\pcAnywhere\'+ tiendaAejecutar) ,nil,nil,sW_normal);
until FindNext(searchResult) <> 0;
end;
findclose(searchResult);
Form1.Enabled:=false;
Form1.Enabled:=true;

end;



Un saludete Perretes
Iskariote

Caral
04-10-2006, 19:54:52
Hola denuevo
Me esta dando un error esto y no se porque:

[Error] Unit1.pas(40): Undeclared identifier: 'AnsiMidStr'

[Error] Unit1.pas(44): Undeclared identifier: 'shellexecuteA'

Me falta declarar estos, donde los declaras ? en el uses ?
Y como ?
Saludos

Iskariote0087
04-10-2006, 20:28:45
tienes que declarar en
USES
StrUtils,Shellapi
creo que con esto te funcionará

Un saludo
Iskariote

Caral
04-10-2006, 20:32:14
Gracias IsKariote0087
Pero me sigue dando error, ahora solo este:
[Error] Unit1.pas(40): Undeclared identifier: 'AnsiMidStr'
Supongo que el problema biene por el Ansi, no se?
Saludos

Caral
04-10-2006, 20:49:10
Este es una copia del tuyo tal vez me indicas que falta en el uses:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
TxtCod: TEdit;
BtPcAnywhere: TButton;
procedure BtPcAnywhereClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BtPcAnywhereClick(Sender: TObject);
var
sinHandle1: THandle;
tienda:string;
searchResult : TSearchRec;
codigo:string;
tiendaAejecutar:string;
begin
if FindFirst('C:\Documents and Settings\All Users\Datos de programa\Symantec\pcAnywhere\*.CHF', faAnyFile, searchResult) = 0 then // si es o ha encontrado algo
begin
repeat
Codigo:=AnsiMidStr(searchResult.Name, 1, 5);
tienda:=AnsiMidStr(searchResult.Name, 6, 35);
tiendaAejecutar:= Codigo+ tienda;
If txtCod.Text= codigo then
shellexecuteA(sinHandle1,'open',
pansichar('C:\Documents and Settings\All Users\Datos de programa\Symantec\pcAnywhere\'+ tiendaAejecutar) ,nil,nil,sW_normal);
until FindNext(searchResult) <> 0;
end;
findclose(searchResult);
Form1.Enabled:=false;
Form1.Enabled:=true;
end;

end.

Este es el error:
[Fatal Error] Unit1.pas(7): File not found: 'AnsiUtils.dcu'
Saludos

Iskariote0087
04-10-2006, 20:51:40
strutils, con esta libreria el Ansi tiene que funcionar, acabo de hacer la prueba.La quito me da error la pongo ya no me da error.

un saludo
Iskariote

Caral
04-10-2006, 20:54:52
Sera el delphi 6 el problema, No me funciona ?
Lo quite o lo ponga es lo mismo, vi en la lib del delphi y si esta.
Que sera ?
Saludos

Iskariote0087
04-10-2006, 20:59:21
Yo creo que el problema es que no tienes el componente que te permita trabajar con esa libreria.
Por Component\InstallComponet y añadirlo.Esto que te estoy diciendo te lo digo sin tenerlo muy claro, yo taambien soy un principiante y normalmente me ayudo mucho del foro para acabar mis programillas.
En cualquier caso si ves que no funciona quita el AnsiMidStr.Y prueba a meter en la variable codigo y tienda el codigo y el nombre a pelo a ver si te funciona.Luego ya pensaremos como hacer que funcione el Ansi...

Un saludete
Iskariote