set talk off set resource off SET Default To (Sys(5)+Alltrim(Sys(2003))) _SCREEN.VISIBLE = .F. Declare String CpuID In utility.Dll cp1=alltrim(CpuID()) LOCAL LCROOTPATHNAME , LCVOLUMENAMEBUFFER , LNVOLUMENAMESIZE , ; LNVOLUMESERIALNUMBER , LNMAXIMUMCOMPONENTLENGTH, LNFILESYSTEMFLAGS , ; LCFILESYSTEMNAMEBUFFER, LNFILESYSTEMNAMESIZE , LCVOLNAME DECLARE SHORT GetVolumeInformation IN kernel32 ; STRING lpRootPathName,; STRING @lpVolumeNameBuffer,; INTEGER nVolumeNameSize,; INTEGER @lpVolumeSerialNumber,; INTEGER @lpMaximumComponentLength,; INTEGER @lpFlags,; STRING @lpFileSystemNameBuffer,; INTEGER nFileSystemNameSize LCROOTPATHNAME = "C:\" LCVOLUMENAMEBUFFER = SPACE(256) LNVOLUMENAMESIZE = 256 LNVOLUMESERIALNUMBER = 0 LNMAXIMUMCOMPONENTLENGTH = 256 LNFILESYSTEMFLAGS = 0 LCFILESYSTEMNAMEBUFFER = SPACE(256) LNFILESYSTEMNAMESIZE = 256 =GETVOLUMEINFORMATION(@LCROOTPATHNAME , @LCVOLUMENAMEBUFFER , ; LNVOLUMENAMESIZE , @LNVOLUMESERIALNUMBER, ; @LNMAXIMUMCOMPONENTLENGTH, @LNFILESYSTEMFLAGS , ; @LCFILESYSTEMNAMEBUFFER , LNFILESYSTEMNAMESIZE ) hdsr= TRANSFORM(LNVOLUMESERIALNUMBER) Declare String CpuID In utility.Dll cp1=alltrim(CpuID()) messagebox("Processor"+chr(13); +cp1+chr(13)+chr(13)+"Hard Disk"+chr(13)+hdsr,0+32,"Serial No.") _SCREEN.VISIBLE = .T.Tha is whole project. But as I said when you run the EXE OpenDialog appears.