![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Gracias seoane je,je y perdona pero es que tambien se parece a esta palabra inlgesa; asi que diculpa nuevamente, y ahorita voy a probar esa funcion, te comento mis resultados y problemas que esto conlleve gracias..
|
|
#2
|
|||
|
|||
|
seoane fijate que funciona de maravilla la funcion pero solo en mi pcquiero pero la funcion o la finanlidad de hacer esto era que esta aplicacion la voy a tener en una pc como SERVIDORA, entonces cuando otra maquina(Cliente) corra la aplicacion(Como ShourtCut) al Servidor le devuelva la ip pero de la maquina cliente.
lo hice pero en lugar que me devuelva la ip me devuelve el siguiente mensaje de error: "CMD.EXE was started \\Nombre maquina del Servidor as the current directory path.UNC paths are not supported defaulting to windows directory." y seguido a este mensaje me muestra la ip 10.xx.xx.xx (de la Cliente)la cual es correcta pero ese mensaje de error me hace clavo ahi. gracias por tu ayuda. |
|
#3
|
||||
|
||||
|
A primera vista parece que le problema es debido a que cmd no permite usar una carpeta remota como directorio actual. Pues bien, le diremos que use otro, por ejemplo el de windows. En vez de esta linea:
Coloca esta otra:
Eso deberia de solucionar ese error. |
|
#4
|
|||
|
|||
|
Gracias seoane fijate que solucione el problema, la cuestion era que yo lo estaba haciendo con un acceso directo de la cliente al servidor; pero para solucionarlo hice un maping desde la cliente al servidor y Zaz!!! funcionó!! mapeando accede a todos los recursos como local, por eso no funcionaba en el acceso directo.
Pero ahora tengo otro problemita, y es que a veces no se porque cuando lo ejecuto el programa desde la cliente no me sale la ip sale null(en blanco) y cierro lo aplicacion y vuelvo a correr hasta que sale pero es en un orden aleatorio a veces me sale a la primera y a veces no, cosa que no sucede cuando lo ejecuto en el servidor como local. te mostraré el codigo que tengo. ponle atención al evento create del formulario ya que ahi puse mi codigo lo demós tu lo sabes mejor que nadie; pero lo puse completo para que lo veas talvez estoy fallando en el orden del codigo. pero mejor hechale un vistazo Código:
unit Principal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
MainMenu1: TMainMenu;
Acercade1: TMenuItem;
Salir1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure Acercade1Click(Sender: TObject);
procedure Salir1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Acerca;
{$R *.dfm}
function IsWinNT: boolean;
var
OSV: OSVERSIONINFO;
begin
OSV.dwOSVersionInfoSize := sizeof(osv);
GetVersionEx(OSV);
result := OSV.dwPlatformId = VER_PLATFORM_WIN32_NT;
end;
function CmdExec(Cmd: string): string;
var
Buffer: array[0..4096] of Char;
si: STARTUPINFO;
sa: SECURITY_ATTRIBUTES;
sd: SECURITY_DESCRIPTOR;
pi: PROCESS_INFORMATION;
newstdin, newstdout, read_stdout, write_stdin: THandle;
exitcod, bread, avail: Cardinal;
begin
Result:= '';
if IsWinNT then
begin
InitializeSecurityDescriptor(@sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(@sd, true, nil, false);
sa.lpSecurityDescriptor := @sd;
end
else sa.lpSecurityDescriptor := nil;
sa.nLength := sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle := TRUE;
if CreatePipe(newstdin, write_stdin, @sa, 0) then
begin
if CreatePipe(read_stdout, newstdout, @sa, 0) then
begin
GetStartupInfo(si);
with si do
begin
dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
wShowWindow := SW_HIDE;
hStdOutput := newstdout;
hStdError := newstdout;
hStdInput := newstdin;
end;
Fillchar(Buffer, SizeOf(Buffer), 0);
GetEnvironmentVariable('COMSPEC', @Buffer, SizeOf(Buffer) - 1);
StrCat(@Buffer,PChar(' /c ' + Cmd));
if CreateProcess(nil, @Buffer, nil, nil, TRUE, CREATE_NEW_CONSOLE, nil, nil, si, pi) then
begin
repeat
PeekNamedPipe(read_stdout, @Buffer, SizeOf(Buffer) - 1, @bread, @avail, nil);
if bread > 0 then
begin
Fillchar(Buffer, SizeOf(Buffer), 0);
ReadFile(read_stdout, Buffer, bread, bread, nil);
Result:= Result + String(PChar(@Buffer));
end;
Application.ProcessMessages;
GetExitCodeProcess(pi.hProcess, exitcod);
until (exitcod <> STILL_ACTIVE) and (bread = 0);
end;
CloseHandle(read_stdout);
CloseHandle(newstdout);
end;
CloseHandle(newstdin);
CloseHandle(write_stdin);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
ResultadoWin9x:String;
ResultadoWinNT:String;
BanderaWin9x:String;
begin
Label1.Caption:='';
//Corre comando de Dos para Ip de WindowsNT hacia abajo
ResultadoWin9x:=(CmdExec('WINIPCFG | find "IP Address"'));
ResultadoWin9x:=StringReplace(ResultadoWin9x,'IP Address','',[rfReplaceAll]);
BanderaWin9x:=copy(ResultadoWin9x,2,8);
//Valida si La pc no Windows NT hacia abajo
if BanderaWin9x = 'WINIPCFG' then begin;
//Corre comando de Dos para Ip de versiones windos WindowsNT y posterior
ResultadoWinNT:=(CmdExec('IPCONFIG | find "IP Address"'));
ResultadoWinNT:=StringReplace(ResultadoWinNT,'IP Address','',[rfReplaceAll]);
Label1.Caption:='Su Dirección IP es:'+(ResultadoWinNT);
end
else
begin;
if BanderaWin9x <> 'WINIPCFG' then begin;
Label1.Caption:='Su Dirección IP es:'+(ResultadoWin9x);
end;
end;
end;
procedure TForm1.Acercade1Click(Sender: TObject);
begin
Form2.showmodal;
end;
procedure TForm1.Salir1Click(Sender: TObject);
begin
close;
end;
end.
y gracias de nuevo |
|
#5
|
||||
|
||||
|
Si lo unico que quieres es obtener la ip del equipo creo que te estas liando demasiado. Usa esta funcion para hacerlo:
Última edición por seoane fecha: 12-06-2006 a las 02:10:11. |
|
#6
|
|||
|
|||
|
GRACIAS DE NUEVO
mira y como utilizo la funcion para que me devuelva el resultado en un string?? |
|
#7
|
||||
|
||||
|
Hola Amigos, yo estoy buscando algo similar a esto; lo que deseo es hacer una backup de mi base de datos en posgresql, me dijeron que eso se hace por consola y no se que parametros le tendria que enviar para que desde un form se cree automaticamente.
estoy trabajando en delphi 7.0 con POsgesql 8, SO WinXP conexion ADO espero sus respuestas y de antemano gracias |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Ejecutar un programa dentro de otro. | zugazua2001 | Varios | 1 | 24-06-2005 02:14:04 |
| Ejecutar un programa externo desde un programa de Delphi | Roger_Fernandez | Varios | 3 | 02-09-2004 18:05:36 |
| Ejecutar Programa Dentro Del Tuyo | ronson | JAVA | 6 | 04-06-2004 13:50:02 |
| ejecutar un programa dentro de otro | migueilichenco | Varios | 1 | 28-11-2003 20:39:03 |
| Ejecutar un programa DENTRO de otro programa | seduerey | Varios | 8 | 12-11-2003 13:56:20 |
|