Refresh Language Bar ใน Windows Vista / 7 โดยทางโปรแกรม


4

ฉันกำลังพยายามกำหนดค่าแถบภาษา (ตัวสลับภาษาใน systray ซึ่งปรากฏขึ้นเมื่อคุณติดตั้งหลายภาษาสำหรับผู้ใช้ของเรา)

แถบภาษา

ฉันสามารถเพิ่มภาษาใหม่ได้อย่างง่ายดายโดยใช้ regkeys ด้านล่าง HKCU แต่ปัญหาคือผู้ใช้ต้องทำการเชื่อมต่อใหม่หรือรีบูตเครื่องคอมพิวเตอร์เพื่อดูผลกระทบ

คีย์ที่ฉันใช้ (ฉันกำลังเขียนด้วยการตั้งค่าที่ใช้งานอยู่) จะอยู่ใน "HKEY_CURRENT_USER \ Keyboard Layout \ Preload" ด้านล่างที่สำคัญคือชื่อ / ค่าประเภท REG_SZ

โดยปกติแล้วจะมีปุ่มเช่น "1" = "0000407" "2" = "0000409" ซึ่งหมายความว่าผู้ใช้มีการติดตั้งแป้นพิมพ์ภาษาเยอรมันและอังกฤษถ้าฉันต้องการเพิ่มให้พูดอิตาลีฉันจะเพิ่มคีย์ "3" = "0000410" หลังจากการออกจากระบบครั้งถัดไป / เข้าสู่ระบบการเปลี่ยนแปลงจะปรากฏแก่ผู้ใช้

ตอนนี้สิ่งที่ฉันได้ลองแล้วคือการส่งข้อความ windows ต่าง ๆ เช่น WM_SETTINGCHANGE หรือคำสั่ง "RUNDLL32.EXE user32.dll, UpdatePerUserSystemParameters" แต่ยังไม่มีผลลัพธ์ที่มีประโยชน์

ฉันหมดความคิดที่นี่ทำให้ผู้ใช้หลายร้อยคนออกจากระบบ / การเข้าสู่ระบบจะไม่ดี: /

ฉันยังคิดว่าจะทำการ mouseclicks อัตโนมัติ (เช่น autoit) แต่มันมักจะทำให้เกิดปัญหามากกว่าจะดี


คุณลอง AutoIt ( autoitscript.com/site/autoit ) แล้วหรือยัง
— magicandre1981

คำตอบ:


2

คุณไม่ควรทำสิ่งนี้ผ่านการแก้ไขรีจิสทรีเนื่องจากความรู้ของเรามี จำกัด แต่ใช้กลไกที่จัดทำโดย Windows

Microsoft ได้สร้างWindows PowerShellเป็นอินเทอร์เฟซการเขียนโปรแกรมหลักซึ่งอนุญาตให้เข้าถึงฟังก์ชันการทำงานแทบทุกอย่างใน Windows น่าเสียดายที่ตระกูล PowerShell ฟังก์ชั่นที่เกี่ยวข้องกับภาษา Cmdlets การตั้งค่าระหว่างประเทศนั้นได้รับการแนะนำสำหรับ Windows 8 / Server 2012 เท่านั้นและไม่สามารถใช้ได้กับ Windows 7 หรือ Vista

อย่างไรก็ตามการแก้ปัญหาที่มีอยู่สำหรับ Windows 7 หรือ Vista ตามที่อธิบายไว้ในบทความ MSDN:
การกำหนดค่าสาย Windows Vista คำสั่งของการตั้งค่าอินเตอร์เนชั่นแนล

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

control intl.cpl,, /f:"intlsettings.xml"

ด้านล่างนี้คือรายการไฟล์ xml ตัวอย่างบางส่วน

เปลี่ยนภาษาปัจจุบัน

<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend">
    <!--User List-->
    <gs:UserList>
        <gs:User UserID="Current"/>
    </gs:UserList>
    <!-- User Locale-->
    <gs:UserLocale>
        <gs:Locale Name="es-US" SetAsCurrent="true"/>
    </gs:UserLocale>
</gs:GlobalizationServices>

เพิ่มภาษาของแป้นพิมพ์

<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"> 
<gs:UserList>
<gs:User UserID="Current" CopySettingsToDefaultUserAcct="true" CopySettingsToSystemAcct="true"/></gs:UserList> 
<gs:InputPreferences> 
<gs:InputLanguageID Action="add" ID="0804:E0200804"/>
</gs:InputPreferences>
</gs:GlobalizationServices>

ลบภาษาของแป้นพิมพ์

<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"> 
<gs:UserList>
<gs:User UserID="Current" CopySettingsToDefaultUserAcct="true" CopySettingsToSystemAcct="true"/></gs:UserList> 
<gs:InputPreferences> 
<gs:InputLanguageID Action="remove" ID="0804:E0200804"/>
</gs:InputPreferences>
</gs:GlobalizationServices>

แหล่ง


ฉันพยายามทำเช่นนี้โดยไม่มีการเปลี่ยนแปลงรีจิสตรี ฉันใช้ windows api แทน (โดยใช้ LoadKeyboardLayout และ ActivateKeyboardLayout) ไม่สำเร็จ: /
— weberik

ฟังก์ชั่นเหล่านี้ส่งผลกระทบต่อรูปแบบแป้นพิมพ์ปัจจุบัน แต่ไม่ใช่แถบภาษา สำหรับวิธีแก้ปัญหาที่ดีคุณจะต้องกัดกระสุนและเรียนรู้ PowerShell มันเป็นเรื่องที่กลืนกิน แต่มีแหล่งข้อมูลที่เป็นประโยชน์มากมายบนอินเทอร์เน็ต
— harrymc

ดีฉันคุ้นเคยกับ powershell แต่ฉันไม่สามารถหาคำสั่งพื้นเมือง ps ในที่สุดฉันจะเรียกคำสั่ง windows api หรือ wmi จาก ps เท่านั้นดังนั้นมันจึงไม่สำคัญมากถ้าฉันใช้ ps, csharp, batch หรืออะไรก็ตาม คุณสามารถชี้ให้ฉันดูหนึ่งใน 'แหล่งข้อมูลที่เป็นประโยชน์บนอินเทอร์เน็ต' ได้หรือไม่?
— weberik

ฉันคิดว่า "การตั้งค่านานาชาติ Cmdlets" ด้านบนเป็นสิ่งที่คุณต้องการ เกี่ยวกับ PS สำหรับ starters google สำหรับ "powershell tutorial" และคุณจะมีมากกว่าที่คุณสามารถอ่านได้ เคล็ดลับ Google อีกข้อที่ฉันใช้คือ "powershell filetype: pdf" ซึ่งให้ฉันเป็นตัวอย่างหนังสือเล่มนี้ Microsoft เป็นแหล่งที่ดีแน่นอน
— harrymc

โอ้ขอบคุณโดยตอนนี้ฉันพบ cmdlets ที่ น่าเสียดายที่ระบบของเราไม่สามารถใช้งานได้ (Vista): /
— weberik
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.