ฉันจะเข้าถึงภูมิภาคของคอมพิวเตอร์ Windows โดยทางโปรแกรมได้อย่างไร


4

ฉันจะเข้าถึงภูมิภาคของคอมพิวเตอร์ Windows โดยทางโปรแกรมได้อย่างไร

โดยเฉพาะฉันกำลังมองหาค่านี้ในแผงการตั้งค่าภูมิภาคและภาษาใน Windows 10

Windows 10 ภูมิภาค

หรือ (ทางเลือก) "ตำแหน่งบ้าน" ในแผงควบคุม -> ภูมิภาค -> แท็บตำแหน่ง

ตำแหน่งของแผงควบคุม Windows

ฉันหวังว่าจะพบบางสิ่งที่จะใช้งานได้กับ Windows 7-10 โปรดสังเกตว่าภาษาเริ่มต้นที่ฉันเลือกคือภาษาอังกฤษ (สหรัฐอเมริกา) ฉันลองทั้งออกจากระบบและรีสตาร์ทคอมพิวเตอร์เพื่อรับการเปลี่ยนแปลงที่จะนำไปใช้ ฉันได้ลองคำสั่งต่อไปนี้ (จาก PowerShell):

wmic os get locale
// 0409 -> Translates to United States
// This one is especially problematic - 
// it doesn't seem to change
// when I change my default language.

Get-Culture
// 1033 -> English (United States)

Get-UICulture
// 1033 -> English (United States)

ฉันไม่ต้องการพึ่งพาภาษาที่เลือกของระบบปฏิบัติการหากเป็นไปได้ โซลูชันที่ไม่ใช้ PowerShell ก็ยอดเยี่ยมเช่นกันเนื่องจากฉันไม่แน่ใจว่าฉันสามารถพึ่งพาสคริปต์ PowerShell ที่สามารถเรียกใช้งานได้บนเครื่องของผู้ใช้ปลายทาง


แก้ไข: คำตอบของ Stack Overflow นี้ใช้ได้กับฉันและรายงาน"Canada"ตามที่คาดไว้ (หรือ"CA"ถ้าฉันใช้ GeoType เป็น 4 ซึ่งเป็นสิ่งที่ฉันจริง ๆ ใช้) ฉันไม่ได้ใช้ C Sharp (หรืออะไรก็ตามที่สามารถเชื่อมต่อกับkernel32.dllโดยตรง) ดังนั้นหากใครรู้ว่าจะรับข้อมูลนั้นจากที่อื่นได้ที่ไหนมันจะยังคงได้รับการชื่นชม แต่ฉันสามารถเขียนแอปพลิเคชัน. NET Core ที่คว้ามาได้ถ้าฉันต้องทำ

คำตอบ:


1

การตั้งค่าภาค Windows HKEY_CURRENT_USER:\Control Panel\International\Geo\ปรากฏขึ้นที่จะถูกเก็บไว้ต่อผู้ใช้ในรีจิสทรีที่นี่: หากคุณเลิกใช้ Powershell เพื่อดึงค่านี้คุณสามารถทำได้ด้วย:

gp 'HKCU:\Control Panel\International\Geo\' | select -exp Name

ตัวอย่างสำหรับสหรัฐอเมริกา:

ภูมิภาค CA ภูมิภาค CA PS

ตัวอย่างสำหรับ CA:

ภูมิภาคสหรัฐอเมริกา ภูมิภาค US PS


สมบูรณ์แบบขอบคุณ ฉันจะทำเครื่องหมายสิ่งนี้เป็นคำตอบเนื่องจากเป็นไปได้ว่าสิ่งที่ฉันจะใช้ (ยังไม่แน่ใจว่าฉันจะพึ่งพาการเข้าถึงเพื่อเรียกใช้สคริปต์ PowerShell บนเครื่องของผู้ใช้ปลายทาง) แต่Get-WinHomeLocationรูปลักษณ์ที่เป็นประโยชน์มากเช่นกัน
dvlsg

3

ฉันจะหาที่ตั้งบ้านของ windows ได้อย่างไร

การใช้Get-WinHomeLocation:

Get- WinHomeLocationcmdlet รับค่าการตั้งค่าผู้ใช้ GeoID และส่งคืนGeoIDออบเจ็กต์. NET การตั้งค่า Windows GeoID เป็นการตั้งค่าผู้ใช้ที่อธิบายตำแหน่งบ้านของบัญชีผู้ใช้ปัจจุบัน ที่อยู่บ้านคือประเทศหรือภูมิภาค แอปพลิเคชันที่ต้องการตำแหน่งบ้านของบัญชีผู้ใช้ปัจจุบันเช่นไดรเวอร์สำหรับแอปพลิเคชันเครื่องรับโทรทัศน์สามารถใช้การตั้งค่านี้ได้

สำหรับตารางของ GeoIDs ดูตารางของสถานที่ทางภูมิศาสตร์

ตัวอย่าง

ตัวอย่างที่ 1: แสดง GeoID สำหรับบัญชีปัจจุบัน

PS C:\> Get-WinHomeLocation
HomeLocation     Description
----             -----------
244              United States

คำสั่งนี้ส่งคืนการตั้งค่า GeoID และชื่อที่แสดงสำหรับบัญชีผู้ใช้ปัจจุบัน

แหล่งที่มาGet-WinHomeLocation


ขอบคุณนี่เป็นประโยชน์จริงๆ นี่จะเป็นทางออกที่ฉันได้รับหากฉันสามารถใช้ PowerShell ได้
dvlsg

1
systeminfo | findstr “Locale” | find "System" | cut -f2 -d( | sed s/)//g

อาศัยยูทิลิตี้ข้อความของ GNU cutและsedเนื่องจาก Windows ไม่มีความสามารถในการกรองข้อความที่จำเป็นนอกกรอบ ไบนารี Win32 ของพวกเขาอาจดาวน์โหลดได้จากhttp://gnuwin32.sourceforge.net/packages/coreutils.htmและคัดลอกลงในพา ธ ของเครื่องหรือไปยังไดเรกทอรีที่คุณจะใช้คำสั่ง

systeminfoเป็นส่วนหนึ่งของ Windows ซึ่งดึงข้อมูลเกี่ยวกับการกำหนดค่าและฮาร์ดแวร์ของคุณ เรานำเอาท์พุทและกรองมันด้วยfindstr , หน้าต่างปฏิบัติการอีกอันหนึ่ง, เพื่อแสดงเฉพาะบรรทัดที่มี "locale", จากนั้นใช้find , ยังอีกไฟล์ปฏิบัติการ Windows เพื่อกรองบรรทัดที่เหลือเพื่อแสดงเฉพาะที่รวมถึง "System" จากนั้นเราจะใช้ตัดทิ้งทุกอย่างและรวมถึง "(" และsedเสร็จสิ้นงานโดยการขว้างปาออกไปวงเล็บตัวละครอย่างใกล้ชิด ")"

มันไม่ใช่ Powershell และถึงแม้ว่ามันจะขึ้นอยู่กับไบนารีต่างประเทศสองแบบ แต่ก็อ่อนโยนและเล็ก (39KB และ 79KB)


ขอบคุณสำหรับการตอบกลับ - ฉันได้รับการen-us;English (United States)รายงานทั้งจริงSystem LocaleและInput Localeดังนั้นจึงดูเหมือนว่าอาจยังสอดคล้องกับภาษาหรือไม่
dvlsg

ใช่. จริง ๆ แล้วฉันมี coreutils บนเครื่องของฉันแล้ว United Statesผลผลิตที่แน่นอนจากท่อคำสั่งทั้งหมด
dvlsg

นั่นคือภูมิภาคสิ่งที่คุณต้องการใช่ไหม
K7AAY

มันเป็น แต่ก็รายงานเมื่อเครื่องของฉันมีการตั้งค่าUnited States Canadaฉันสงสัยว่ามันกำลังดึงสหรัฐอเมริกาจากภาษาเริ่มต้นที่ฉันเลือก(ซึ่งแน่นอนen-US) ฉันแค่อยากรู้อยากเห็นหากมีวิธีการรับภูมิภาคที่เลือกในภาพหน้าจอด้านบน ดูเหมือนว่ามีวิธีที่จะรับมันได้โดยการเชื่อมต่อkernel32.dllแต่ฉันไม่สามารถเข้าถึงสิ่งนั้นได้ในแอปพลิเคชันที่ฉันใช้อยู่โดยไม่ต้องเขียน. exe แยกต่างหากและเชื่อมต่อกับสิ่งนั้น
dvlsg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.