עזרה - תנאי לבדיקת השפה
-
@נ-נח שאלה מצויינת
כל מה שאני יכול להגיד לך שיש בפווארשל אובייקט מוגדר לזה שנקראGet-Culture
שמחזיר מערך של נתונים על כל הנושא של שפה ושם יש מפתח אחד שנקראkeyboardLayoutID
שהוא אמור להכיל את הפריסת מקשים הנוכחית (זה מה שאתה מחפש)
המציאות בפועל שוינדוס בנוי כנראה בצורה גאונית, או לא יודע מה ההסבר - זה לא עובד. זה מחזיר לי תמיד את השפה ברירת מחדל אצלי (אנגלית) גם כשאני על עברית.
הנתונים שהפקודה הזו מחזירה הם הקידוד של הפריסת מקשים על פי תקן LCID (Windows Language Code Identifier) יש לכל שפה קוד בעל 4 (?) ספרות. לדוגמא עברית זה 1037, אנגלית-ארהב זה 1033 (חח אנחנו קרובים אליהם)
כאן יש רשימה מלאה https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9cהשימוש בפונקציה כמו שהזכרתי ייראה ככה בערך:
(Get-Culture).keyboardLayoutID
זה מחזיר את המספר הנ"ל (זה פשוט החרגה של הפלט שיצא מ-
Get-Culture
רק לחלק שלkeyboardLayoutID
. אתה יכול להריץ רק אתGet-Culture
או עם פרמטרים כמו שתראה כאן https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-culture?view=powershell-7.1)קצרה בינתי מלהבין את הפדיחה הזו, אם אתה מצליח למצוא דרך אחרת אשמח לדעת גם
-
בסוף הצלחתי להכין משהו...
'Set a = CreateObject("WScript.Shell") wscript.sleep 50 a.Sendkeys "a" a.Sendkeys "~" ' | out-file $env:TEMP\temp.vbs wscript $env:TEMP\temp.vbs $a = read-host if ($a -eq 'a') { 'Set a = CreateObject("WScript.Shell") a.Sendkeys "+%" ' | out-file $env:TEMP\temp.vbs wscript $env:TEMP\temp.vbs } timeout /t 1 del $env:TEMP\temp.vbs
אם המחשב על אנגלית זה מחליף לעברית, ואם הוא על עברית הוא נשאר אותו דבר
-
@נ-נח אמר בעזרה - תנאי לבדיקת השפה:
בסוף הצלחתי להכין משהו...
'Set a = CreateObject("WScript.Shell") wscript.sleep 50 a.Sendkeys "a" a.Sendkeys "~" ' | out-file $env:TEMP\temp.vbs wscript $env:TEMP\temp.vbs $a = read-host if ($a -eq 'a') { 'Set a = CreateObject("WScript.Shell") a.Sendkeys "+%" ' | out-file $env:TEMP\temp.vbs wscript $env:TEMP\temp.vbs } timeout /t 1 del $env:TEMP\temp.vbs
אם המחשב על אנגלית זה מחליף לעברית, ואם הוא על עברית הוא נשאר אותו דבר
חכם אהבתי את הדרך.. תודה על העדכון זה יכול להיות שימושי לי
-
@נ-נח אמר בעזרה - תנאי לבדיקת השפה:
@chv דרך אגב בטח שמת לב שאם מחליפים בשורה 8 את a ב1
זה עושה בדיוק הפוךif ($a -eq '1')
כן (לא שידעתי שזה יהיה 1, אני לא כזה גאון ביוניקוד..)
אני יגיד לך מה חזק פה ומה נהניתי. החזק כאן הוא שאתה מנצל את חוסר התמיכה של הפלטפורמה שאתה עובד איתה (ביוניקוד. vbs לא תומכת ביוניקוד, לפחות לא בפונקציה הזו של sendkeys שב-shell)
כלומר אתה מנצל את זה שהם לא עובדים עם יוניקוד, ומשום מה התוצאה של הפקודה משתבשת (בצורה שלא היתה קורית אם היה תמיכה נורמלית. בצורה נורמלית זה היה נשלח תמיד בצורה שכתבת בפקודה)קח לדוגמא את ה-sendkeys של System.Windows.Forms.
ככה זה ייראה בערך:Add-Type -AssemblyName System.Windows.Forms [System.Windows.Forms.SendKeys]::SendWait('a')
וזה ישלח תמיד a גם אם תהיה על עברית. כי הפונקציה הזו בשונה ממה שאתה משתמש - תומכת ביוניקוד כמו כל דבר נורמלי היום בעולם.
קיצר אהבתי.
-
@נ-נח אמר בעזרה - תנאי לבדיקת השפה:
בסוף הצלחתי להכין משהו...
'Set a = CreateObject("WScript.Shell") wscript.sleep 50 a.Sendkeys "a" a.Sendkeys "~" ' | out-file $env:TEMP\temp.vbs wscript $env:TEMP\temp.vbs $a = read-host if ($a -eq 'a') { 'Set a = CreateObject("WScript.Shell") a.Sendkeys "+%" ' | out-file $env:TEMP\temp.vbs wscript $env:TEMP\temp.vbs } timeout /t 1 del $env:TEMP\temp.vbs
אם המחשב על אנגלית זה מחליף לעברית, ואם הוא על עברית הוא נשאר אותו דבר
ניסתי לכתוב זאת בפקודות באט
הדבקתי כמו שהוא
לא עובד
אשמח לעזרה אני צריך עוד קובץ צריך לכתוב עוד משהו?
להפעיל כמנהל לא עזר?