#DEFINE GENERIC_READ 0x80000000 >DECLARE INTEGER GetFileInformationByHandle IN Win32API; > INTEGER hFile, STRING @lpFileInformation > >LOCAL lcfile, oFileIO, lnhandle >lcfile = GETFILE("*") >IF NOT EMPTY(lcfile) > SET PROCEDURE TO FILEIO ADDITIVE > oFileIO = CREATEOBJECT('FileOpenClose') > IF oFileIO.OpenFile(lcfile, GENERIC_READ) > lnhandle = oFileIO.nFileHandle > lcFileInfo = REPLICATE(CHR(0), 52) > IF GetFileInformationByHandle(lnhandle, @lcFileInfo) > 0 > SET PROCEDURE TO Con_Int ADDITIVE > oCovert = CREATEOBJECT('ConvertInt') > ? oCovert.StringToInteger(SUBSTR(lcFileInfo, 29, 4)) > ENDIF > oFileIO = NULL > ENDIF >ENDIF > >* FileIO.prg > >DEFINE CLASS FileOpenClose AS CUSTOM > #DEFINE GENERIC_READ 0x80000000 > #DEFINE FILE_SHARE_READ 0x00000001 > #DEFINE FILE_SHARE_WRITE 0x00000002 > #DEFINE FILE_FLAG_NO_BUFFERING 0x20000000 > #DEFINE OPEN_EXISTING 0x00000003 > > * API Open and close existing file routines > > * The file handle > nFileHandle = 0 > > PROCEDURE Init > > DECLARE SHORT CloseHandle IN Win32API; > INTEGER hObject > DECLARE INTEGER CreateFile IN Win32API; > STRING @lpFileName, INTEGER dwDesiredAccess,; > INTEGER dwShareMode, STRING @lpSecurityAttributes,; > INTEGER dwCreationDistribution,; > INTEGER dwFlagsAndAttributes,; > INTEGER hTemplateFile > RETURN > ENDPROC > > FUNCTION OpenFile > > LPARAMETERS pcFileName, pnMode > * pnMode is either GENERIC_READ or > * GENERIC_WRITE > > LOCAL llresult, lcfilename, lnaccess > lcfilename = pcFileName > IF This.nFileHandle # 0 > This.FileClose > ENDIF > IF pnMode = GENERIC_READ > lnaccess = FILE_SHARE_READ > ELSE > lnaccess = FILE_SHARE_WRITE > ENDIF > This.nFileHandle = CreateFile(@lcfilename, pnMode,; > lnaccess, 0, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, 0) > llresult = (This.nFileHandle > -1) > IF NOT llresult > This.nFileHandle = 0 > ENDIF > RETURN llresult > ENDFUNC > > PROCEDURE CloseFile > > IF This.nFileHandle # 0 > = CloseHandle(This.nFileHandle) > This.nFileHandle = 0 > ENDIF > RETURN > ENDPROC > > PROCEDURE Destroy > > This.CloseFile > RETURN > ENDPROC >ENDDEFINE > >* Con_Int.prg > >DEFINE CLASS ConvertInt AS CUSTOM > > FUNCTION IntegerToString > > LPARAMETER pnInteger, pnbytes > > LOCAL lcresult, lnbytes, lnmask,; > lninteger, lni, lnchar > lcresult = "" > IF PCOUNT() = 2 > lnbytes = pnbytes > ELSE > * Default to DWORD > lnbytes = 4 > ENDIF > lninteger = pnInteger > lnmask = 255 > FOR lni = 1 TO lnbytes > lnchar = BITAND(lninteger, lnmask) > lcresult = lcresult + CHR(lnchar) > lninteger = BITRSHIFT(lninteger, 8) > NEXT > RETURN lcresult > ENDFUNC > > FUNCTION StringToInteger > > LPARAMETER pcstring, plsigned > > LOCAL lnresult, lnlast, lni, llsigned,; > lnmsb, lnmax > lnresult = 0 > lnlast = LEN(pcstring) > * Return Signed Integer? > IF PCOUNT() = 2 > llsigned = plsigned > ELSE > llsigned = .F. > ENDIF > FOR lni = 1 TO lnlast > lnresult = lnresult + ASC(SUBSTR(pcstring, lni, 1)) * (256 ^ (lni - 1)) > NEXT > IF llsigned > lnmsb = (lnlast * 8) - 1 > IF BITTEST(lnresult, lnmsb) > lnmax = (2 ^ (lnmsb + 1)) > lnresult = lnresult - lnmax > ENDIF > ENDIF > RETURN lnresult > ENDFUNC >ENDDEFINELet me know if this works and, if so, on what type of network.