_Asynchronous Communication and Visual FoxPro_ by Bob Howard Listing One 001 *!* Sendit.PRG *!* 002 003 SET PROC TO sendit.prg 004 005 *!* Function to Dial the Connection 006 007 DECLARE INTEGER RasDial ; 008 IN C:\WINDOWS\SYSTEM\RASAPI32.DLL ; 009 INTEGER @, INTEGER @, STRING @, INTEGER , INTEGER , INTEGER @ 010 011 *!* Function to return any errors from the connection 012 013 DECLARE INTEGER RasGetErrorString ; 014 IN C:\WINDOWS\SYSTEM\RASAPI32.DLL ; 015 INTEGER , STRING @ , INTEGER 016 017 *!* Function to hang up the phone 018 019 DECLARE INTEGER RasHangUp ; 020 IN C:\WINDOWS\SYSTEM\RASAPI32.DLL ; 021 INTEGER 022 023 *!* Map a hard drive (volume name) to a drive letter 024 025 DECLARE INTEGER WNetAddConnection IN Win32API ; 026 STRING @ , STRING @ , STRING @ 027 028 *!* Un-map a local drive letter from a remote drive. 029 030 DECLARE INTEGER WNetCancelConnection IN Win32API ; 031 STRING @ , INTEGER 032 033 Zero_value = 0 034 Connection_Handle = 0 && Connection Handle that RASAPI32.DLL gives back 035 && We will use this to hang up the phone. 036 037 Double_word_size = CHR(28)+CHR(4)+CHR(0)+CHR(0) 038 && Value of 1052 represented as a string 039 Connection_Name = PADR('My Office'+CHR(0),257) 040 Connection_Number = PADR('555-1212'+CHR(0),129) 041 Callback_Number = PADR(''+CHR(0),129) 042 User_Name = PADR('RDH'+CHR(0),257) 043 Connection_Password = PADR('MyPassword'+CHR(0),257) 044 Domain_name = PADR(''+CHR(0),16) 045 046 String_to_pass = Double_word_size + ; 047 Connection_Name + ; 048 Connection_Number + ; 049 Callback_Number + ; 050 User_Name + ; 051 Connection_Password + ; 052 Domain_name 053 054 String_to_pass = PADR(String_to_pass,LEN(String_to_pass)+ 055 (4 - LEN(String_to_pass) % 4)) 056 WAIT 'Dialing ' + SUBSTR(Connection_Name,1,50) WINDOW NOWAIT 057 058 Return_Value=RasDial(Zero_value,Zero_value,@String_to_pass,Zero_value, ; 059 Zero_value, @Connection_Handle) 060 061 IF !EMPTY(Return_Value) 062 Message_Buffer = SPACE(256) && Placeholder for error message 063 IF !EMPTY(RasGetErrorString(Return_Value,@Message_Buffer, 064 LEN(Message_Buffer))) 065 WAIT 'Unknown error' WINDOW 066 ELSE 067 WAIT ALLTRIM(Message_Buffer) WINDOW 068 ENDIF 069 ENDIF 070 Drive_letter = 'W:' 071 Volume_name = '\\My Office\C' 072 Drive_Password = '' 073 074 IF !EMPTY(WNetAddConnection(@Volume_name, @Drive_Password, @Drive_letter)) 075 WAIT 'Drive not mapped' WINDOW 076 ELSE 077 WAIT 'Drive mapped.... ' + ALLTRIM(Volume_name) + ' to ' + ; 078 Drive_letter WINDOW 078 TIMEOUT 3 079 ENDIF 080 081 *------------------------------------------------------------------------ 082 083 COPY FILE C:\autoexec.bat TO W:\Temp\Autoexec.bat 084 085 IF FILE('\\My Office\C\Temp\Autoexec.bat') 086 WAIT 'Copied Successfully' WINDOW TIMEOUT 5 087 ELSE 088 WAIT 'Not Copied' WINDOW 089 ENDIF 090 091 *!* Un-map a local drive letter from a remote drive 092 093 Drive_letter = 'W:' 094 095 IF !EMPTY(WNetCancelConnection(Drive_letter, .T.)) 096 WAIT 'Un-mapping Failed' WINDOW NOWAIT 097 ELSE 098 WAIT 'Un-mapped ' + Drive_letter + '.' WINDOW NOWAIT 099 ENDIF 100 101 Return_Value = RasHangUp(Connection_Handle) && hangup the connection 102 103 WAIT '' TIMEOUT .5 104 WAIT 'Process Complete.' WINDOW 106 107 Function Convert_to_Double_Word 108 109 Double_word_size = '' 110 Number_to_convert = 1052 111 FOR i = 1 TO 4 112 Double_word_size = Double_word_size + CHR(Number_to_convert % 256) 113 Number_to_convert = INT(Number_to_convert / 256) 114 NEXT 115 RETURN Double_word_size