ویندوز windows هر آنچه که به ویندوز و مباحث آن مرتبط است شامل ترفندها آموزش رفع اشکال و... |
12-01-2009
|
|
معاونت
|
|
تاریخ عضویت: Aug 2007
محل سکونت: یه غربت پر خاطره
نوشته ها: 11,775
سپاسها: : 521
1,688 سپاس در 686 نوشته ایشان در یکماه اخیر
|
|
رجیستری چیست؟
رجیستری چیست؟ برنامه ی رجیستری برنامه ای می باشد که ویندوز آن را در اختیار کاربر قرار داده است تا بتواند در دستورات و مقدارهای registery تغییراتی را به دلخواه ایجاد کند.
می توان گفت که انگیزه ی ساختن برنامه ی رجیستری از آنجایی شروع شد که کاربران Ms-DOS از این که عملا هیچگونه اختیاری در تنظیم منو ، پنجره ها و ... نداشتند ،خسته شدند. البته Ms-DOS از رجیستری مستثنی نبود و سه فایل Config.sys , MsDos.sys, Autoexec.Bat وجود داشتند که سیستم عامل Dos و جمعا برنامه های کاربردی تنظیماتی مانند اختصاص دادن Buffer و یا تعریف Cdrom و غیره را در این فایل ها ثبت می کردند. در واقع این سه فایل نقش رجیستری را ایفا می کردند. بعد از DOS سیستم عامل Win۳X به بازار آمد. در این سیستم عامل فایلهایی با پسوند ini که مهمترین آنها Win.ini , System.ini, Control.ini بودند، وظیفه رجیستری را بر عهده داشتند . در نهایت نسل سوم رجیستری با روی کار آمدن ویندوز ۹X وارد بازار شد. در این سیستم ها علاوه بر داشتن سه فایل Win۳X دو فایل دیگر با نامهای System.dat , User.dat اضافه شد .
تعریف رجیستری : برنامه ی رجیستری برنامه ای می باشد که ویندوز آن را در اختیار کاربر قرار داده است تا بتواند در دستورات و مقدارهای registery تغییراتی را به دلخواه ایجاد کند .
لازم به ذکر است که اگر اطلاعات کافی در مورد قسمتی از رجیستری ندارید هیچگاه آن را تغییر ندهید زیرا هر تغییری در رجیستری سریعا اعمال خواهد شد و برنامه ی regedit.exe هیچگونه تاییدی از کاربر نخواهد گرفت . Regedit.exe را چه چگونه اجرا کنیم؟ برای اجرا کردن Regedit.exe وارد منوی Run از دکمه Start شده، تایپ کنید Regedit.exe ، با فشردن دکمه ی OK برنامه اجرا خواهد شد . رجیستری شامل دو پنجره است که در پنجره ی سمت چپ ریشه و در پنجره ی سمت راست مقدارها مشخص می شود. در پنجره ی سمت چپ یک ریشه به نام My Computer و۵ شاخه با عنوان های زیر وجود دارد :
۱) HKEY_CLASSES_ROOT : شامل تناظر پسوند فایل ها و سایر تنظیمات ویندوز است .
۲) HKEY_CURRENT_USER : شامل تنظیماتی که مختص کاربر فعلی است .
۳) HKEY_LOCAL_MACHINE : شامل تنظیماتی که به طور سراسری اعمال می شود و به کاربر وابسته نیست .
۴) HKEY_USERS : شامل تنظیماتی که مختص هر یک از کاربران متعدد کامپیوتر ، از جمله کاربر فعلی است .
۵) HKEY_CURRENT_CONFIG : شا مل تنظیماتی که مختص پیکربندی سخت افزار موجود می باشد . اگر مفاهیم اولیه ی رجیستری را به خوبی یاد بگیرید دیگر هیچگاه واهمه ای در اعمال تغییرات در آن نخواهید داشت .
نحوه ی ساختن یک کلید در زیر کلید های دیگر: برای ساختن یک زیر کلید می توان برروی پوشه ی مورد نظر کلیک راست کرد، وارد منوی New شد و بعد منوی Key را انتخاب کرد، سپس نام مورد نظر را به جای New Value # ۱ تایپ کرده و با زدن دکمه ی Enter آن را تایید کنید. × مشاهده ی تغییرات ایجاد شده در رجیستری × اگر بخواهید در ویندوز ۹۸یا Me تاثیر تغییرات در رجیستری را سریعا مشاهده کنید ، سه کلید Ctrl+Alt+Del را همزمان فشار دهید و مدخل Explorer را انتخاب کنید و بعد دکمه ی End Task را بزنید با زدن این دکمه پنجره ی Shutdown ظاهر می شود، در پنجره ی Shutdown دکمه ی Cancel را بزنید، بعد از مدتی پنجره ای با عنوان A Program not responding ظاهر خواهد شد که شامل دو دکمه ی Cancel, End task می باشد. با زدن دکمه ی End task ، Explorer دوباره راه اندازی می شود و میتوانید تغییرات را مشاهده نمایید. در بعضی از دستورات راه اندازی دوباره ی Explorer موثر نمی باشد و تنها راه آن Logg off یا Restart می باشد.
در ویندوز های XP, ۲۰۰۰ برای اینکه بتوان تغییرات ایجاد شده را سریعا مشاهده کرد سه کلید Ctrl+Alt+Del را همزمان فشار دهید و بعد دکمه ی Task Manager را انتخاب کنید، از پنجره ی ظاهر شده Proccess Tab را فشار داده و بعد مدخل Explorer را انتخاب کرده و دکمه ی End Proccess را می زنیم ( در این مرحله Explorer بسته خواهد شد ) و بعد وارد Application Tab شده و دکمه ی New Task را می زنیم و بعد نام Explorer را تایپ کنید و با زدن دکمه ی OK، Explorer دوباره راو اندازی می شود و میتوانید تغییرات را مشاهده نمایید . توجه داشته باشد در بعضی از دستورات راه اندازی دوباره ی Explorer موثر نمی باشد و تنها راه آن Logg off یا Restart می باشد .
تهیه ی نسخه ی پشتیبان از رجیستری و تعمیر رجیستری آسیب دیده : دو فایل به نامهای Scanregw.exe, Scanreg.exe وجود دارند که در حقیقت وظیفه ی تهیه ی نسخه ی پشتیبان از رجیستری و تعمیر رجیستری آسیب دیده را به عهده دارند.
● برنامه ی Scanregw.exe :
۱) فقط در محیط ویندوز اجرا می شود .
۲) می تواند از رجیستری نسخه ی پشتیبان تهیه نماید و در فایلهایی با پسوند cab ذخیره کند .
۳) می تواند در حالت safemode نیز اجرا شود .
۴) در صورت لزوم رجیستری را Scan کرده و خطاها را گزارش می دهد .
۵) در صورت به وجود آمدن خطا نمی تواند آن را تعمیر کند.
● برنامه ی Scanreg.exe
۱) فقط در محیط Dos اجرا می شود .
۲) می تواند از رجیستری نسخه ی پشتیبان تهیه نماید و در فایلهایی با پسوند cab ذخیره کند .
۳) در صورت لزوم رجیستری را Scan کرده و خطاها را گزارش می دهد .
۴) در صورت به وجود آمدن خطا می تواند آن را تعمیر کند .
۵) می تواند تنظیمات رجیستری را به حالت قبل از تغییر ، برگرداند .
۶) هر بار که ویندوز بوت می شود به طور خودکار یک نسخه ی پشتیبان از رجیستری تهیه کرده و انها را در فایلهای مخفی با پسوند cab در مسیر مخفی C:Windowssysbackup ذخیره می کند .
|
کاربران زیر از SonBol به خاطر پست مفیدش تشکر کرده اند :
|
|
جای تبلیغات شما اینجا خالیست با ما تماس بگیرید
|
|
08-05-2011
|
|
کاربر عادی
|
|
تاریخ عضویت: Feb 2010
محل سکونت: کرمانشاه
نوشته ها: 50
سپاسها: : 54
31 سپاس در 21 نوشته ایشان در یکماه اخیر
|
|
رجیستری Registry
رجيستري چيست ؟
سيستم عاملويندوز تنظيمات سخت افزاري و نرم افزاري خود را بطور مرکزي در يک بانک اطلاعاتي باساختار سلسله مراتبي ذخيره مي کند که رجيستري نام دارد . رجيستري جايگزيني برايبسياري از فايلهاي پيکربندي INI ، SYS و COM است که در نسخه هاي اوليه ويندوز موجودبود . رجيستري ، سيستم عامل را با مهيا کردن اطلاعات موردنيز براي اجراي برنامه هاو load شدن component ها ، کنترل مي کند .
رجيستري شامل انواع مختلفي ازاطلاعات مي باشد مثل :
- اطلاعات سخت افزارهاي نصب شده روي سيستم
- اطلاعاتدرايورهاي نصب شده روي سيستم
- اطلاعات برنامه هاي نصب شده روي سيستم
- اطلاعات پروتکلهاي شبکه اي مورد استفاده در سيستم
ساختار رجيستري شامل چندينمجموعه رکورد است که داده هاي اين رکوردها توسط بسياري از برنامه ها و اجزاي سيستمعامل خوانده و يا نوشته مي شود .
اجزاي رجيستري
اجزاي تشکيل دهندهرجيستري عبارتند از :
1 – subtree : Subtree ها همانند folder هاي موجود در ريشهيک درايو هارد هستند . رجستری ويندوز داراي پنج subtree مي باشد :
- HKEY_LOCAL_MACHINE : شامل تمام داده هاي پيکربندي براي کامپيوتر مي باشد و شامل 5 key است :Hardware ، SAM ، Security ، Software و System
- HKEY_USERS : شاملداده هاي مربوط به تنظيمات سيستم عامل براي هر user است مثل تنظيمات desktop و محيطويندوز
- HKEY_CURRENT_USER : شامل داده هاي کاربر فعلي سيستم
- HKEY_CLASSES_ROOT : شامل اطلاعات پيکربندي نرم افزار است مثل داده هاي OLE و دادههاي کلاسهاي متناظر با فايل
- HKEY_CURRENT_CONFIG : شامل اطلاعات مورد نيازبراي تنظيمات داريورهاي سخت افزاري و غيره
2 – Key : key ها همانند folder ها و subfolder هاي روي هارد هستند . هر key متناظر با object هاي نرم افزاري يا سختافزاري مي باشد . subkey ها key هايي هستند که درون يکسري key قراردارند .
3 – Entry : هر key داراي يک يا چند entry است . هر entry داراي سه بخش مي باشد :
- نام Name
- نوع داده اي Data Type : مقدار هر entry يکي از انواع داده هاي زيراست :
REG_DWORD ، REG_SZ ، REG_EXPAND_SZ ، REG_BINARY ،
REG_MULTI_SZ ، REG_FULL_RESOURCE_DESCRIPTOT
- مقدار Value
نکته 1 : براي مشاهده رجيستري واعمال تغييرات در آن ( لطفاً اگر هيچ تجربه اي در تنظيم کردن رجيستري نداريداطلاعات آنرا تغيير ندهيد ) ، مي توانيد از برنامه regedit.exe و يا regedt32.exe موجود در ويندوز استفاده کنيد . براي اينکار کافيست نام برنامه را در کادر Run واردکنيد .
--------------------- براي کار با رجيستري در ويژوال بيسيک کلاس Registery.bas را مطابق مطالب زير ايجاد کرده و در پروژه هاي خود از آن استفاده کنيد :
1 - تعريف ثابتهاي مورد نياز : براي نوشتن اين کلاس نياز به تعريف چهار دسته ثابت داريم :
- ثابتهاي مربوط به تعريف data type هاي entry هاي رجيستري :
Global Const REG_SZ As Long = 1
Global Const REG_DWORD As Long = 4
- ثابتهاي مربوط به تعريف key هاي رجيستري
Global Const HKEY_CLASSES_ROOT = &H80000000
Global Const HKEY_CURRENT_USER = &H80000001
GlobalConst HKEY_LOCAL_MACHINE = &H80000002
Global Const HKEY_USERS = &H80000003
- ثابتهاي مربوط به خطاهاي کار با رجيستري
Global Const ERROR_NONE = 0
GlobalConst ERROR_BADDB = 1
Global Const ERROR_BADKEY = 2
Global ConstERROR_CANTOPEN = 3
Global Const ERROR_CANTREAD = 4
Global ConstERROR_CANTWRITE = 5
Global Const ERROR_OUTOFMEMORY = 6
Global ConstERROR_INVALID_PARAMETER = 7
Global Const ERROR_ACCESS_DENIED = 8
GlobalConst ERROR_INVALID_PARAMETERS = 87
Global Const ERROR_NO_MORE_ITEMS = 259
- ثابتهاي متفرقه
Global Const KEY_ALL_ACCESS = &H3F
Global Const REG_OPTION_NON_VOLATILE = 0
2 - Declare کردن Api هاي مورد نياز : براي کار با رجيستري از توابع کتابخانه Advapi32.dll استفاده مي کنيم . اين توابع عبارتند از :
- تابع RegCloseKey : آزاد کردن handle مربوط به يک key
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
- تابع RegCreateKeyEx : ساخت يک key در رجيستري ( اگر key قبلاً وجود داشته باشد ، اين تابع آنرا باز مي کند ) :
Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey AsString, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions AsLong, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult AsLong, lpdwDisposition As Long) As Long
- تابع RegOpenKeyEx : باز کردن يک key
Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey AsString, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) AsLong
- تابع RegQueryValueExLong : استخراج type و data ي يک نام متناظر با يک key باز شده
Declare Function RegQueryValueExStringLib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVallpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData AsString, lpcbData As Long) As Long
Declare Function RegQueryValueExLongLib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVallpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
Declare Function RegQueryValueExNULLLib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVallpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData AsLong, lpcbData As Long) As Long
- تابع RegSetValueEx : ذخيره يک مقدار در فيلد value يک کليد باز
Declare Function RegSetValueExStringLib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueNameAs String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue AsString, ByVal cbData As Long) As Long
Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName AsString, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByValcbData As Long) As Long
- تابع RegDeleteKey : پاک کردن يک کليد و کليه اطلاعات مرتبط با آن
Private Declare FunctionRegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)
- تابع RegDeleteValue : حذف مقدار يک key
Private Declare FunctionRegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey AsLong, ByVal lpValueName As String)
3 - توابع کمکي : براي نوشتن توابع اصلي کار با رجيستري نياز به نوشتن توابع کمکي زير است :
- تابع SetValueEx : با توجه به نوع داده يک کليد ، مقدار موجود در آنرا در يک متغير ذخيره مي کند :
Public Function SetValueEx(ByVal hKeyAs Long, sValueName As String, lType As Long, vValue As Variant) As Long
DimlValue As Long
Dim sValue As String
Select Case lType
Case REG_SZ ' type of value is string
sValue = vValue
SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))x
Case REG_DWORD ' type of value is Double word
lValue = vValue
SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)x
End Select
End Function
- تابع QueryValueEx : سايز و نوع داده اي يک داده را که بايد خوانده شود مشخص مي کند .
Function QueryValueEx(ByVal lhKey AsLong, ByVal szValueName As String, vValue As Variant) As Long
Dim cch AsLong
Dim lrc As Long
Dim lType As Long
Dim lValue As Long
Dim sValueAs String
lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)x
Select Case lType
' For strings
Case REG_SZ:
sValue = String(cch, 0)x
lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)x
If lrc = ERROR_NONE Then
vValue = Left$(sValue, cch)x
Else
vValue = Empty
End If
' For DWORDS
CaseREG_DWORD:
lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)x
If lrc = ERROR_NONE Then vValue = lValue
Case Else
'allother data types not supported
lrc = -1
EndSelect
QueryValueExExit:
QueryValueEx = lrc
ExitFunction
QueryValueExError:
Resume QueryValueExExit
EndFunction
4 - توابع اصلي : توابع مربوط به پاک کردن يک کليد از رجيستري ، ساخت يک کليد جديد در رجيستري و مقداردهي به يک کليد :
- تابع DeleteKey : اين تابع يک کليد از رجيستري را حذف مي کند . داراي دو پارامتر ورودي است :
Location که يکي از مقادير HKEY_CLASSES_ROOT ، HKEY_CURRENT_USER
، HKEY_LOCAL_MACHINE و يا HKEY_USERS است .
KeyName که نام کليدي است که بايد از رجيستري حذف شود . اين کليد ممکنست شامل subkey هايي نيز باشد مثلاً Key1\SubKey1
Public FunctionDeleteKey(lPredefinedKey As Long, sKeyName As String)x
Dim lRetVal As Long
lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)x
DeleteKey = lRetVal ' return function value
End Function
- تابع DeleteValue : اين تابع يک entry را از کليد حذف مي کند . داراي سه پارامتر ورودي است : Location ، KeyName و ValueName که نام آن value را مشخص مي کند .
Public FunctionDeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName AsString)x
Dim lRetVal As Long
Dim hKey As Long
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)x
lRetVal = RegDeleteValue(hKey, sValueName)x
RegCloseKey (hKey)x
DeleteValue = lRetVal
End Function
- تابع CreateNewKey : اين تابع يک کليد جديد ايجاد مي کند . داراي دو پارامتر ورودي است : Location و KeyName
Public FunctionCreateNewKey(lPredefinedKey As Long, sNewKeyName As String)x
Dim hNewKey AsLong
Dim lRetVal As Long
lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey, lRetVal)x
RegCloseKey (hNewKey)x
CreateNewKey = lRetVal
End Function
- تابع SetKeyValue : اين تابع پارامتر data يک entry را تنظيم مي کند . داراي 5 پارامتر ورودي است : Location ، KeyName ، ValueName ، ValueSetting و ValueType
Public FunctionSetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)x
Dim lRetVal As Long
DimhKey As Long
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)x
lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)x
RegCloseKey (hKey)x
SetKeyValue = lRetVal
EndFunction
- تابع QueryValue : اين تابع فيلد داده يک entry را برمي گرداند . داراي سه پارامتر ورودي است : Location ، KeyName و ValueName
Public FunctionQueryValue(lPredefinedKey As Long, sKeyName As String, sValueName AsString)x
Dim lRetVal As Long
Dim hKey As Long
Dim vValue As Variant
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)x
lRetVal = QueryValueEx(hKey, sValueName, vValue)x
QueryValue = vValue
RegCloseKey (hKey)x
End Function
--------------------------
ساخت يک انتصاب فايل يا FileAssociation به يک برنامه
در اين درس می خواهم با استفاده از کلاسی که در درس قبل معرفی شد تابعی بسازيم که توسط آن بتوانيم فايلهای با پسوندی مشخص را به يک برنامه اختصاص دهيم . بعبارت ديگر تابعی بنويسيم که اطلاعات لازم برای باز شدن فايلهايی با پسوند xxx را توسط برنامه MyApp.exe در رجيستری ثبت کند .
Public Sub CreateAssociation(***tensionAs String, sApplication As String, sAppPath As String)x
Dim sPath, sAppExe AsString
CreateNewKey "." & ***tension, HKEY_CLASSES_ROOT
SetKeyValueHKEY_CLASSES_ROOT, "." & ***tension, "", sApplication & ".Document", REG_SZ
CreateNewKey sApplication & ".Document\shell\open\command", HKEY_CLASSES_ROOT
SetKeyValue HKEY_CLASSES_ROOT, sApplication & ".Document", "", sApplication & " Document", REG_SZ
sPath = sAppPath & " %1"x
sAppExe = sApplication & ".exe"x
SetKeyValueHKEY_CLASSES_ROOT, sApplication& ".Document\shell\open\command", "", sPath, REG_SZ
CreateNewKey "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\." & ***tension, HKEY_CURRENT_USER
SetKeyValue HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\." & ***tension, "Application", sAppExe, REG_SZ
CreateNewKey "Applications\" & sAppExe & "\shell\open\command", HKEY_CLASSES_ROOT
SetKeyValueHKEY_CLASSES_ROOT, "Applications\" & sAppExe & "\shell\open\command", "", sPath, REG_SZ
End Sub
کاربرد اين تابع بصورت زير است :
CreateAssociation("xxx","MyApp","c:\MyApp.exe")x
اجرا شدن يک برنامه در هنگام راه اندازی سيستم
فرض کنيد می خواهيم برنامه ای بنويسيم که هر بار در هنگام راه اندازي سيستم بطور خودكار اجرا شود. البته نمي خواهم در startup ويندوز ديده شود .
براي اين كار بايد برنامه موردنظر را در StartUp رجيستري قرار دهيم . به اين ترتيب كه در يكي از كليدهاي زير يك مقدار رشته اي جديد(String Value) ايجاد کنيم و آدرس برنامه را در آن وارد كنيم :
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion \Run
براي مثال اگه اسم برنامه مورد نظر MyApp و مسيرش C:\Windows\MyApp.exe است بايد بصورت زير عمل کرد :
SetKeyValue HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "MyApp", "C:\MyApp.exe", REG_SZ
نکته : البته دو تا راه ديگر برای اينکار وجود دارد که برخی تروجان ها هم از اين روشها استفاده می کنند تا روی سيستم باقی بمانند :
يكي استفاده از win.ini و نوشتن نام فايل جلوي = run و ديگري استفاده از system.ini و نوشتن نام برنامه جلوي خط explorer.exe .
|
کاربران زیر از ali_zangeneh به خاطر پست مفیدش تشکر کرده اند :
|
|
کاربران در حال دیدن موضوع: 1 نفر (0 عضو و 1 مهمان)
|
|
مجوز های ارسال و ویرایش
|
شما نمیتوانید موضوع جدیدی ارسال کنید
شما امکان ارسال پاسخ را ندارید
شما نمیتوانید فایل پیوست در پست خود ضمیمه کنید
شما نمیتوانید پست های خود را ویرایش کنید
اچ تی ام ال غیر فعال می باشد
|
|
|
اکنون ساعت 03:57 AM برپایه ساعت جهانی (GMT - گرینویچ) +3.5 می باشد.
|