 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
_Viktor Master


Registrado: 20 Jul 2003Mensajes: 463Ubicación: Santiago, Los Angeles - Chile
|
Publicado: Mar 20 Abr, 2004 6:41 pm Asunto: Crear unidad de Red... |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 20 Abr, 2004 8:16 pm Asunto: |
|
|
Deja lo encuentro, y te lo paso, yo lo tengo.. _________________
 |
|
| Volver arriba |
|
 |
_Viktor Master


Registrado: 20 Jul 2003Mensajes: 463Ubicación: Santiago, Los Angeles - Chile
|
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 21 Abr, 2004 12:14 am Asunto: |
|
|
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... _________________
 |
|
| Volver arriba |
|
 |
_Viktor Master


Registrado: 20 Jul 2003Mensajes: 463Ubicación: Santiago, Los Angeles - Chile
|
Publicado: Mie 21 Abr, 2004 6:50 pm Asunto: |
|
|
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.
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 22 Abr, 2004 1:06 am Asunto: |
|
|
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.. _________________
 |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 22 Abr, 2004 6:34 am Asunto: |
|
|
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 _________________
 |
|
| Volver arriba |
|
 |
_Viktor Master


Registrado: 20 Jul 2003Mensajes: 463Ubicación: Santiago, Los Angeles - Chile
|
Publicado: Jue 22 Abr, 2004 6:58 pm Asunto: |
|
|
Vale Cesar, en un momento me pongo a probar ambos codigos y te cuento si le encontre el error al ultimo
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...
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 |
|
 |
Invitado
|
Publicado: Vie 23 Abr, 2004 12:48 am Asunto: |
|
|
| 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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 23 Abr, 2004 12:55 am Asunto: |
|
|
Anteior soy yo!! _________________
 |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|