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.