mapping network drive inside application -is it possible?

General Help regarding HMG, Compilation, Linking, Samples

Moderator: Rathinagiri

User avatar
mol
Posts: 3720
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Contact:

mapping network drive inside application -is it possible?

Post by mol »

Does anybody know if exists harbour function to map network drive inside application?
I need to hide net use... command
User avatar
andyglezl
Posts: 1461
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Contact:

Re: mapping network drive inside application -is it possible?

Post by andyglezl »

Maybe this...

ShellExecute( 0, "Open", "Net Use", "Parameters. . . . .", NULL, 0 )

or

File.vbs
----------------------------------------------------
set objshell = createobject("wscript.shell")
objshell.run "Net Use . . . . . . . . .",vbhide
----------------------------------------------------
Andrés González López
Desde Guadalajara, Jalisco. México.
edk
Posts: 911
Joined: Thu Oct 16, 2014 11:35 am
Location: Poland

Re: mapping network drive inside application -is it possible?

Post by edk »

Marek, why do you want to map network drives?
Instead of the drive letter, you can refer directly to the network resource by the UNC path, for example:
Instead of USE F:\test.dbf,
where F: is the mapped resource \\server\DriveD
you can:
USE \\server\DriveD\test.dbf
User avatar
mol
Posts: 3720
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Contact:

Re: mapping network drive inside application -is it possible?

Post by mol »

You are right, Edward, but win7 need user and password for shared folder. Using UNC like in your test, I don't have possibility to enter user and pass
User avatar
mol
Posts: 3720
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Contact:

Re: mapping network drive inside application -is it possible?

Post by mol »

andyglezl wrote: Tue May 09, 2017 2:01 pm Maybe this...

ShellExecute( 0, "Open", "Net Use", "Parameters. . . . .", NULL, 0 )

or

File.vbs
----------------------------------------------------
set objshell = createobject("wscript.shell")
objshell.run "Net Use . . . . . . . . .",vbhide
----------------------------------------------------
I thought about such a method, thanks!
edk
Posts: 911
Joined: Thu Oct 16, 2014 11:35 am
Location: Poland

Re: mapping network drive inside application -is it possible?

Post by edk »

mol wrote: Tue May 09, 2017 4:30 pm You are right, Edward, but win7 need user and password for shared folder. Using UNC like in your test, I don't have possibility to enter user and pass
Ale Marek, jak użytkownik jest zalogowany na stacji z uprawnieniami dostępu do serwera na win7 to nie potrzebujesz już podawać poświadczeń.
Poza tym można ustawić Win7/8/10 tak aby można było mieć dostęp do współdzielonego zasobu jako gość bez hasła. Otwierasz Centrum sieci, Zmień zaawansowane ustawienia udostępniania, rozwijasz Wszystkie sieci, wybierasz Wyłącz udostępnianie chronione hasłem.
KDJ
Posts: 243
Joined: Mon Sep 05, 2016 3:04 am
Location: Poland

Re: mapping network drive inside application -is it possible?

Post by KDJ »

Marek

Here is my package of functions in C for mapping network drive (with example):

Code: Select all

#include "hmg.ch"

MEMVAR _HMG_SYSDATA

FUNCTION Main()
  LOCAL cDrive    := "Z:"
  LOCAL cResource := "\\www.ajaxfilebrowser.com/Userc5aebf4"
  LOCAL cUser     := ""
  LOCAL cPassword := ""

  SET FONT TO 'MS Shell Dlg', 8

  DEFINE WINDOW Main;
    MAIN;
    ROW     100;
    COL     100;
    WIDTH   350;
    HEIGHT  170;
    TITLE   "Map network drive";
    ON INIT MainUpdate(cDrive)

    DEFINE LABEL Drive
      ROW    10
      COL    10
      WIDTH  300
      HEIGHT 13
      VALUE  "Drive: " + cDrive
    END LABEL

    DEFINE LABEL Resource
      ROW    30
      COL    10
      WIDTH  300
      HEIGHT 13
      VALUE  "Resource: " + cResource
    END LABEL

    DEFINE LABEL User
      ROW    50
      COL    10
      WIDTH  300
      HEIGHT 13
      VALUE  "User: " + cUser
    END LABEL

    DEFINE LABEL Password
      ROW    70
      COL    10
      WIDTH  300
      HEIGHT 13
      VALUE  "Password: " + cPassword
    END LABEL

    DEFINE BUTTON Connect
      ROW     100
      COL     10
      WIDTH   100
      HEIGHT  25
      CAPTION "Connect (Map)"
      ACTION  Connect(cDrive, cResource, cUser, cPassword)
    END BUTTON

    DEFINE BUTTON Disconnect
      ROW     100
      COL     120
      WIDTH   100
      HEIGHT  25
      CAPTION "Disconnect"
      ACTION  Disconnect(cDrive)
    END BUTTON

    DEFINE BUTTON Browse
      ROW     100
      COL     230
      WIDTH   100
      HEIGHT  25
      CAPTION "Browse"
      ACTION  Browse(cDrive)
    END BUTTON

    ON KEY ESCAPE ACTION Main.RELEASE
  END WINDOW

  Main.ACTIVATE

RETURN NIL


FUNCTION MainUpdate(cDrive)
  LOCAL nType := GetDriveType(cDrive + '\')

  Main.Drive.VALUE := "Drive: " + cDrive + If(nType == 1, "", " (connected)")

  Main.Disconnect.ENABLED := (nType != 1 /*DRIVE_NO_ROOT_DIR*/)
  Main.Browse.ENABLED     := (nType != 1 /*DRIVE_NO_ROOT_DIR*/)

  Main.Connect.SETFOCUS

RETURN NIL


FUNCTION Connect(cDrive, cRes, cUser, cPass)
  LOCAL nType := GetDriveType(cDrive + '\')
  LOCAL nError

  IF (nType == 1 /*DRIVE_NO_ROOT_DIR*/)
    nError := NetAddConnection(cDrive, cRes, cUser, cPass)

    IF nError != 0
      MsgBox("Can not connect." + CRLF + "Error code: " + HB_NtoS(nError) + CRLF + GetSystemErrorMessage(nError))
    ENDIF
  ELSE
    MsgBox("Can not connect, drive is already connected!")
  ENDIF

  MainUpdate(cDrive)

RETURN NIL


FUNCTION Disconnect(cDrive)

  NetCancelConnection(cDrive, .T. /*force disconnect*/)
  MainUpdate(cDrive)

RETURN NIL


FUNCTION Browse(cDrive)

  EXECUTE FILE 'explorer.exe' PARAMETERS '/e, ' + cDrive

RETURN NIL


#pragma BEGINDUMP

#include "SET_COMPILE_HMG_UNICODE.ch"
#include "HMG_UNICODE.h"

#include <windows.h>
#include "hbapi.h"


      // https://msdn.microsoft.com/en-us/library/windows/desktop/aa364939(v=vs.85).aspx
      // GetDriveType(cRootPathName)
HB_FUNC( GETDRIVETYPE )
{
  hb_retni(GetDriveType(HMG_parc(1)));
}


      // https://msdn.microsoft.com/en-us/library/windows/desktop/aa385413(v=vs.85).aspx
      // NetAddConnection(cDrive, cResource, cUser, cPass)
HB_FUNC( NETADDCONNECTION )
{
  NETRESOURCE NetRes;

  NetRes.dwType       = RESOURCETYPE_DISK;
  NetRes.lpLocalName  = HMG_parc(1);
  NetRes.lpRemoteName = HMG_parc(2);
  NetRes.lpProvider   = NULL;

  hb_retni(WNetAddConnection2(&NetRes, HMG_parc(4), HMG_parc(3), CONNECT_UPDATE_PROFILE));
}


      // https://msdn.microsoft.com/en-us/library/windows/desktop/aa385427(v=vs.85).aspx
      // NetCancelConnection(cDrive, lForce)
HB_FUNC( NETCANCELCONNECTION )
{
  hb_retni(WNetCancelConnection2(HMG_parc(1), CONNECT_UPDATE_PROFILE, (BOOL) hb_parl(2)));
}


      // https://msdn.microsoft.com/en-us/library/windows/desktop/aa385453(v=vs.85).aspx
      // NetGetConnection(cDrive)
HB_FUNC( NETGETCONNECTION )
{
  TCHAR lpName[MAX_PATH];
  DWORD nBufLen = MAX_PATH;

  if (WNetGetConnection(HMG_parc(1), lpName, &nBufLen) == NO_ERROR)
    HMG_retc(lpName);
  else
    HMG_retc(NULL);
}


      // https://msdn.microsoft.com/en-us/library/windows/desktop/aa385476(v=vs.85).aspx
      // NetGetUser(cDrive)
HB_FUNC( NETGETUSER )
{
  TCHAR lpName[MAX_PATH];
  DWORD nBufLen = MAX_PATH;

  if (WNetGetUser(HMG_parc(1), lpName, &nBufLen) == NO_ERROR)
    HMG_retc(lpName);
  else
    HMG_retc(NULL);
}


      // https://msdn.microsoft.com/en-us/library/windows/desktop/ms679351(v=vs.85).aspx
      // GetSystemErrorMessage(nError)
HB_FUNC( GETSYSTEMERRORMESSAGE )
{
  DWORD  dwError = hb_parni(1);
  LPVOID lpMsgBuf;

  FormatMessage(
    FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | 72,
    NULL,
    dwError,
    MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
    (LPTSTR) &lpMsgBuf,
    0,
    NULL);

  HMG_retc(lpMsgBuf);

  //HeapFree(GetProcessHeap(), 0, lpMsgBuf);
  LocalFree(lpMsgBuf);
}

#pragma ENDDUMP
Post Reply