با سلام
برای تغییر آیتم Current System Locale در قسمت Region از طریق کد نویسی در سایت های داخلی و خارجی خیلی جستجو کردم ولی به موردی بر نخوردم . آیا بنظر اساتید تغییر این آیتم از طریق کدنویسی امکان پذیر است ؟
با تشکر
با سلام
برای تغییر آیتم Current System Locale در قسمت Region از طریق کد نویسی در سایت های داخلی و خارجی خیلی جستجو کردم ولی به موردی بر نخوردم . آیا بنظر اساتید تغییر این آیتم از طریق کدنویسی امکان پذیر است ؟
با تشکر
سلام و روز خوش
دلیلش اینه که مطلقا هیچ api پابلیک و مستند شده ای واسه این کار نیست!
فقط و فقط باید از کنترل پنل انجام بشه و اتفاقا کار درست همینه.
اگر برای نمایش پیام هست که اون راهکار دیگه ای داره.
سلام و عرض ادب خدمت استاد mazoolagh
ممنون از راهنمائی های مفیدتون
Sub ChangeSystemLocaleToPersian()
Dim regPath As String
Dim shell As Object
' مسیر رجیستری برای تغییر locale
regPath = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contr ol\Nls\Locale"
' ایجاد شیء Shell
Set shell = CreateObject("WScript.Shell")
' تغییر مقدار Locale به 00000429 (فارسی)
shell.RegWrite regPath & "Locale", "00000429", "REG_SZ"
' تغییر مقادیر ACP، MACCP و OEMCP به 1256 (کد صفحهی فارسی)
regPath = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contr ol\Nls\CodePage"
shell.RegWrite regPath & "ACP", "1256", "REG_SZ"
shell.RegWrite regPath & "MACCP", "1256", "REG_SZ"
shell.RegWrite regPath & "OEMCP", "1256", "REG_SZ"
MsgBox "Current System Locale has been changed to Persian (فارسی). Please restart your computer."
End Sub
این کدی رو که هوش ساختگی پیشنهاد داده (پست شماره 6)
اینجا در تگ مناسب میذارم که دست کم خوانا باشه (بگذریم که کد ایراد آشکار داره!)
Sub ChangeSystemLocaleToPersian()
Dim regPath As String
Dim shell As Object
' مسیر رجیستری برای تغییر locale
regPath = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\C ontr ol\Nls\Locale"
' ایجاد شیء Shell
Set shell = CreateObject("WScript.Shell")
' تغییر مقدار Locale به 00000429 (فارسی)
shell.RegWrite regPath & "Locale", "00000429", "REG_SZ"
' تغییر مقادیر ACP، MACCP و OEMCP به 1256 (کد صفحهی فارسی)
regPath = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\C ontr ol\Nls\CodePage"
shell.RegWrite regPath & "ACP", "1256", "REG_SZ"
shell.RegWrite regPath & "MACCP", "1256", "REG_SZ"
shell.RegWrite regPath & "OEMCP", "1256", "REG_SZ"
MsgBox "Current System Locale has been changed to Persian (فارسی). Please restart your computer."
End Sub
1- این کد ایراد دارهبر روی سیستم من خطای زیر صادر میشود:
2- بعد از رفع ایراد هم گارانتی این که در همه شرایط کار کنه نیست
3- از همه اینها، و بفرض درست بودن همه چیز، باز هم کاربر باید ریستارت کنه،
یعنی عملا بی ارزشه (منظور فقط این نیست - هر کدی)
4- اینکه برای یک کار ساده که خنگ ترین کاربر هم میتونه در یک دقیقه انجام بده،
بیاییم در رجیستری و اون هم یک جای حساس دستکاری کنیم (حالا انجام درستش بماند)
کلا کار نادرستیه - اگر منطقی بود مایکروسافت خودش api مناسب مستند شده میداد.
5- ایراد دیگه کدهای اینجوری (هوش ساختگی) اینه که نه اعتباری به درست بودنشون هست،
نه این که تست شدن (همه شرایط)،
نه این که اگر مشکلی داشته باشه میتونین بپرسین!
اگه ویندوز شما 7 هست اینو امتحان کنید دیگه آخرین راهه :
Private Sub Command1_Click()
Dim WshShell As Object
Dim Command As String
Command = "control.exe intl.cpl,,3"
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run Command, 1, True
SendKeys "{TAB}"
SendKeys "{TAB}"
SendKeys "{Enter}"
SendKeys "{P}"
SendKeys "{Enter}"
SendKeys "{ESC}"
SendKeys "%{F4}"
End Sub
اگه روی ویندوز های دیگه کار نکرد اعلام کنید
خب،
با این حساب تکلیف کد پست شماره 6 مشخص شد.
اما این پست شماره 10:
یکم این که کد نیست و کدنما است!
دویم این که بسیار hacky و unstable و شکننده است!
سیم این که بستگی به security policy داره (خیلی جاها که ادمین درست و حسابی داره دسترسی کاربر به خیلی چیزا بسته یا محدوده)
برای اینکه بخواهیم موقتا اختیارات کاربر را از نوع administrator کنیم و پس از اعمال تغییرات آن را به حالت قبلی برگردانیم نیاز هست از یک اسکریپت استفاده کنیم
Option Explicit
Public Sub RunPowerShellScript()
Dim strScriptPath As String
Dim strCommand As String
Dim shell As Object
' مسیر کامل به اسکریپت PowerShell
strScriptPath = "C:\Path\To\TemporaryAdmin.ps1"
' دستور PowerShell برای اجرای اسکریپت
strCommand = "powershell.exe -ExecutionPolicy Bypass -File """ & strScriptPath & """"
' ایجاد شیء Shell برای اجرای دستور
Set shell = CreateObject("WScript.Shell")
shell.Run strCommand, 1, True
' پیام موفقیت
MsgBox "PowerShell script executed successfully!", vbInformation
End Sub
این کد بدون استفاده از sendkeys System Locate را به Persian بر می گرداند فقط کافی فایل ضمیمه را از حالت زیپ دربیارید و در درایو مثلا c کپیش کنید .
یکم یه کوچولو تلاش میکردی به نتیجه می رسیدی !!! واقعا متاسفم
آخرین ویرایش به وسیله ARData : چهارشنبه 24 بهمن 1403 در 19:37 عصر
بیشتر از ی کوچولو تلاش شد !
بعد از خارج کردن فایل از حالت زیپ اون رو در درایو C کپی کردم
با راست کلیک بر روی فایل مطابق تصویر زیر سه گزینه در ابتدای منوی شناور نمایش داده میشود :
Script.png
نتیجه انتخاب گزینه اول ، دوم و سوم مطابق تصاویر ضمیمه:
در حالت دوم با درج حرف Y و بعد ENTER باید در کنترل پنل زبان به فارسی تبدیل میشد که تغییر حاصل نشد حتی بعد از ریستارت کردن کامپیوتر
در واقع علت عدم تغییر در تصویر شماره 3 بصورت سیستمی توضیح داده شده
قرار نیست از این فایل استفاده مستقیم بشه
شما کافیه از این کد در اکسس استفاده کنید :
Option Explicit
Public Sub RunPowerShellScript()
Dim strScriptPath As String
Dim strCommand As String
Dim shell As Object
' مسیر کامل به اسکریپت PowerShell
strScriptPath = "C:\Path\To\TemporaryAdmin.ps1"
' دستور PowerShell برای اجرای اسکریپت
strCommand = "powershell.exe -ExecutionPolicy Bypass -File """ & strScriptPath & """"
' ایجاد شیء Shell برای اجرای دستور
Set shell = CreateObject("WScript.Shell")
shell.Run strCommand, 1, True
' پیام موفقیت
MsgBox "PowerShell script executed successfully!", vbInformation
End Sub