Hi all!
Is this possible to get the ID of the Hard Disk or motherboard in xojo? I want to get this in order to when I run my app. If the ID of the HDD or MoBo is not the registered one then the App will be unable to run.
Thanks
Hi all!
Is this possible to get the ID of the Hard Disk or motherboard in xojo? I want to get this in order to when I run my app. If the ID of the HDD or MoBo is not the registered one then the App will be unable to run.
Thanks
I wanna do this on the 3 environments: Windows, Linux and Mac. But at this time Iâm interested on Windows
this is what I use⊠reads the MacAddress for Windows
YES⊠that can change, but so could the HDD or MB serials
no idea what to do for Linux
#If TargetMacOS
sh.execute "/usr/sbin/ioreg -l | /usr/bin/grep IOPlatformSerialNumber"
s=sh.Result
x=InStr(s,"=")
If x>0 Then s=ReplaceAll(Trim(Mid(s,x+1)),ChrB(34),"")
#ElseIf TargetWin32
// use IPCONFIG /all and parse the "Physical Address from "Local Area Connection" Block
// will be something like C4-2C-03-02-31-26 [C42c03023126 take first 11 char = C42C0302312]
sh.Execute("ipconfig /all")
If sh.ErrorCode = 0 Then
s = sh.Result
s = Mid(s,InStr(s,"Local Area Connection")+21)
s = Mid(s,InStr(s,"Physical Address")+16)
s = Left(s,InStr(s,EndOfLine))
s= ReplaceAll(Trim(Right(s,19)),"-","")
End If
#EndIf
in OSX Terminal
system_profiler | more > /Users/username/Desktop/myreport.txt
gives you Serial Numbers (HDD, RAM âŠ)
[quote=198497:@Dave S] #If TargetMacOS
sh.execute â/usr/sbin/ioreg -l | /usr/bin/grep IOPlatformSerialNumberâ
s=sh.Result
x=InStr(s,"=")
If x>0 Then s=ReplaceAll(Trim(Mid(s,x+1)),ChrB(34),"")
#ElseIf TargetWin32
// use IPCONFIG /all and parse the âPhysical Address from âLocal Area Connectionâ Block
// will be something like C4-2C-03-02-31-26 [C42c03023126 take first 11 char = C42C0302312]
sh.Execute(âipconfig /allâ)
If sh.ErrorCode = 0 Then
s = sh.Result
s = Mid(s,InStr(s,âLocal Area Connectionâ)+21)
s = Mid(s,InStr(s,âPhysical Addressâ)+16)
s = Left(s,InStr(s,EndOfLine))
s= ReplaceAll(Trim(Right(s,19)),â-","")
End If
#EndIf[/quote]
Sh its a command Line? how can I declare it?
Thanks
Dim sh As New Shell
This isnât working?
Dim SIP as string
SIP=System.GetNetworkInterface.MACAddress
See http://documentation.xojo.com/index.php/NetworkInterface
For Linux, see http://coffer.com/mac_info/locate-unix.html
and http://www.linuxquestions.org/questions/linux-hardware-18/hard-drive-serial-number-23071/
I donât recall⊠(for Windows), but it seems there are (or could be multiple MacAddresses) and that was the only way I could be sure to always get the same one.
OR⊠it could be ⊠I didnât know about that commandâŠ
I wrote that piece of code quite a while ago, and just copy/paste it into new projects as required.
Yes, there could be several network interfaces. All he has to check is if the registered one is one of them.
A variation on http://documentation.xojo.com/index.php/NetworkInterface.MacAddress
Have a method IsRegistered( registeredMacAdress as string ) as Boolean
[code]For i as Integer = 0 to System.NetworkInterfaceCount-1
Dim n as NetworkInterface
n = System.GetNetworkInterface( i )
If registeredMacAdress = n.MACAddress then return True
Next
Return False[/code]
true⊠my code doesnât stop with what I posted⊠it takes the value in âsâ and uses it as part of a private/public key ⊠so looping thru all possible values was not desired.
for SATA HDD (OSX)
dim s as String
dim sh as new Shell
sh.Execute "system_profiler SPSerialATADataType"
s = NthField(sh.Result, "Serial Number: ", 2)
s = NthField(s, EndOfLine, 1)
MsgBox s
[quote=198504:@Dave S]I donât recall⊠(for Windows), but it seems there are (or could be multiple MacAddresses) and that was the only way I could be sure to always get the same one.
OR⊠it could be ⊠I didnât know about that commandâŠ
I wrote that piece of code quite a while ago, and just copy/paste it into new projects as required.[/quote]
It gives the Serial (In Mac) and the Name Machine (on Windows) Right?
Regards
Just be aware that the serial number can be âlostâ. A few years ago I had a motherboard in a MBP replaced and afterwards the serial number was blank. According to Apple this was normal.
From another post:
[quote]A not so well known fact is the Macâs serial number (held on the logic board) is also easily changed (applies to later PPC and intel machines). Replacing the logic board could change the serial number, or leave you with a machine with no serial number (unless the tech remembers to write the new serial number to the board). Typically a logic board that has built in ethernet/bluetooth etc will also come with a new MAC address sticker to attach to the machines physical serial number label. Sometimes Apple has to strip logic boards from brand new machines to meet repair demands, and these boards have their host machines serial number (again, unless the tech remembers to change it).
For warranty purposes the machines physical serial number is used, ie the label.
I hold, and have done so for many years, many Apple hardware and software certifications; my continued connection with an Apple Service Provider, along with my credentials, gives me access to Apple GSX. Several officially endorsed Apple utilities exists to set the serial number on a logic board following a repair. An unscrupulous user could âcloneâ serial numbers between logic boards. This is extremely unlikely, but given how pedantic some users are on here I thought Iâd throw in my 2 cents . . .
[b]Summary
The serial number is written to the logic board, not the HD.
It is trivial, with the right software, to modify the serial number of the logic board (the one you see in âAbout this Macâ by clicking twice on the OS version, and in âSystem Profilerâ).
Apple uses the physical serial number (the label) to identify your machine for warranty purposes.
It is possible to have no serial number on the logic board, or an invalid serial number, or one that does not match the label on your machine.[/b][/quote]
for the MAC Adress(es) in OSX
dim s, st as String
dim sh as new Shell
sh.Execute "system_profiler SPNetworkLocationDataType | grep ""Hardware (MAC) Address:"""
s = sh.Result
for i as integer = 0 to CountFields(s, "Hardware (MAC) Address:")
st = st + NthField(s, "Hardware (MAC) Address:", i)
next
MsgBox st
if you use MBS Plugins, see SystemInformationMBS module:
http://www.monkeybreadsoftware.net/module-systeminformationmbs.shtml
[quote=198573:@Christian Schmitz]if you use MBS Plugins, see SystemInformationMBS module:
http://www.monkeybreadsoftware.net/module-systeminformationmbs.shtml[/quote]
It sounds better!
SystemInformationMBS.MachineID
Thanks, cuz as you said, MAC address can be faked, and will be useless
[quote=394710:@Gerardo GarcĂa]It sounds better!
SystemInformationMBS.MachineID
[/quote]
Not only that, but you can use various pieces of information from SystemInformation MBS (my selections vary by OS and availability of which things come back empty for that machine) and then use them as part of the input to RegistrationEngineMBS which has all sorts of wonderful options. For example I set the Alphabet property to avoid similar looking characters in some fonts (such as 0/O or l/I). I purposely do not use any network interface Mac address as one of the variables.
Itâs not that I couldnât come up with my own way of getting at some of the information, or another registration scheme. Itâs that MBS has such a plethora of incredibly useful, already written and tested functions that get continually expanded and enhanced. Plus I did nothing to get 64-bit compatibility, where often use of Declares would have required me to revisit how Iâd implement something on my own. For the price, the complete MBS set is a no-brainer (IMHO).
Or better yet, get the 2018 Omegabundle to also get numerous other useful things. Incidentally, it also includes another registration scheme with GuancheMOS though I have no experience with it, having used MBS for years.
Thanks so much @Douglas Handy it was very useful for me.
As you say, I can compliment to reinforce the security of registered apps.
And never use MacAdress as a variable, cuz this can be changed. Or in case of a laptop have two MacAdress (Wifi,LAN)