mapping network drive inside application -is it possible?

General Help regarding HMG, Compilation, Linking, Samples

Moderator: Rathinagiri

User avatar
mol
Posts: 2841
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Has thanked: 118 times
Been thanked: 64 times
Contact:

mapping network drive inside application -is it possible?

Post by mol » Tue May 09, 2017 1:32 pm

Does anybody know if exists harbour function to map network drive inside application?
I need to hide net use... command

User avatar
andyglezl
Posts: 839
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Has thanked: 7 times
Been thanked: 22 times
Contact:

Post by andyglezl » 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
----------------------------------------------------
Andrés González López
Desde Guadalajara, Jalisco. México.

edk
Posts: 166
Joined: Thu Oct 16, 2014 11:35 am
DBs Used: DBF
Location: Poland
Has thanked: 43 times
Been thanked: 97 times

Post by edk » Tue May 09, 2017 2:17 pm

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: 2841
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Has thanked: 118 times
Been thanked: 64 times
Contact:

Post by mol » 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

User avatar
mol
Posts: 2841
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Has thanked: 118 times
Been thanked: 64 times
Contact:

Post by mol » Tue May 09, 2017 4:32 pm

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: 166
Joined: Thu Oct 16, 2014 11:35 am
DBs Used: DBF
Location: Poland
Has thanked: 43 times
Been thanked: 97 times

Post by edk » Tue May 09, 2017 6:20 pm

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: 166
Joined: Mon Sep 05, 2016 3:04 am
Location: Poland
Been thanked: 149 times

Post by KDJ » Tue May 09, 2017 7:38 pm

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