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 

Crear unidad de Red...

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

Hola a todos, hace un tiempo alguien pregunto como compartir un directorio a travez de codigo en BCB, de eso encontre informacion y le respondi a esa persona:

https://cppbuilder.es/viewtopic.php?t=6723

Ahora tengo la necesidad de crear una "unidad de red" para que se comporte como un disco en el pc cliente, esta unidad estara en un servidor, el asunto es que no he encontrado informacion de como puedo hacer esto, compartir por codigo en el servidor ya esta, ahora me falta indicarle a otro pc de la misma lan que tome ese recurso y lo use como unidad de red... espero entiendan la idea.

Bueno eso, si alguien tiene alguna info se lo agradecere.
Saludos!!!
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Deja lo encuentro, y te lo paso, yo lo tengo..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Se agradece, espero tu respuesta Wink

Saludos!
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Mira no encuentro el archivo en concreto, pero para conectarte a una unidad de red, lo que hago, es habilitar el cuadro de conexion a red.. de la siguiente maner

ponlo en un boton,
Código:

// para abrir el cuadro de dialogo, "conectar a una unidad de red"
    WNetConnectionDialog(Application->Handle,1);

bueno, lo que hace es abrirte el cuadro de conexion a la carpeta de red, que previamente esta compartida desde el servidor, espero que sea esto,
bueno si no, deja busco el archivo para conectarse a unidad de red desde el codigo...
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Efectivamente, muestra el cuadro para la creacion de la unidad de red, pero si encuentras el otro codigo te lo agradeceria mucho, de la forma actual es muy dificil controlar a que unidad se estan conectando y como ambos sabemos el "tonto-usuario" tiende a cometer muchos errores.

Wink

Espero tu respuesta.
Gracias y Saludos!
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Listo ya lo encontre,, estaba dentro de un zip con otro Nombre de echo encontre la pagina de donde lo baje, la el codigo es este
Código:

//------FUNCION PARA CONECTARSE A UN RECURSO------------------------
// SE PASAN COMO PARAMETROS
//  EL NOMBRE DEL RECURSO slNetPath
//  LA UNIDAD A ASIGNAR clDrive
//  PERMANENTE O NO  blPermanent
// ConnectNetworkDrive() verbindet ein lokales Laufwerk mit dem Netzwerkpfad.
// Übergabeparameter:
// 1. AnsiString slNetPath -> Netzwerk-Pfad (z.B.: \\rechner_1\daten)
// 2. char clDrive         -> Netzwerk-Pfad (z.B.: 'F')
// 3. bool blPermanent     -> Flag "Verbindung bei der Anmeldung
//                            automatisch wiederherstellen"
//---------------------------------------------------------------------------
DWORD ConnectNetworkDrive(AnsiString slNetPath, char clDrive,
  bool blPermanent)
{
  char cPath[3] = { char(0), ':', char(0) };
  cPath[0] = toupper(clDrive);
  AnsiString slRemotePath = slNetPath;

  NETRESOURCE nr;
  ZeroMemory(&nr, sizeof(nr));

  nr.dwScope= RESOURCE_GLOBALNET;
  nr.dwType = RESOURCETYPE_DISK;
  nr.dwDisplayType=RESOURCEDISPLAYTYPE_GENERIC;
  nr.dwUsage=RESOURCEUSAGE_CONNECTABLE;
  nr.lpLocalName=cPath;
  nr.lpRemoteName=slRemotePath.c_str();
  nr.lpComment=NULL;
  nr.lpProvider=NULL;
  int ilResult = WNetAddConnection2(&nr, (LPSTR) NULL, (LPSTR) NULL,
                          blPermanent ? CONNECT_UPDATE_PROFILE : 0);
  return ilResult;
}

//-----------FUNCION PARA DESCONECTARES DE UN RECURSO --------
// DisconnectNetworkDrive() trennt die Verbindung des Laufwerks mit
// dem Netzwerkpfad. Übergabeparameter:
// 1. char clDrive         -> Netzwerk-Pfad (z.B.: 'F')
// 2. bool blPermanent     -> Flag "Verbindung dauerhaft trennen"
//---------------------------------------------------------------------------
DWORD DisconnectNetworkDrive(char clDrive, bool blPermanent)
{
  char cPath[3] = { char(0), ':', char(0) };
  cPath[0] = toupper(clDrive);
  return WNetCancelConnection2(cPath, blPermanent ?
    CONNECT_UPDATE_PROFILE : 0,TRUE);
}


Asi mismo te pongo la pagina de donde lo baje, para que te des una idea..
http://www.bytesandmore.de/rad/index.htm?http://www.bytesandmore.de/rad/cpp/snipp/sc08001.php

ojo tambien esta esta otra manera de hacerlo..., donde te envia el mensaje de error ya como una ventana de windows..
Código:

NETRESOURCE netResource;
   ZeroMemory(&netResource, sizeof(NETRESOURCE));
   netResource.dwType = RESOURCETYPE_DISK;
   netResource.lpLocalName = "Q:";
   netResource.lpRemoteName = "\\\\SPIKE\\homedir";

   if(WNetAddConnection2(&netResource, "firebird", "djf", NULL) != NO_ERROR)
   {
       LPVOID lpMsgBuf;

       FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                     FORMAT_MESSAGE_FROM_SYSTEM,
                     NULL,
                     GetLastError(),
                     MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                     (LPTSTR)&lpMsgBuf,
                     0,
                     NULL);

       MessageBox(Application->Handle,
                  (const char *)lpMsgBuf,
                  "GetLastError",
                  MB_OK | MB_ICONINFORMATION);

       LocalFree(lpMsgBuf);
   }


espero que te sirva, si puedes mejorar el codigo para que no se vea tan feo, y sea mas legible, te agradeceria que me lo enviaras de vuelta..

saludos..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Oye en la pagina que donde esta el codigo si ves, aparece un boton para rastrear las conexiones.. no he podido hacer que funcione ya que es una clase, creada por el programador el codigo que me envia son los siguientes.. (ejecutandolo en builder 6.0)

Esto es el .H que marca el error
Código:


//===========================================================================
// BrowseFoldersDialog.H
//===========================================================================
#ifndef ClassBrowseFolderH
#define ClassBrowseFolderH


#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
#include <Shlobj.hpp>
//---------------------------------------------------------------------------

typedef enum tagTBrowseFoldersRoot
{
   bfrRecycleBin, bfrControlPanel, bfrDesktop, bfrDesktopDir, bfrDrives,
   bfrFonts, bfrNetHood, bfrNetwork, bfrPersonal, bfrPrinters, bfrPrograms,
   bfrRecent, bfrSendTo, bfrStartMenu, bfrStartUp, bfrTemplates
} TBrowseFoldersRoot;

typedef enum tagTBrowseFoldersFlag
{
   bffBrowseForComputer, bffBrowseForPrinter, bffDontGoBelowDomain,
   bffReturnsAncestors, bffReturnOnlyDirs, bffStatusText
} TBrowseFoldersFlag;

typedef Set<TBrowseFoldersFlag, bffBrowseForComputer, bffStatusText>
   TBrowseFoldersFlags;

class TBrowseFoldersDialog : public TCommonDialog
{
protected:
   LPMALLOC g_pMalloc;            // IMalloc interface

    //OJO AQUI SALE EL ERROR, ESTO NO LO PUEDO COMPONER
   LPITEMIDLIST pidlPrograms;     // PIDL for Programs folder
   LPITEMIDLIST pidlBrowseLast;   // PIDL last returned from browse
    //----------------------------------------------------------------
   LPSTR lpBuffer;               // buffer for display name?
   BROWSEINFO bi;               // BROWSEINFO structure
   AnsiString path;            // path for folder
   TBrowseFoldersRoot root;      // root for browse
   TBrowseFoldersFlags flags;   // flags for browse
   AnsiString title;            // message to display in browse dlg
   AnsiString displayName;         // display name

   static int __stdcall BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam,
      LPARAM lpData);            // callback for browse dialog

   AnsiString __fastcall GetDisplayName(void);
   void __fastcall SetFolder(AnsiString folder);
   bool __fastcall Allocate(void);
   void __fastcall Deallocate(void);
   bool __fastcall DoBrowse(void);

public:
#pragma warn -hid
   __fastcall TBrowseFoldersDialog(TComponent* Owner);
   __fastcall ~TBrowseFoldersDialog();
#pragma warn +hid
   virtual bool __fastcall Execute(void);

__published:
   __property AnsiString Folder = { read = path, write = SetFolder };
   __property AnsiString DisplayName = { read = displayName };
   __property TBrowseFoldersRoot Root = { read = root, write = root,
      default = bfrDesktop };
   __property TBrowseFoldersFlags Options = { read = flags, write = flags,
      default = TBrowseFoldersFlag(bffReturnOnlyDirs) };
   __property AnsiString Title = { read = title, write = title };
};
//---------------------------------------------------------------------------
#endif
//===========================================================================
// end of ClassBrowseFolder.H
//===========================================================================





esto es el .CPP
Código:

/===========================================================================
// ClassBrowseFolder.cpp
//===========================================================================
#include <vcl.h>
#pragma hdrstop

#include "ClassBrowseFolder.h"
#pragma package(smart_init)

//---------------------------------------------------------------------------
// constructor
//
__fastcall TBrowseFoldersDialog::TBrowseFoldersDialog(TComponent* Owner)
   : TCommonDialog(Owner), pidlBrowseLast(NULL)
{
   // set defaults
   path = "";
   root = bfrDrives;
   flags.Clear();
   flags << bffReturnOnlyDirs;
}
//---------------------------------------------------------------------------
// destructor
//
__fastcall TBrowseFoldersDialog::~TBrowseFoldersDialog()
{
}
//---------------------------------------------------------------------------
// Execute() - set up and invoke the shell browse function
//
bool __fastcall TBrowseFoldersDialog::Execute(void)
{
   if (!Allocate()) return false;
   bool result = DoBrowse();
   Deallocate();
   return result;
}
//---------------------------------------------------------------------------
// Allocate() - allocate needed structures and fill in values
//
bool __fastcall TBrowseFoldersDialog::Allocate(void)
{
   // get the shell's allocator
   if (!SUCCEEDED(SHGetMalloc(&g_pMalloc))) return false;

   // Allocate a buffer to receive browse information.
   if ((lpBuffer = (LPSTR) g_pMalloc->Alloc(MAX_PATH)) == NULL) {
      g_pMalloc->Release();
      return false;
      }

   // since TCommonDialog does not contain a window handle, grab
   // the handle of the currently active window in this thread
   HWND hwnd = GetActiveWindow();

   // translate enum to flag
   int flag = CSIDL_DESKTOP;
   switch ((int) root)
  {
      case bfrRecycleBin:      flag = CSIDL_BITBUCKET;             break;
      case bfrControlPanel:   flag = CSIDL_CONTROLS;             break;
      case bfrDesktopDir:      flag = CSIDL_DESKTOPDIRECTORY;   break;
      case bfrDrives:           flag = CSIDL_DRIVES;               break;
      case bfrFonts:           flag = CSIDL_FONTS;                  break;
      case bfrNetHood:        flag = CSIDL_NETHOOD;               break;
      case bfrNetwork:        flag = CSIDL_NETWORK;               break;
      case bfrPersonal:        flag = CSIDL_PERSONAL;             break;
      case bfrPrinters:        flag = CSIDL_PRINTERS;             break;
      case bfrPrograms:        flag = CSIDL_PROGRAMS;             break;
      case bfrRecent:           flag = CSIDL_RECENT;               break;
      case bfrSendTo:           flag = CSIDL_SENDTO;               break;
      case bfrStartMenu:      flag = CSIDL_STARTMENU;             break;
      case bfrStartUp:        flag = CSIDL_STARTUP;               break;
      case bfrTemplates:      flag = CSIDL_TEMPLATES;             break;
   }

   // Get the PIDL for the desktop folder.
   if (!SUCCEEDED(SHGetSpecialFolderLocation(hwnd, flag, &pidlPrograms))) {
      g_pMalloc->Free(lpBuffer);
      g_pMalloc->Release();
      return false;
      }

   // Fill in the BROWSEINFO structure.
   bi.hwndOwner = hwnd;
   bi.pidlRoot = pidlPrograms;
   bi.pszDisplayName = lpBuffer;
   if (title != "") bi.lpszTitle = title.c_str();
   bi.ulFlags =
      flags.Contains(bffBrowseForComputer) ? BIF_BROWSEFORPRINTER : 0 |
      flags.Contains(bffDontGoBelowDomain) ? BIF_DONTGOBELOWDOMAIN : 0 |
      flags.Contains(bffReturnsAncestors) ? BIF_RETURNFSANCESTORS : 0 |
      flags.Contains(bffReturnOnlyDirs) ? BIF_RETURNONLYFSDIRS : 0 |
      flags.Contains(bffStatusText) ? BIF_STATUSTEXT : 0;

   bi.lpfn = BrowseCallbackProc;   // callback used to set last selection
   bi.lParam = (long) this;      // for callback proc

   // return ok
   return true;
}
//---------------------------------------------------------------------------
// Deallocate() - free allocated structures
//
void __fastcall TBrowseFoldersDialog::Deallocate(void)
{
   if (pidlBrowseLast) g_pMalloc->Free(pidlBrowseLast);
   g_pMalloc->Free(pidlPrograms);
   g_pMalloc->Free(lpBuffer);
   g_pMalloc->Release();
}
//---------------------------------------------------------------------------
// DoBrowse() - invoke the shell browse function
//
bool __fastcall TBrowseFoldersDialog::DoBrowse(void)
{
   LPITEMIDLIST pidlBrowse;    // PIDL selected by user this time

   // Browse for a folder and return its PIDL.
   pidlBrowse = SHBrowseForFolder(&bi);
   if (pidlBrowse != NULL)
  {
      // Free the PIDL previously returned by SHBrowseForFolder.
      g_pMalloc->Free(pidlBrowseLast);
      // And set to current selection
      pidlBrowseLast = pidlBrowse;
      displayName = lpBuffer;
      SHGetPathFromIDList(pidlBrowseLast, lpBuffer);
      path = lpBuffer;
      return true;
   }
   return false;
}
//---------------------------------------------------------------------------
// callback proc used by shell browse
//
int __stdcall TBrowseFoldersDialog::BrowseCallbackProc(HWND hwnd, UINT uMsg,
   LPARAM lParam, LPARAM lpData)
{
   if (uMsg == BFFM_INITIALIZED)
      SendMessage(hwnd, BFFM_SETSELECTION, true,
         (LPARAM) reinterpret_cast<TBrowseFoldersDialog *>
         (lpData)->path.c_str());
   return 0;
}
//---------------------------------------------------------------------------
// property setter function
//---------------------------------------------------------------------------
void __fastcall TBrowseFoldersDialog::SetFolder(AnsiString folder)
{
   path = folder.Trim();
}
//===========================================================================
// end of ClassBrowseFolder.cpp
//===========================================================================


si pudieras verificarlo y checarlo para que no falle, es decir correr el programa completo, ya que para asignar la unidad esa no tiene problemas este codigo me imagino es para mostrar los recursos compartidos, y al selecionar uno se presente como cadena de caracters, para poseteriormente, utilizarlo con la sentencia..

saludos _Vicktor, y espero no haberte dado mas trabajo ,jeje
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Vale Cesar, en un momento me pongo a probar ambos codigos y te cuento si le encontre el error al ultimo Wink

A todo esto, QUE ES DE _LEO Y R.PORCAR igual yo estoy entrando menos que antes al foro, pero he notado que no ahi mensajes de ellos desde hace mucho... Question

Saludos!
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Cierto desde hace un buen, para ser exactos, desde el dia del Atentado, a españa, ya no han vuelto a aparecer.. esperemos que esten bien.. y continuar con el foro...
Volver arriba
Mensaje    Asunto: Responder citando

Anteior soy yo!!
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
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.