CPUDesc plug-in

From NSIS Wiki
Jump to navigationJump to search
Author: menakkis (talk, contrib)


Links

Cpudesc.zip (12 KB)

Description

Version: 1.2.

A plugin by Peter Mason (menakkis) that can tell you quite a lot about the cpu in the system your installer is running on.

It's uses one function called tell(). This DLL function returns a string giving some information about the CPU on the computer where your setup program's being run. This info string always has the same fields in exactly the same place, so it's easy to pull it apart. The info string looks like this:

INTELP=d AMD=add PPRO=b MMX=d SSE=b SSE2=b 3DNOW=d ARCH=dd LEVEL=dd NCPU=dd MHZ=ddddd RAM=dddd

"d" means a decimal digit (0..9), "a" means a letter (A..Z), and "b" means a boolean digit (0 or 1).

For convenience, here's the string with running serial number below each character.

INTELP=d AMD=add PPRO=b MMX=d SSE=b SSE2=b 3DNOW=d ARCH=dd LEVEL=dd NCPU=dd MHZ=ddddd RAM=dddd
0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123

In case the above line 'wraps, note that MHZ is at the 81st character at offset 80, and RAM is at the 91st character at offset 90.

Also, the fields for NCPU, MHZ, and RAM are zero padded, so NSIS will consider them to be octal. A 2400mhz cpu will return as '02400' which becomes 1280 base ten. The example code below adjusts for this.

Usage

(e.g. in your Install section): unzip file and put cpudesc.dll in plugin directory

; ...
  cpudesc::tell
  Pop $0                     ;full identification string in $0
 
  StrCpy $1 $0 4 90          ;pull out four characters after RAM=
  IntOp $1 1$1 - 10000       ;ignore any leading zeros, the number is not octal
  MessageBox MB_OK "Ram (megs): '$1'"
 
  StrCpy $2 $0 5 80          ;pull out five characters after MHZ=
  IntOp $2 1$2 - 100000      ;ignore any leading zeros, the number is not octal
  MessageBox MB_OK "CPU speed (MHz): '$2'"
 
  StrCpy $3 $0 1 22         ;pull out one character after PPRO=
  IntCmpU $3 1 +1 +3 +3     ;pick a BLOG dep on PPro compatibility
  File /oname=blog.exe "blog_source_directory\blog_gen.exe"
  Goto +2
  File /oname=blog.exe "blog_source_directory\blog_pro.exe"
; ... the rest of your Install section

See cpudesc.txt in the .zip file above for more info.