Originally started in this thread.

What is Softwhere?
Softwhere is a GUI script that is designed to inventory and report software installed across a network.

All files pictures and the script are contained here.
http://www.geocities.com/greenmaze/softwhere/

The script was renamed to a txt file because google sucks.

Features
Scan computers across a network one at a time or as many as you want at a time.

Manage scan loggs based on age.

Easily add computers to the database as well as delete the entire database.

A form to view software installed on a computer and another form to view what computers a piece of software is installed on.

Create html reports based off of the forms mentioned above.

Requires
Kixtart v2001 4.12 Beta 1
Kixforms v2.0.5
Both available at http://www.kixforms.freeuk.com
NetView2 UDF
SerialDate UDF

Setup
Edit the first two lines and point them to the UDFs specified in the requirements.

Download the Access database inventory.mdb.

The first time you run the script it will ask you to specify a few directories. Make sure you end these directories with a \. Example: E:\loggs\

code:
Call ("E:\kix\UDF\NetView2.UDF")
Call ("E:\kix\UDF\SerialDate.UDF")

Break on

Dim $SearArr, $ComputerArr, $Array1, $Array2, $DBMg1[1], $Comprenew

$FORM = CreateObject("Kixtart.FORM")

$FORM.CAPTION = "Softwhere"
$FORM.HEIGHT = 350
$FORM.WIDTH = 210
$FORM.FONTNAME = "Arial"
$FORM.FONTSIZE = 9
$FORM.CENTER
$FORM.BorderStyle = 2


$SoftPict = $Form.PictureBox(,1,3,$FORM.Width-12,$FORM.Height/8)
$SoftPict.BackColor = 255,255,255
$SoftPict.ForeColor = 0,100,100
$SoftPict.FONTNAME = "verdana"
$SoftPict.FONTSIZE = 20
$SoftPict.PrintXY(20,3,"Softwhere?")
$ScanButton = $FORM.CommandButton("Scan Computers",3,$SoftPict.Height+$SoftPict.Top+4,$FORM.Width-12,$FORM.Height/8)
$DBMgButton = $FORM.CommandButton("Database Management",3,$ScanButton.Top+$ScanButton.Height+4,$FORM.Width-12,
$FORM.Height/8)
$SoftButton = $FORM.CommandButton("Search for Software by Computer",3,$DBMgButton.Height+$DBMgButton.Top+4,$FORM.Width-12,
$FORM.Height/8)
$CompButton = $FORM.CommandButton("Search for Computer by Software",3,$SoftButton.Height+$SoftButton.Top+4,$FORM.Width-12,
$FORM.Height/8)
$SetupButton = $FORM.CommandButton("Softwhere Setup",3,$CompButton.Height+$CompButton.Top+4,$FORM.Width-12,$FORM.Height/8)
$QuitButton = $FORM.CommandButton("Quit",3,$SetupButton.Top + $SetupButton.Height + 4,$FORM.Width-12,$FORM.Height/8-8)
$ScanButton.OnClick = '$$ScanForm.Show'
$DBMgButton.OnClick = '$$DBManage.Show $$DBMg = DirAgeList($$loggpath) $$FileBox.List = $$DBMg[0]'
$SoftButton.OnClick = '$$ReportLstBox.Clear redim $$ReportArr $$ReportFrm.Show $$CompForm.Show $$ReturnData=GetDBData()
$$CompArr = CompForm($$ReturnData)'
$CompButton.OnClick = '$$ReportLstBox.Clear redim $$ReportArr $$ReportFrm.Show $$SoftForm.Show $$ReturnData2=GetDBData()
$$SoftArr = SoftForm($$ReturnData2)'
$SetupButton.OnClick = '$$SofSetup.Show'
$QuitButton.OnClick = 'Quit()'


$ScanForm = CreateObject("Kixtart.FORM")
$ScanForm.CAPTION = "Scan Computers"
$ScanForm.HEIGHT = 320
$ScanForm.WIDTH = 517
$ScanForm.FONTNAME = "Arial"
$ScanForm.FONTSIZE = 9
$ScanForm.CENTER
$ScanForm.BorderStyle = 2
$FraScan = $ScanForm.Frame("",5,5,$ScanForm.WIDTH-17,$ScanForm.HEIGHT-35)
$ScanCompTxt = $FraScan.Label("Computer",10,15,60,15)
$ScanCompBox = $FraScan.TextBox("",10,$ScanCompTxt.Top+$ScanCompTxt.Height+2,150,20)
$ScanDomainTxt = $FraScan.Label("Domain",10,$ScanCompBox.Top+$ScanCompBox.Height+7,60,15)
$ScanDomainBox = $FraScan.TextBox("@Domain",10,$ScanDomainTxt.Top+$ScanDomainTxt.Height+2,150,20)
$ScanCompLB = $FraScan.ListBox(,10,$ScanDomainBox.Top+$ScanDomainBox.Height+2,150,180-2)

$ScanCompLB.OnDoubleClick= 'ReDim preserve $$ComputerArr[Ubound($$ComputerArr)+1] $$ComputerArr[Ubound($$ComputerArr)]
= $$ScanCompLB.text $$TargetComp.AddItem ($$ScanCompLB.Value) $$ScanCompLB.RemoveItem
($$ScanCompLB.Listindex)'
$AddComp = $FraScan.CommandButton("Add",$ScanCompBox.Left+$ScanCompBox.Width+5,$ScanCompBox.Top,50,$ScanCompBox.Height)
$AddComp.OnClick = 'if $$ScanCompBox.Text <> "" $$TargetComp.AddItem ($$ScanCompBox.Text) ReDim preserve
$$ComputerArr[Ubound($$ComputerArr)+1] $$ComputerArr[Ubound($$ComputerArr)] = $$ScanCompBox.Text
$$ScanCompBox.Text = "" $$NoLogg.Enabled = 1 $$LoggOlder.Enabled = 1 EndIf $$ScanCompBox.SetFocus'
$ListDomain = $FraScan.CommandButton("List",$AddComp.Left,$ScanDomainBox.Top,$AddComp.Width,$AddComp.Height)
$ListDomain.OnClick = '$$CompListArr = netview2($$ScanDomainBox.Text) $$ScanCompLB.List = $$CompListArr'
$AddComp2 = $FraScan.CommandButton("Add",$AddComp.Left,$ScanCompLB.Top,$AddComp.Width,$AddComp.Height)
$AddComp2.OnClick = 'if $$ScanCompLB.Value <> "" $$TargetComp.AddItem ($$ScanCompLB.Value)
ReDim preserve $$ComputerArr[Ubound($$ComputerArr)+1] $$ComputerArr[Ubound($$ComputerArr)]
= $$ScanCompLB.text $$ScanCompLB.RemoveItem ($$ScanCompLB.Listindex) $$ScanCompLB.SetFocus
$$=SendKeys({down}{down}) $$NoLogg.Enabled = 1 $$LoggOlder.Enabled = 1 EndIf'
$AddAll2 = $FraScan.CommandButton("Add All",$AddComp.Left,$AddComp2.Top+$AddComp2.Height+2,$AddComp.Width,$AddComp.Height)
$AddAll2.OnClick = '$$ScanCompLB.SetFocus $$=SendKeys({up}) if $$ScanCompLB.Value <> "" for each
$$target in $$complistarr $$TargetComp.additem ($$target) ReDim preserve
$$ComputerArr[Ubound($$ComputerArr)+1] $$ComputerArr[Ubound($$ComputerArr)] =
$$target Next $$ScanCompLB.Clear $$NoLogg.Enabled = 1 $$LoggOlder.Enabled = 1 EndIf'
$ChosenCompLst = $FraScan.Label("Selected Computers",$AddComp.Left+$AddComp.Width+5,$ScanCompTxt.Top,200,15)
$TargetComp = $FraScan.ListBox(,$ChosenCompLst.Left,$ScanCompBox.Top,$ScanCompLB.Width,$ScanCompLB.Height+65+1)
$RemoveComp = $FraScan.CommandButton("Remove from list",$TargetComp.Left+$TargetComp.Width+5,$TargetComp.Top,115,20)
$RemoveComp.OnClick = 'if $$TargetComp.Text <> "" $$TargetCompText = $$TargetComp.Text $$ComputerArr =
RemFromArray($$ComputerArr,$$TargetCompText) $$TargetComp.RemoveItem
($$TargetComp.Listindex) $$TargetComp.SetFocus $$=SendKeys({down}{down}) EndIf'
$RemoveAll = $FraScan.CommandButton("Remove All", $RemoveComp.Left,$RemoveComp.Top+$RemoveComp.Height+2,$RemoveComp.Width,20)
$RemoveAll.OnClick = '$$TargetComp.Clear redim $$COmputerArr $OlderBox.Enabled = 0 $NoLogg.Enabled = 0
$LoggOlder.Enabled = 0 $OlderListCB.Enabled = 0'
$ShowLbl = $FraScan.Label("Show computers with",$RemoveComp.Left,$RemoveAll.Top+$RemoveAll.Height+10,$RemoveComp.Width+7,15)
$NoLogg = $FraScan.CheckBox("no logg file",$RemoveComp.Left,$ShowLbl.Top+$ShowLbl.Height+5,$RemoveComp.Width,15)
$LoggOlder = $FraScan.CheckBox("logg file older than specified days",$RemoveComp.Left,$NoLogg.Top+$NoLogg.Height+5,
$RemoveComp.Width+8,30)
$OlderBox = $FraScan.Textbox("0",$RemoveComp.Left,$LoggOlder.Top+$LoggOlder.Height+2,30,20)
$OlderListCB = $FraScan.CommandButton("List",$OlderBox.Left+$OlderBox.Width+5,$OlderBox.Top,40,20)
$LoggOlder.Onclick = 'if $$LoggOlder.Value = 1 $$OlderBox.Enabled = 1 $$NoLogg.Enabled = 0 $$OlderListCB.Enabled = 1
Else $$OlderBox.Enabled = 0 $$NoLogg.Enabled = 1 $$OlderListCB.Enabled = 0 EndIf '
$NoLogg.Onclick = 'if $$NoLogg.Value = 1 $$LoggOlder.Enabled = 0 $$CheckAge =
DirAgeList($$Loggpath) For Each $$chkcomp in $$CheckAge[2] $$ComputerArr =
RemFromArray($$ComputerArr,$$chkcomp) Next Else $$LoggOlder.Enabled = 1 EndIf
$$TargetComp.List = $$ComputerArr'
$OlderListCB.Onclick = 'if $$OlderBox.Text <> "" $$comparedate = serialdate(@@date) - $$OlderBox.Text $$CheckAge =
DirAgeList($$Loggpath) For Each $$chkcomp in $$ComputerArr $$chkcount = 0 For Each $$chkcomp2
in $$Checkage[2] If $$chkcomp = $$chkcomp2 If $$Checkage[1][$$chkcount] =< $$comparedate
ReDim preserve $$Comprenew[Ubound($$Comprenew)+1] $$Comprenew[Ubound($$Comprenew)] = $$chkcomp
EndIf EndIf $$chkcount = $$chkcount+1 Next Next $$ComputerArr = $$Comprenew $$TargetComp.Clear
$$TargetComp.List = $$ComputerArr ReDim $$Comprenew EndIf'
$OlderBox.Enabled = 0
$NoLogg.Enabled = 0
$LoggOlder.Enabled = 0
$OlderListCB.Enabled = 0

$ScanList = $FraScan.CommandButton("Scan List",$RemoveAll.Left,$TargetComp.Top+$TargetComp.Height-62,$RemoveAll.Width,40)
$ScanList.Onclick = '$$DataCmDBt.Enabled = 0 $$DataOut.Show SoftwareScan($$ComputerArr,$$loggpath)'
$ExitScan = $FraScan.CommandButton("Exit",$ScanList.Left,$ScanList.top+$ScanList.height+2,$ScanList.width,20)
$ExitScan.Onclick = '$$Scanform.Show(0)'

$DataOut = CreateObject("Kixtart.FORM")
$DataOut.CAPTION = ""
$DataOut.HEIGHT = 378
$DataOut.WIDTH = 500
$DataOut.FONTNAME = "Arial"
$DataOut.FONTSIZE = 9
$DataOut.CENTER
$DataListBx = $DataOut.ListBox(,5,5,484,315)
$DataCmDBt = $DataOut.CommandButton("Done",395,$DataListBx.Top + $DataListBx.Height+5,95,25)
$DataCmDBt.Enabled = 0
$ProgData = $DataOut.ProgressBar(,5,$DataCmDBt.Top,385,25)
$DataCmDBt.OnClick = '$$DataOut.Show(0) $$DataListBx.Clear'

$DBManage = CreateObject("Kixtart.FORM")
$DBManage.CAPTION = "Database Management"
$DBManage.HEIGHT = 320
$DBManage.WIDTH = 470
$DBManage.FONTNAME = "Arial"
$DBManage.FONTSIZE = 9
$DBManage.CENTER
$DBManage.BorderStyle = 2
$FraDB = $DBManage.Frame("",5,5,$DBManage.WIDTH-17,$DBManage.HEIGHT-35)
$FileLbl = $FraDB.Label("Files in Logg directory",10,10,170,15)
$FileBox = $FraDB.ListBox(,$FileLbl.Left,$FileLbl.Top+$FileLbl.Height+2,200,250)
$FraDel = $FraDB.Frame("",$FileBox.Left+$FileBox.width+10,0,$FraDB.Width-$FileBox.Width-21,110)
$RecordBn = $FraDel.CommandButton("Delete all records in database",10,15,210,25)
$LoggBn = $FraDel.CommandButton("Delete all logg files",10,$RecordBn.Top+$RecordBn.Height+5,210,25)
$DayLoggBn = $FraDel.CommandButton("Delete logg files over",10,$LoggBn.Top+$LoggBn.Height+5,130,25)
$DaysTxt = $FraDel.TextBox("0",$DayLoggBn.Left+$DayLoggBn.Width+3,$DayLoggBn.TOp,30,$DayLoggBn.Height-2)
$DaysLbl = $FraDel.Label("days old",$DaysTxt.Left+$DaysTxt.Width+3,$DaysTxt.Top+3,50,15)
$Parseone = $FraDB.CommandButton("Parse selected logg file now",$FraDel.Left+10,$FraDel.Height+10,$RecordBn.Width,
$RecordBn.Height)
$ParseAll = $FraDB.CommandButton("Parse all logg files now",$FraDel.Left+10,$Parseone.Top+$Parseone.Height+5,
$RecordBn.Width,$RecordBn.Height)
$DBExit = $FraDB.CommandButton("Exit",$FraDel.Left+10,$FileBox.Top+$FileBox.Height-$RecordBn.Height,$RecordBn.Width,
$RecordBn.Height)
$RecordBn.Onclick = 'Cleardatabase()'
$LoggBn.Onclick = '$$FileBox.Clear for each $$delfil in $$DBMg[0] del "$$loggpath$$delfil" next'
$DayLoggBn.Onclick = '$$delcoun = 0 for each $$delfile in $$DBMg[0] if $$DBMg[1][$$delcoun] >
SerialDate(@@date)-$$DaysTxt.Value ReDim preserve $$Array1[Ubound($$Array1)+1]
ReDim preserve $$Array2[Ubound($$Array2)+1] $$Array1[Ubound($$Array1)] = $$DBMg[0][$$delcoun]
$$Array2[Ubound($$Array2)] = $$DBMg[1][$$delcoun] Else Del "$$loggpath$$delfile" EndIf
$$delcoun = $$delcoun+1 Next $$FileBox.Clear $$FileBox.List = $$Array1 $$DBMg1[0] =
$$Array1 $$DBMg1[1] = $$Array2 $$DBMg = $$DBMg1 ReDim $$Array1, $$Array2'
$Parseone.Onclick = '$$DataCmDBt.Enabled = 0 $$DataOut.Show ParsetoDB($$FileBox.text,$$Loggpath)'
$ParseAll.Onclick = '$$DataCmDBt.Enabled = 0 $$DataOut.Show ParsetoDB($$DBMg[0],$$Loggpath)'
$DBExit.OnClick = '$$DBManage.Show(0)'



$CompForm = CreateObject("Kixtart.FORM")
$CompForm.CAPTION = "Search for Software by Computer"
$CompForm.HEIGHT = 485
$CompForm.WIDTH = 385
$CompForm.FONTNAME = "Arial"
$CompForm.FONTSIZE = 9
$CompForm.CENTER
$FraComp = $CompForm.Frame("",5,5,368,450)
$SelCompTxt = $FraComp.Label("Select a Computer:",10,20,150,20)
$SelCompBox = $FraComp.ListBox(,10,40,190,150)
$InsProTxt = $FraComp.Label("Installed Programs:",10,200,150,20)
$InsProBox = $FraComp.ListBox(,10,220,345,190)
$ExitButton = $FraComp.CommandButton("Exit",210,160,150-2,30)
$AddAllReport = $FraComp.CommandButton("Add all to report",210,40,150-2,30)
$AddtoReport = $FraComp.CommandButton("Add to report",210,70,150-2,30)
$CreateReport = $FraComp.CommandButton("Create report",210,100,150-2,30)
$ClearReport = $FraComp.CommandButton("Remove all from report",210,130,150-2,30)
$ProgComp = $FraComp.ProgressBar(,10,420,347,20)
$SelCompBox.Sorted = 1
$InsProBox.Sorted = 1
$ProgComp.Min = 0
$ExitButton.OnClick = '$$CompForm.Show(0) $$ReportFrm.Show(0) $$SelCompBox.Clear $$InsProBox.Clear'
$SelCompBox.OnClick = '$$InsProBox.List = GetInfo($$SelCompBox.Value,$$0,$$1,$$ReturnData)'
$AddAllReport.OnClick = '$$ReportLstBox.List = $$CompArr $$ReportArr = $$CompArr'
$AddtoReport.OnClick = 'if $$SelCompBox.Text <> "" $$ReportLstBox.AddItem ($$SelCompBox.Text) redim preserve
$$reportarr[Ubound($$reportarr)+1] $$reportarr[Ubound($$reportarr)] = $$SelCompBox.Text EndIf'
$CreateReport.OnClick = 'Report($$ReturnData,$$ReportArr,$$CompForm.CAPTION)'
$ClearReport.OnClick = '$$ReportLstBox.Clear redim $$ReportArr'


$SoftForm = CreateObject("Kixtart.FORM")
$SoftForm.CAPTION = "Search for Computer by Software"
$SoftForm.HEIGHT = 485
$SoftForm.WIDTH = 385
$SoftForm.FONTNAME = "Arial"
$SoftForm.FONTSIZE = 9
$SoftForm.CENTER
$FraSoft = $SoftForm.Frame("",5,5,368,450)
$SelProgTxt = $FraSoft.Label("Select Software:",10,20,150,20)
$SelProBox = $FraSoft.ListBox(,10,40,345,190)
$InsCompTxt = $FraSoft.Label("Installed on this Computer:",10,240,150,20)
$InsCompBox = $FraSoft.ListBox(,10,260,190,150)
$ExitButton2 = $FraSoft.CommandButton("Exit",210,380,150-2,30)
$AddAllReport2 = $FraSoft.CommandButton("Add all to report",210,260,150-2,30)
$AddtoReport2 = $FraSoft.CommandButton("Add to report",210,290,150-2,30)
$CreateReport2 = $FraSoft.CommandButton("Create report",210,320,150-2,30)
$ClearReport2 = $FraSoft.CommandButton("Remove all from report",210,350,150-2,30)
$ProgSoft = $FraSoft.ProgressBar(,10,420,347,20)
$SelProBox.Sorted = 1
$InsCompBox.Sorted = 1
$ExitButton2.OnClick = '$$SoftForm.Show(0) $$ReportFrm.Show(0) $$SelProBox.Clear $$InsCompBox.Clear'
$AddAllReport2.OnClick = '$$ReportLstBox.List = $$SoftArr $$ReportArr = $$SoftArr'
$AddtoReport2.OnClick = 'if $$SelProBox.Text <> "" $$ReportLstBox.AddItem ($$SelProBox.Text) redim preserve
$$reportarr[Ubound($$reportarr)+1] $$reportarr[Ubound($$reportarr)] = $$SelProBox.Text EndIf'
$CreateReport2.OnClick = 'Report($$ReturnData2,$$ReportArr,$$SoftForm.CAPTION)'
$ClearReport2.OnClick = '$$ReportLstBox.Clear redim $$ReportArr'
$SelProBox.OnClick = '$$InsCompBox.List = GetInfo($$SelProBox.Value,$$1,$$0,$$ReturnData2)'





$SofSetup = CreateObject("Kixtart.FORM")
$SofSetup.CAPTION = "Softwhere Setup"
$SofSetup.HEIGHT = 195
$SofSetup.WIDTH = 310
$SofSetup.FONTNAME = "Arial"
$SofSetup.FONTSIZE = 9
$SofSetup.CENTER
$SofSetup.BorderStyle = 2
$SetupLgPthlbl = $SofSetup.Label("Path to directiory where logg files will be maintained",10,10,290,15)
$SetupLgPthbox = $SofSetup.Textbox("",10,$SetupLgPthlbl.Top+$SetupLgPthlbl.Height+2,200,20)
$SetupDBPthlbl = $SofSetup.Label("Path to directory where the access database will be maintained",10,
$SetupLgPthbox.Top+$SetupLgPthbox.Height+7,290,15)
$SetupDBPthbox = $SofSetup.Textbox("",10,$SetupDBPthlbl.Top+$SetupDBPthlbl.Height+2,200,20)
$SetupDBNamlbl = $SofSetup.Label("Name of the access database (must end in .mdb)",10,$SetupDBPthbox.Top+
$SetupDBPthbox.Height+7,290,15)
$SetupDBNambox = $SofSetup.Textbox("",10,$SetupDBNamlbl.Top+$SetupDBNamlbl.Height+2,200,20)
$SetupSavBtn = $SofSetup.CommandButton("Save Settings",60,$SetupDBNambox.Top+$SetupDBNambox.Height+7,90,20)
$SetupExiBtn = $SofSetup.CommandButton("Exit",$SetupSavBtn.Left+$SetupSavBtn.Width+5,$SetupSavBtn.Top,90,20)
$SetupSavBtn.OnClick = 'Select Case $$SetupLgPthBox.Text = "" ErrorMsg("Error","Logg path empty")
Case $$SetupDBPthBox.Text = "" ErrorMsg("Error","Database path empty")
Case $$SetupDBNambox.Text = "" ErrorMsg("Error","Database name empty")
Case 1
$$SetupLgPthBox1 = $$SetupLgPthBox.text $$SetupDBPthBox1 = $$SetupDBPthBox.Text
$$SetupDBNambox1 = $$SetupDBNambox.Text
$$=WriteProfileString("%systemroot%\softwhere.ini","Defaults","LoggPath","$$SetupLgPthBox1")
$$=WriteProfileString("%systemroot%\softwhere.ini","Defaults","DBPath","$$SetupDBPthBox1")
$$=WriteProfileString("%systemroot%\softwhere.ini","Defaults","DBName","$$SetupDBNambox1")
$$SetupLgPthBox1 = $$SetupLgPthBox.text $$SetupDBPthBox1 = $$SetupDBPthBox.Text
$$SetupDBNambox1 = $$SetupDBNambox.Text
$$SofSetup.Show(0) EndSelect'
$SetupExiBtn.Onclick = 'Select Case $$SetupLgPthBox.Text = "" ErrorMsg("Error","Logg path empty")
Case $$SetupDBPthBox.Text = "" ErrorMsg("Error","Database path empty")
Case $$SetupDBNambox.Text = "" ErrorMsg("Error","Database name empty")
Case 1
$$SofSetup.Show(0)
EndSelect'

$SetupLgPthBox.Text = ReadProfileString("%systemroot%\softwhere.ini","Defaults","LoggPath")
$SetupDBPthBox.Text = ReadProfileString("%systemroot%\softwhere.ini","Defaults","DBPath")
$SetupDBNambox.Text = ReadProfileString("%systemroot%\softwhere.ini","Defaults","DBName")
$DBPath = $SetupDBPthBox.Text
$DBFile = $SetupDBNambox.Text
$Loggpath = $SetupLgPthBox.Text

$ReportFrm = CreateObject("Kixtart.FORM")
$ReportFrm.CAPTION = "Create Report"
$ReportFrm.HEIGHT = 220
$ReportFrm.WIDTH = 300
$ReportFrm.FONTNAME = "Arial"
$ReportFrm.FONTSIZE = 9
$ReportFrm.Location = 800,100
$ReportLstBox = $ReportFrm.Listbox(,5,5,283,165)
$ReportProgg = $ReportFrm.ProgressBar("",5,$ReportLstBox.Top+$ReportLstBox.Height,283,20)


$FORM.Show
$Form.SetFocus

$SetupLgPthBox1 = $SetupLgPthBox.text $SetupDBPthBox1 = $SetupDBPthBox.Text $SetupDBNambox1 = $SetupDBNambox.Text
If $SetupLgPthBox1 = "" OR $SetupDBPthBox1 = "" OR $SetupDBNambox1 = ""
ErrorMsg("Error","Please enter defaults in softwhere setup")
$SofSetup.Show EndIf


While $FORM.Visible OR $CompForm.Visible OR $SoftForm.Visible OR $ScanForm.Visible OR $SofSetup.Visible
$=Execute($FORM.DoEvents)
Loop


Function ErrorMsg($1,$2)
$= $Form.MsgBox($2,$1)
EndFunction

Function CompForm($ReturnData)
$1=1
$0=0
$CompForm.SetFocus
$ProgComp.Max = Val(Ubound($ReturnData[0]))
$CompArr = StripCopies($ReturnData[0])
$SelCompBox.List = $CompArr
$CompForm = $CompArr
EndFunction

Function SoftForm($ReturnData)
$1=1
$0=0
$SoftForm.SetFocus
$ProgSoft.Max = Val(Ubound($ReturnData[1]))
$SoftArr = StripCopies($ReturnData[1])
$SelProBox.List = $SoftArr
$SoftForm = $SoftArr
EndFunction

Function GetDBData()
Dim $CompArr
Dim $ProgArr
Dim $DBArr[2]
$connect = CreateObject("ADODB.Connection")
$connectstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=$DBPath$DBFile"
$connect.Open($connectstring)
$queryDB = "SELECT * FROM TBL_PROGRAM"
$queryDB = $connect.Execute($queryDB)
While NOT $queryDB.EOF
$dataComp=$queryDB.Fields("Computer").value
$dataProg=$queryDB.Fields("Program").value
$queryDB.movenext
ReDim preserve $CompArr[Ubound($CompArr)+1]
ReDim preserve $ProgArr[Ubound($ProgArr)+1]
$CompArr[Ubound($CompArr)] = $dataComp
$ProgArr[Ubound($ProgArr)] = $dataprog
Loop
$connect.Close
$DBArr[0] = $CompArr
$DBArr[1] = $ProgArr
$GetDBData = $DBArr
EndFunction

Function GetInfo($SearchFor,$SMultiNum,$RMultiNum,$Array)
Dim $InfoArray
$inter = 0
For Each $find in $Array[$SMultiNum]
If $find = "$SearchFor"
ReDim preserve $InfoArray[Ubound($InfoArray)+1] $InfoArray[Ubound($InfoArray)] = $Array[$RMultiNum][$inter]
EndIf
$inter = $inter + 1
Next
$GetInfo = $InfoArray
EndFunction


Function StripCopies($striArray)
$on = 1
Dim $searArr,$a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k,$l,$m,$n,$o,$p,
$q,$r,$s,$t,$u,$v,$w,$x,$y,$z,$0,$1,$2,$3,$4,$5,$6,$7,$8,$9
For Each $add in $StriArray
$dyn = SubStr($add,1,1)
$nul = Execute('if ubound($$$dyn) = -1
ReDim $$$dyn[0] $$$dyn[Ubound($$$dyn)] = $$add
EndIf
$$counter = 0
While Ubound($$$dyn)+1 <> $$counter
If $$add = $$$dyn[$$counter]
$$on = 1
EndIf
$$counter = $$counter+1
Loop
$$counter = 0
If $$on = 0 ReDim preserve $$$dyn[Ubound($$$dyn)+1] $$$dyn[Ubound($$$dyn)] = $$add EndIf')
$on = 0
$ProgComp.Value = $ProgComp.Value+1
$ProgSoft.Value = $ProgSoft.Value+1
Next
$ProgComp.Value = 0
$ProgSoft.Value = 0
$count = 48
While $count <> 91 $dyna = Chr($count)
$nul = Execute('
For Each $$addto in $$$dyna
ReDim preserve $$seararr[Ubound($$seararr)+1]
$$seararr[Ubound($$seararr)] = $$addto
Next')
$count = $count + 1
If $count = 58
$count = $count + 7
EndIf
Loop
$StripCopies = $SearArr
EndFunction

Function SoftwareScan($CompArr,$loggpath)
Dim $computer
Dim $programs
Dim $Subkeys
$ProgData.Max = Ubound($CompArr)+1
For Each $computer in $Comparr
Shell '%comspec% /c ping -n 1 $computer | find /i "(0% loss)" > ping.dat'
If GetFileSize("ping.dat") <> 0
$DataListBx.Additem ("$computer Network connectivity present")
$DataListBx.Additem ("Scanning $computer")
$index = -1
While @error = 0
ReDim preserve $subkeys[Ubound($subkeys)+1]
$index = $index+1
$subkeys[Ubound($subkeys)] = EnumKey("\\$Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",$index)
Loop
If Ubound($subkeys) = 0 $DataListBx.Additem ("** Could not collect information from $computer **") EndIf
For Each $key in $subkeys
$Displayname = ReadValue ("\\$Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$key","Displayname")
If $Displayname <> ""
ReDim preserve $programs[Ubound ($programs)+1]
$programs[Ubound($programs)] = $Displayname
EndIf
Next
$nul = ReDirectOutput ("$loggpath$computer.log",1)
join($programs,"~*~")
$nul = ReDirectOutput("")
ReDim $programs, $subkeys
$DataListBx.Additem ("Finished Scanning $computer")
$DataListBx.ListIndex = $DataListBx.ListCount - 1
Del("ping.dat")
Else $DataListBx.Additem ("** Could Not connect to $computer **")
$DataListBx.ListIndex = $DataListBx.ListCount - 1
EndIf
$DataListBx.Additem (" ")
$DataListBx.ListIndex = $DataListBx.ListCount - 1
$ProgData.Value = $ProgData.Value+1
Next
$ProgData.Value = 0
$DataCmDBt.Enabled = 1
EndFunction

Function DirAgeList($directory)
Dim $computer, $Age, $file, $computername, $DirAge[2]
$file = Dir("$directory*.log")
While @error = 0
ReDim preserve $computer[Ubound($Computer)+1]
ReDim preserve $Age[Ubound($Age)+1]
ReDim preserve $computername[Ubound($computername)+1]
$Computer[Ubound($computer)] = $file
$Age[Ubound($Age)] = SerialDate(SubStr(GetFileTime("$directory"+"$file"),1,10))
$computername[Ubound($computername)] = SubStr($file,1,InStr($file,".")-1)
$file = Dir()
Loop
$DirAge[0] = $computer
$DirAge[1] = $age
$DirAge[2] = $computername
$DirAgeList = $DirAge
EndFunction

Function RemFromArray($Array,$Remove)
Dim $JoinAr, $Array, $Remove, $SplitAr
$JoinAr = Join($Array,"~~")
If InStr($joinar,"$remove")
$SplitAr = SubStr($JoinAr,1,InStr($JoinAr,$Remove)-3)+SubStr($JoinAr,InStr($JoinAr,$Remove)+Len($Remove),)
If SubStr($SplitAr,1,2) = "~~" $SplitAr = SubStr($SplitAr,3,)EndIf
$RemFromArray = Split($SplitAr,"~~")
Else
$RemFromArray = $Array
EndIf
EndFunction


Function ParsetoDB($loggDir,$Loggpath)
$ProgData.Max = Ubound($loggdir)+1
$RC=SetOption("WrapAtEOL","On")
$DSN="Driver={Microsoft Access Driver (*.mdb)}; DBQ=$DBPath$DBFile"
$Connection = CreateObject("ADODB.Connection")
$Command = CreateObject("ADODB.Command")
$Recordset = CreateObject("ADODB.Recordset")

$Connection If @error = 0
$Connection.ConnectionString = $DSN
$Connection.Open()
$Command.ActiveConnection = $Connection
$Recordset.CursorType = 3
$Recordset.LockType = 3
$Recordset.ActiveCommand = $Command
If VarType($loggDir) = 8
Dim $2[0]
$2[0] = $loggdir
$loggdir = $2
EndIf
For Each $1 in $loggDir
$ProgData.Value = $ProgData.Value+1
$nul = Open(1,"$loggpath$1") If @error <> 0
$DataListBx.Additem ("$1 Error")
$DataListBx.Additem ("@serror")
$DataListBx.Additem (" ")
$DataListBx.ListIndex = $DataListBx.ListCount - 1
EndIf
$1 = SubStr($1,1,InStr($1,".log")-1)
$ProgArray = ReadLine(1)
If @error = 0
$ProgArray = Split($ProgArray,"~*~")
For Each $program in $ProgArray
If InStr($Program,"'") <> 0 $A = Split($Program,"'") For Each $B in $A $C=$C+$B Next $Program = $C $C="" EndIf
$CHECK_ENTRY_PROGRAM = "SELECT * FROM TBL_PROGRAM WHERE COMPUTER='$1' AND PROGRAM='$program';"
$Command.CommandText = $CHECK_ENTRY_PROGRAM
$Recordset.Open($Command)
If $Recordset.RecordCount < 1
$Recordset.AddNew If @ERROR <> 0 ?@SERROR EndIf
$Recordset.Fields("Computer").Value = "$1" If @ERROR <> 0 ?@SERROR EndIf
$Recordset.Fields("Program").Value = "$program" If @ERROR <> 0 ?@SERROR EndIf
EndIf
$Recordset.Update
$Recordset.Close()
Next
$DataListBx.Additem ("$1 Completed Successfully")
$DataListBx.Additem (" ")
$DataListBx.ListIndex = $DataListBx.ListCount - 1
Else
$DataListBx.Additem ("$1 @serror")
$DataListBx.Additem (" ")
$DataListBx.ListIndex = $DataListBx.ListCount - 1
EndIf
$nul = Close(1)
Next
$Connection.Close()
$Connection = 0
$Recordset = 0
$Command = 0
Else
$DataListBx.Additem ("Error connecting to the database ")
$DataListBx.Additem ("@serror ")
$DataListBx.ListIndex = $DataListBx.ListCount - 1
EndIf
$ProgData.Value = 0
$DataCmDBt.Enabled = 1
EndFunction


Function Cleardatabase()
$RC=SetOption("WrapAtEOL","On")
$DSN="Driver={Microsoft Access Driver (*.mdb)}; DBQ=$DBPath$DBFile"
$Connection = CreateObject("ADODB.Connection")
$Command = CreateObject("ADODB.Command")
$Recordset = CreateObject("ADODB.Recordset")

$Connection If @error = 0
? "Connected"
$Connection.ConnectionString = $DSN
$Connection.Open()
$Command.ActiveConnection = $Connection
$Recordset.CursorType = 3
$Recordset.LockType = 3
$Recordset.ActiveCommand = $Command
$DELETE_SQL = "DELETE FROM TBL_PROGRAM WHERE COMPUTER<>'*';"
$Command.CommandText = $DELETE_SQL
$Recordset.Open($Command)
$Recordset.Update
$Recordset.Close()
?"Completed Successfully"
$Connection.Close()
$Connection = 0
$Recordset = 0
$Command = 0
EndFunction

Function Report($3,$4,$5)
$ReportProgg.Max = Ubound($4)
$nul = ReDirectOutput("report.html",1)
?'<html>'
?
?'<head>'
?'<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">'
?'<title>SOFTWHERE REPORT</title>'
?'</head>'
?
?'<body>'
?
?'<p align="center"><font Color="#0000FF"><b><font size="5">SOFTWHERE</font><font size="5">'
?'REPORT</font></b></font></p>'
?'<p align="center"><b>'@Date'</b></p>'
?'<p align="left" style="margin-top: -10">&nbsp;</p>'
If $5 = "Search for Computer by Software"
For Each $6 in $4
?'<p align="left" style="margin-top: -10"><font color="#0000FF"><b>Program Name: </font>'
'<font color="#FF0000">'$6'</font> </b></p>'
$7 = getinfo($6,$1,$0,$3)
For Each $8 in $7
?'<p align="left" style="margin-top: -15"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
?$8'</b></p>'
Next
?'<p align="left" style="margin-top: -15">&nbsp;</p>'
ReDim $7
$ReportProgg.Value = $ReportProgg.Value+1
Next
Else
For Each $6 in $4
?'<p align="left" style="margin-top: -10"><font color="#0000FF"><b>Computer Name: </font>'
?'<font color="#FF0000">'$6'</font> </b></p>'
$7 = getinfo($6,$0,$1,$3)
For Each $8 in $7
?'<p align="left" style="margin-top: -15"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
?$8'</b></p>'
Next
?'<p align="left" style="margin-top: -15">&nbsp;</p>'
ReDim $7
$ReportProgg.Value = $ReportProgg.Value+1
Next
EndIf
?
?'</body>'
?
?'</html>'
$nul = ReDirectOutput("")
$ReportProgg.Value = 0
$ReportProgg.Caption = "Done"
Run '%comspec% /c report.html'
EndFunction

Suggestions?

[ 27. September 2002, 14:51: Message edited by: Vig ]