0
我是nsis安裝程序的新手。我想檢測用戶的國家(通過IP),然後取決於國家想要採取一些行動。我在nsis插件目錄中搜索,但我發現只有一個插件來檢測IP。NSIS通過IP檢測國家代碼
如何通過ip在nsis中獲取國家代碼? 謝謝
我是nsis安裝程序的新手。我想檢測用戶的國家(通過IP),然後取決於國家想要採取一些行動。我在nsis插件目錄中搜索,但我發現只有一個插件來檢測IP。NSIS通過IP檢測國家代碼
如何通過ip在nsis中獲取國家代碼? 謝謝
從IP檢測的國家意味着你需要:
爲什麼不在本地機器上使用Windows配置:
!include LogicLib.nsh
!define LOCALE_SCOUNTRY 6 ; Localized
!define LOCALE_SENGCOUNTRY 4098
!define LOCALE_SENGLANGUAGE 0x00001001
!define GEOCLASS_NATION 16
!define GEOID_NOT_AVAILABLE -1
!define GEO_ISO2 4
!define GEO_ISO3 5
Section
System::Call 'KERNEL32::GetUserDefaultLangID()i.r0'
DetailPrint LANGID=$0
System::Call 'KERNEL32::GetLocaleInfo(i$0,i${LOCALE_SENGCOUNTRY},t.r1,i1000)'
DetailPrint LOCALE_SENGCOUNTRY=$1
System::Call 'KERNEL32::GetLocaleInfo(i$0,i${LOCALE_SCOUNTRY},t.r1,i1000)'
DetailPrint LOCALE_SCOUNTRY=$1
System::Call 'KERNEL32::GetLocaleInfo(i$0,i${LOCALE_SENGLANGUAGE},t.r1,i1000)'
DetailPrint LOCALE_SENGLANGUAGE=$1
System::Call 'KERNEL32::GetUserGeoID(i${GEOCLASS_NATION})i.r0'
DetailPrint GEOID=$0
${If} $0 <> ${GEOID_NOT_AVAILABLE} ; Only available if the user has set a country/location
${AndIf} $0 != "error" ; GetUserGeoID is WinXP+
System::Call 'KERNEL32::GetGeoInfo(i$0,i${GEO_ISO2},t.r1,i1000,i0)'
DetailPrint GEO_ISO2=$1
System::Call 'KERNEL32::GetGeoInfo(i$0,i${GEO_ISO3},t.r1,i1000,i0)'
DetailPrint GEO_ISO3=$1
${EndIf}
SectionEnd
拆開NSIS,你怎麼看?你是否正在尋找當前主機TLD的國家代碼(以及.com,.edu或.org?),還是在計算在某種目錄中查找IP?那麼在NAT後面的本地不可路由地址如何呢?你會尋找公共外部IP? – Seki
@Seki希望從用戶使用的IP獲取國家代碼。例如,如果位於美國的用戶ip我將得到美國的國家代碼。如果位於英國的用戶,我會得到代碼GB。沒有必要獲得國家代碼。只有國家夠了 –