FUNCTION MapDevice >>LPARAMETERS tcLocal, tcRemote, tcUserID, tcPassword, tlPermanent >>LOCAL oHeapObj, oNetRsc, nResult >>IF ! 'CLSHEAP' $ UPPER(SET('PROC')) >> SET PROCEDURE TO CLSHEAP ADDITIVE >>ENDIF >>IF ! 'NETRSC' $ UPPER(SET('PROC')) >> SET PROCEDURE TO NETRSC ADDITIVE >>ENDIF >>oHeapObj=CREATEOBJ('Heap') && I need a heap to allocate a static block >> >>oNetRsc=CREATEOBJ('NETRESOURCE',oHeapObj) >> >>oNetRsc.SetRemoteName(tcRemote) && UNC of remote device >>oNetRsc.SetLocalName(cLocal) && Local device name > >* typo - should read: >oNetRsc.SetLocalName(tcLocal) && Local device name > >*Whip me, beat me, make me write COBOL >> >>IF TYPE('tcUserID') # 'C' && No userid specified - null, use WinLogin >> tcUserID = 0 >>ELSE >> tcUserID = tcUserID + CHR(0) >>ENDIF >>IF TYPE('tcPassword') # 'C' && No password given - null, use WinLogin >> tcPassword = 0 >>ELSE >> tcPassword = tcPassword + CHR(0) >>ENDIF >>* Create the NETRESOURCE for the API call >>oNetRsc.BuildNETRESOURCE() >> >>DECLARE INTEGER WNetAddConnection3 IN WIN32API ; >> INTEGER hWnd, ; >> STRING @ lpNETRESOURCE, ; >> STRING @ lpPassword, ; >> STRING @ lpUserID, ; >> INTEGER dwFlags >>DECLARE INTEGER GetActiveWindow IN WIN32API && If we need a dialog for driver >> && install, root to active window >> >>* tlPermanent indicates that we want to reestablish this mapping at next login >> >>nResult = WNetAddConnection3(GetActiveWindow() , ; >> oNetRsc.cNETRESOURCE, ; >> tcPassword, ; >> tcUserID, ; >> IIF(tlPermanent,1,0) ) >>oNetRsc = NULL >>oHeapObj = NULL >>RETURN nResult >> >>* To use this: >>nError = MapDevice('LPT2:','\\PrtServer\PrtShare','MyUserID','Password') >>IF nError = 0 >> * LPT2: now mapped to the remote printer >>ELSE >> * Error is one of: ERROR_ACCESS_DENIED, ERROR_ALREADY_ASSIGNED, >> * ERROR_BAD_DEV_TYPE, ERROR_BAD_DEVICE, ERROR_BAD_NET_NAME, >> * ERROR_BAD_PROFILE, ERROR_BAD_PROVIDER, ERROR_BUSY, >> * ERROR_CANCELLED, ERROR_CANNOT_OPEN_PROFILE, >> * ERROR_EXTENDED_ERROR, ERROR_INVALID_PASSWORD, ERROR_NO_NET_OR_BAD_PATH, >> * ERROR_NO_NETWORK >>ENDIF>>
DECLARE INTEGER WNetCancelConnection2 IN MPR STRING @, INTEGER, INTEGER >>=WNetCancelConnection2('LPT2:',0,-1)>>