Bob,
Something like this ?
0010 BEGIN
0020 LET exe$="D:\pxplus\pvxplus9\pxplus.exe"+$00$
0030 DIM tmp$(512,$00$)
0040 LET size=DLL("version.dll","GetFileVersionInfoSizeA",exe$,tmp$)
0050 IF size=0 THEN GOTO ERROR ELSE DIM tmp$(0)
0060 DIM bfr$(size,$00$)
0070 LET r=DLL("version.dll","GetFileVersionInfoA",exe$,$$,size,bfr$)
0080 IF r=0 THEN GOTO ERROR
0090 DIM where$(4,$00$),length$(4,$00$)
0100 LET r=DLL("version.dll","VerQueryValueA",bfr$,"\\"+$00$,where$,length$)
0110 IF r=0 THEN GOTO ERROR
0120 ! VS_FIXEDFILEINFO structure
0130 ! dwFileVersionMS = 9,4
0140 ! dwFileVersionLS = 13,4
0150 ! dwProductVersionMS = 17,4
0160 ! dwProductVersionLS = 21,4
0170 LET tmp$=MEM(DEC(SWP(where$)),DEC(SWP(length$)))
0180 LET tmp$=SWP(tmp$(9,4))+SWP(tmp$(13,4))+SWP(tmp$(17,4))+SWP(tmp$(21,4))
0190 LET fv$=""; FOR n=1 TO 8 STEP 2; LET fv$+=STR(DEC(tmp$(n,2)))
0200 IF n<8 THEN LET fv$+="." END_IF ; NEXT ; PRINT "FileVersion: ",fv$
0210 LET pv$=""; FOR n=9 TO 16 STEP 2; LET pv$+=STR(DEC(tmp$(n,2)))
0220 IF n<16 THEN LET pv$+="." END_IF ; NEXT ; PRINT "ProductVersion: ",pv$
0230 STOP
0240 !
0250 ERROR: LET error=DLL("kernel32","GetLastError")
0260 LET size=512,text$=DIM(size,$00$)
0270 LET result=DLL("Kernel32","FormatMessageA",DEC($1000$),0,error,0,text$,size,0)
0280 IF result=0 THEN {
0290 PRINT "An unknown error occured" } ELSE {
0300 PRINT text$(1,POS($0D0A$=text$))
0310 }
-Eric-