من منظورم صفحه کلید اختصاصی نبود آیا در حالت نرمال میشه توی این فایل رو جایگزین کرد که گچپژ درست بشه یعنی جاشون درست بشه
بهتر است برای این منظور فایل دیگری که دارای آرایش مناسب حروف بر روی صفحه کلید هست را با یک نام دیگر در شاخه system32 ویندوز کپی کرده و سپس نام آن را به عنوان صفحه کلید فعال در رجیستری ویندوز ذخیره کنید.
آدرس موردنظر برای تغییر دررجیستری:
[HKEY_LOCAL_MACHINE\SYSTEM\currentControlSet\Contro  l\Keyboard Layouts\00000429]
"Layout Text"="farsi"
"Layout Display Name"="@%SystemRoot%\\system32\\input.dll,-5124"
"Layout File"="kbdfarsi.dll"

که در اینجا مثلا نام فایل جدید صفحه کلید فارسی (که آن را مطابق میل تغییر داده اید) kbdfarsi.dll می باشد. (البته چندین نمونه مختلف (صفحه کلید فارسی تصحیح شده) برای این منظور در همین سایت وجود دارد .
نکته: در زمینه حروف پژگچ موجود در صفحه کلید فارسی پیش فرض خود ویندوز نیز تنها دو حرف ژ و پ سرجای واقعی (واقعی که نمی توان گفت بلکه استاندارد قدیمی ) خود قرار ندارند و البته اکنون که بسیاری از کاربران نیز به این سبک آرایش حروف صفحه کلید عادت کرده اند.

در رابطه با نمونه سورس کد جهت تغییر و تنظیم عربی و ... کد جدیدش که قابلیت تنظیم کشور ایران و دیگر تنظیمات مربوط به فارسی (عدد و تاریخ و ....) که مربوط به گزینه اول (regional options ) از آیتم Regional and language options را نیز دارد در اینجا قرار می دهم:


procedure NonUnicode_Lang(Language: TLanguageName);
begin
Reg := TRegistry.Create;
with Reg do
try
RootKey := HKEY_LOCAL_MACHINE;
if OpenKey('SYSTEM\CurrentControlSet\Control\Nls\Code Page',False) then
begin
case Language of
Fa,Ar : begin
if ReadString('ACP') <> '1256' then
begin
WriteString('ACP','1256');
WriteString('OEMCP','720');
WriteString('MACCP','10004');
end;
end;
end;//case
CloseKey;
end;
if OpenKey('SYSTEM\CurrentControlSet\Control\Nls\Lang uage',False) then
begin
case Language of
Ar : begin
if ReadString('Default') <> '0401' then
WriteString('Default','0401');
end;
Fa : begin
if ReadString('Default') <> '0429' then
WriteString('Default','0429');
end;
end;//case
if ReadString('0429') <> 'l_intl.nls' then
WriteString('0429','l_intl.nls');
CloseKey;
end;
if OpenKey('SYSTEM\CurrentControlSet\Control\Nls\Lang uage Groups',True) then
begin
if ReadString('d') <> '1' then
WriteString('d','1');
CloseKey;
end;
if OpenKey('SYSTEM\CurrentControlSet\Control\Nls\Loca le',True) then
begin
if ReadString('00000429') <> 'd' then
WriteString('00000429','d');
CloseKey;
end;
if OpenKey('SYSTEM\CurrentControlSet\Control\keyboard layouts\00000429',True) then
begin
if ReadString('Layout File') <> 'KBDFA.DLL' then
WriteString('Layout File','KBDFA.DLL');
if ReadString('Layout Text') <> 'Farsi' then
WriteString('Layout Text','Farsi');
CloseKey;
end;
RootKey := HKEY_CURRENT_USER;
if OpenKey('Control Panel\International',False) then
begin
if ReadString('Locale') <> '00000429' then
begin
WriteString('iCalendarType','2');
WriteString('iCountry' ,'981');
WriteString('iCurrDigits','2');
WriteString('iCurrency' ,'2');
WriteString('iDate' ,'2');
WriteString('iDigits' ,'2');
WriteString('iNegCurr' ,'3');
WriteString('iNegNumber' ,'3');
WriteString('iTLZero' ,'1');
WriteString('Locale' ,'00000429');
WriteString('NumShape' ,'0');
WriteString('s1159','ق.ظ');
WriteString('s2359','ب.ظ');
WriteString('sCountry' ,'Iran');
WriteString('sCurrency','ریال');
WriteString('sLanguage','FAR');
WriteString('sLongDate','yyyy/MM/dd');
// WriteString('sNativeDigits','0123456789');
WriteString('sShortDate','yyyy/MM/dd');
end;
CloseKey;
end;
if OpenKey('Control Panel\International\Geo',False) then
begin
if ReadString('Nation') <> '116' then
begin
// WriteString('Nation','116');
end;
CloseKey;
end;
finally
Reg.Free;
end;//try..finally
//end;
end;
//-------------------------------------

که به هنگام پیاده سازی تغییرات چک می کند اگر قبلا دارای چنین تنظیمی بوده دیگه مقدار جدید را ذخیره نمی کند (چرا که بعضا حتی اگر مقدار قبلی چنین باشد در صورت تغییر سیستم نیاز به ریستارت پیدا می کند).
و متن فایل رجیستری که برای این منظور هست (تغییر یونی به عربی, تنظیم نام صفحه کلید, تنظیمات مربوط به کشور ایران و ....) را نیز قرار می دهم تا دوستانی که مایل به ایمپورت آن به برنامه های نصب دیگر هستند استفاده کنند.

[HKEY_LOCAL_MACHINE\SYSTEM\SYSTEM\CurrentControlSet \Control\Nls\CodePage]
"ACP"="1256"
"OEMCP"="720"
"MACCP"="10004"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Nls\Language]
"Default"="0401"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Nls\Language Groups]
"d"="1"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Nls\Locale]
"00000429"="d"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\keyboard layouts\00000429]
"Layout File"="KBDFA.DLL"
"Layout Text"="Farsi"
[HKEY_CURRENT_USER\Control Panel\International]
"iCalendarType"="2"
"iCountry"="981"
"iCurrDigits"="2"
"iCurrency"="2"
"iDate"="2"
"iDigits"="2"
"iNegCurr"="3"
"iNegNumber"="3"
"iTLZero"="1"
"Locale"="00000429"
"NumShape"="0"
"s1159"="ق.ظ"
"s2359"="ب.ظ"
"sCountry"="Iran"
"sCurrency"="ریال"
"sLanguage"="FAR"
"sLongDate"="yyyy/MM/dd"
"sShortDate"="yyyy/MM/dd"
[HKEY_CURRENT_USER\Control Panel\International\Geo]
"Nation"="116"