Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Ventana de Entorno de Red

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Ventana de Entorno de Red Responder citando

Hola a todos. El problema que tengo es que no se sacar la ventana de entorno de red, la que aparece en la imagen de abajo, para poder seleccionar una maquina de la red. He tenido que hacer una chapuza para hacer esto que ha sido sacar la ventana de seleccionar un fichero que por ahi si se puede acceder al entorno de red, y del string que me devuelde sacar el nombre de la maquina, pero supongo yo que consiguiendo sacar esta ventana te devolvera el nombre de la maquina directamente.

¿Alguien que lo haya usado me puede decir como puedo sacar esta venta y como se usa?

Otra pregunta al respecto, ¿habria alguna forma de hacer con esta ventana una especie de filtro y que solo muestre las maquinas que tienen corriendo una determinada aplicacion?

Muchas gracias de antemano por la ayuda. Saludos Wink Wink Wink

Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Cita:
Otra pregunta al respecto, ¿habria alguna forma de hacer con esta ventana una especie de filtro y que solo muestre las maquinas que tienen corriendo una determinada aplicacion?


esto lo podrías hacer pero comunicando a las computadoras en cuestión utilizando sockets, o bien se me ocurre que podrías hacer que todas escriban su estado en una base de datos o archivo de registro central.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Me parece una buena solucion, pero yo pienso que debe haber una forma mas sencilla de hacerlo. Un ejemplo de lo que intento hacer se ve por ejemplo en un cliente de Terminal Server. Cuando habres el cliente te dice los servidores de Terminal Server que hay en ese momento activos en tu red.

El caso es que estoy haciendo una aplicacion Cliente / Servidor, utilizando la interfaz de DCom, y el problema aparece cuando el Cliente no esta configurado y no tiene ningun servidor asociado. Por eso quiero conseguir sacar esta ventana de buscar equipo que tiene el windows, y si ya ademas me filtrara solo las equipos que tengan corriendo la aplicacion servidor ya seria la bomba.

Yo me imagino que sera alguna API de windows lo que haya que utilizar, por que el Builder no tiene ningun componente que haga esto, o por lo menos yo no lo he encontrado y mira que lo he buscado. He intentado encontrar informacion sobre esto por internet y tampoco he dado con nada. Por eso he puesto la consulta aqui, a ver si algun colega se ha encontrado con el mismo problema y me hecha una mano Wink Wink Wink
Volver arriba
Mensaje    Asunto: Responder citando

ops el mensaje de arriba es mio. Se me olvido Loginearme Embarassed Embarassed Embarassed
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

He encontrado este codigo, pero esta en Visual Basic creo. ¿Se podria adaptar para utilizarlo con el Builder alguien que este mas puesto con esto?


Seleccionar equipos y carpetas de una red Windows

Este código muestra un cuadro de dialogo para poder seleccionar sólo un equipo de la red o para seleccionar una carpeta concreta de un equipo que este conectado a la red.
Para ejecutar este ejemplo debes añadir al nuevo proyecto dos botones (Command1 y Command2) y dos textbox (Text1 y Text2).

Option Explicit
Private Const ERROR_SUCCESS As Long = 0
Private Const MAX_PATH As Long = 260
Private Const CSIDL_NETWORK As Long = &H12
Private Const BIF_RETURNONLYFSDIRS As Long = &H1
Private Const BIF_BROWSEFORCOMPUTER As Long = &H1000

Private Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type

Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" _
(ByVal pidl As Long, _
ByVal pszPath As String) As Long

Private Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" _
(lpBrowseInfo As BROWSEINFO) As Long

Private Declare Function SHGetSpecialFolderLocation _
Lib "shell32.dll" _
(ByVal hwndOwner As Long, _
ByVal nFolder As Long, _
pidl As Long) As Long

Private Declare Sub CoTaskMemFree Lib "ole32.dll" _
(ByVal pv As Long)
Private Sub Command1_Click()
Text1.Text = GetBrowseNetworkWorkstation()
End Sub
Private Sub Command2_Click()
Text2.Text = GetBrowseNetworkShare()
End Sub
Private Function GetBrowseNetworkShare() As String
'returns only a valid share on a
'network server or workstation
Dim BI As BROWSEINFO
Dim pidl As Long
Dim sPath As String
Dim pos As Integer

'obtain the pidl to the special folder ##!##network##!##
If SHGetSpecialFolderLocation(Me.hWnd, _
CSIDL_NETWORK, _
pidl) = ERROR_SUCCESS Then

'fill in the required members, limiting the
'Browse to the network by specifying the
'returned pidl as pidlRoot
With BI
.hOwner = Me.hWnd
.pidlRoot = pidl
.pszDisplayName = Space$(MAX_PATH)
.lpszTitle = "Select a network computer or share."
.ulFlags = BIF_RETURNONLYFSDIRS
End With

'show the browse dialog
pidl = SHBrowseForFolder(BI)
If pidl <> 0 Then
'got a pidl .. but is it valid?
sPath = Space$(MAX_PATH)
If SHGetPathFromIDList(ByVal pidl, ByVal sPath) Then
'valid, so get the share path
pos = InStr(sPath, Chr$(0))
GetBrowseNetworkShare = Left$(sPath, pos - 1)
End If
Call CoTaskMemFree(pidl)
Else:
'a server selected...follow same principle
'as in GetBrowseNetworkWorkstation
GetBrowseNetworkShare = "\" & BI.pszDisplayName
End If 'If pidl
End If 'If SHGetSpecialFolderLocation
End Function
Private Function GetBrowseNetworkWorkstation() As String
'returns only a valid network server or
'workstation (does not display the shares)
Dim BI As BROWSEINFO
Dim pidl As Long
Dim sPath As String
Dim pos As Integer

'obtain the pidl to the special folder ##!##network##!##
If SHGetSpecialFolderLocation(Me.hWnd, _
CSIDL_NETWORK, _
pidl) = ERROR_SUCCESS Then

'fill in the required members, limiting the
'Browse to the network by specifying the
'returned pidl as pidlRoot
With BI
.hOwner = Me.hWnd
.pidlRoot = pidl
.pszDisplayName = Space$(MAX_PATH)
.lpszTitle = "Select a network computer."
.ulFlags = BIF_BROWSEFORCOMPUTER
End With

'show the browse dialog. We don##!##t need
'a pidl, so it can be used in the If..then directly.
If SHBrowseForFolder(BI) <> 0 Then
'a server was selected. Although a valid pidl
'is returned, SHGetPathFromIDList only return
'paths to valid file system objects, of which
'a networked machine is not. However, the
'BROWSEINFO displayname member does contain
'the selected item, which we return
GetBrowseNetworkWorkstation = "\" & BI.pszDisplayName
End If 'If SHBrowseForFolder
Call CoTaskMemFree(pidl)
End If 'If SHGetSpecialFolderLocation
End Function
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Si deseas abrir el cuado conexion de red, este es el codigo ponlo en un boton, y luego realiza lo siguiente
Código:

void __fastcall TFNet::Button3Click(TObject *Sender)
{
    // para abrir el cuadro de dialogo, "conectar a una unidad de red"
    WNetConnectionDialog(Application->Handle,1);
    DriveComboBox1->TextCase= DriveComboBox1->TextCase; // para refrescar la unidad en un driveCombo
}

despues de eso como esta funcion no tiene refresh, es decir te conectas, pero en tu apliacion no tiene no ves la unidad donde te acabas de conectar, en el componente realiza lo siguiente...
Código:

 DriveComboBox1->TextCase= DriveComboBox1->TextCase; // para refrescar la unidad en un driveCombo


en la segunda linea de codigo, te dice como hacer el refresh, para que tengsa nuevamente, la unidad, donde te acabas de conectar
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Blasfemaron al poner codigo de Visual Suck..jejejee..
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

jejeje es q es lo que quiero pero no aparece en el jodido Builder
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Gracias César por la info. No es exactamente la ventana que quiero. La que quiero es la que aparece en el dibujito de arriba, y esa debe tener otra API por ahi escondida Confused Confused Confused . Ya casi esta rodeada. Llevo todo el dia buscandola pero no aparece la jodida Sad Sad Sad
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Siempre que se pegue código y sobretodo si es algo largo estaría bien que estuviese minimamente indentado, ya que sino se hace mas pesado seguirlo...

Bueno, aquí va una traducción lo mas literal posible quitando los comentarios y los malabarismos que hacen los de VB cada vez que usan el API Wink


Tienes que añadir: #include <shlobj.h>
y para que no te de ningún error es importantísimo que añadas NO_WIN32_LEAN_AND_MEAN en las propiedades del proyecto en la pestaña 'Directories/Conditionals' en el edit que pone 'Conditional defines:'

o bien si te parece mas simple añade las dos siguientes líneas al principio del todo, por encima de #include <vcl.h>

#define NO_WIN32_LEAN_AND_MEAN
#include <shlobj.h>
....

Código:
String GetBrowseNetworkShare()
{
    BROWSEINFO   bi = {0};
    LPITEMIDLIST pidl;
    char         szPath[MAX_PATH];
    String       ret = "";

    if (SHGetSpecialFolderLocation(Form1->Handle, CSIDL_NETWORK, &pidl)
        == ERROR_SUCCESS)
    {
        bi.hwndOwner      = Form1->Handle;
        bi.pidlRoot       = pidl;
        bi.lpszTitle      = "Select a network computer or share.";
        bi.ulFlags        = BIF_RETURNONLYFSDIRS;

        pidl = SHBrowseForFolder(&bi);
        if (pidl)
        {
            if (SHGetPathFromIDList(pidl, szPath))
                ret = szPath;
            CoTaskMemFree(pidl);
        }
        else
            ret = String("\\") + bi.pszDisplayName;
    }

    return ret;
}


Código:
String GetBrowseNetworkWorkstation()
{
    BROWSEINFO   bi = {0};
    LPITEMIDLIST pidl;
    char         szPath[MAX_PATH];
    String       ret = "";

    if (SHGetSpecialFolderLocation(Form1->Handle, CSIDL_NETWORK, &pidl)
        == ERROR_SUCCESS)
    {
        bi.hwndOwner = Form1->Handle;
        bi.pidlRoot  = pidl;
        bi.lpszTitle = "Select a network computer.";
        bi.ulFlags   = BIF_BROWSEFORCOMPUTER;

        if (SHBrowseForFolder(&bi))
            ret = String("\\") + bi.pszDisplayName;
        CoTaskMemFree(pidl);
    }

    return ret;
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Muchas gracias Leo. Me ha funcionado a la perfeccion. Era justo lo que buscaba Wink Wink Wink

Siento no haberte indentado el codigo, perdona mis novatadas de primerizo en el foro Embarassed Embarassed Embarassed

Muchas Gracias y Salu2.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Por cierto Leo, somos casi vecinos, yo soy de Gran Canaria Very Happy Very Happy Very Happy
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.