• مشکی
  • سفید
  • سبز
  • آبی
  • قرمز
  • نارنجی
  • بنفش
  • طلایی
تعداد مطالب : 27
تعداد نظرات : 22
زمان آخرین مطلب : 5326روز قبل
آموزش و تحقيقات
ایجاد کردن شئی های جدول در درسهای گذشته، شما آموختید که چگونه خصوصیات گوناگون از قبیل مقادیر پیش فرض و Check Constraints برای ستونهای خاص از یک جدول تخصیص دهیم. بعضی مواقع اگر چه، یک نوع خاص از ستون در چندین جدول مختلف استفاده می گردد. در این وضعیت، آن اغلب مفید می باشد به ایجاد Properties در یک جای جداگانه به طوری که آنها را برای هر جدول به کار ببریم. پیش فرضها، نقشها و انواع داده تعریف شده کاربر مکانیزمی را برای ایجاد و نگهداری این شئی ها در یک مکان جداگانه فراهم می آورند. برای مثال شما یک مدل پایگاه داده برای جوابگویی به ارزیابی مشتری می سازید. شما در ابتدا تصمیم می گیرید که مقدار پیش فرض برای هر سؤالی که جواب داده نشده باید Unknown"" شوند. اگر شما یک پیش فرض ایجاد کنید و پیش فرضها را برای ستون مناسب پیوند دهید. شما می توانید بعداً پیش فرض را به Unanswered تغییر دهید. بدون هیچ تغییری هر ستون، آن پیش فرض را استفاده می کند. شناخت پیش فرضها توابع پیش فرض از همان راهی که خصوصیات پیش فرض که شما مشخص می کنید زمانی که شما یک ستون در Table Designer ایجاد می کنید آنها مقادیری هستند که به طور خودکار به وسیله SQL Server تخصیص داده می شوند. اگر کاربر یک مقدار را زمانی که سطری را ایجاد می کند مشخص نکند. اگر چه پیش فرض، شئی های سطح پایگاه داده می باشند که می تواند برای چندین ستونها به کار برده شوند. ایجادکردن پیش فرضها از موقعی که پیش فرض، شئی های مستقل در داخل پایگاه داده هستند، شئی باید پیش فرض را ایجاد کند قبل از اینکه شئی بتواند آن را برای یک ستون جدول متصل سازد. ایجاد کردن یک پیش فرض 1- پوشه Defaults را از پایگاه داده Aromatherapy از درختConsole جستجو می کنیم. SQL Server یک لیستی از Default ها را در قالب Details نشان می دهد. (چیزی در پایگاه داده Sample وجود ندارد). 2- دکمه Newرا کلیک کرده، SQL Server کادر محاوه ای Default Properties را نشان می دهد. 3- در فیلدName ، Default Unknown را تایپ می کنیم. 4- "Unknown" را در فیلد Value تایپ می کنیم. 5- OK را کلیک کرده،SQL Server پیش فرض را ایجاد می کند. ربط دادن یک پیش فرض به یک ستون 1- پوشهTables را راهبری کرده، Table Designer را برای جدول Oil با کلیک راست کردن نام جدول در قاب Details باز کرده و Table Design را انتخاب می کنیم. 2- یک ستون جدید برای جدولی که Sample نامیده شده اضافه می کنیم. انواع داده پیش فرض را پذیرفته و طول آن به وسیله SQL Server پیشنهاد می گردد. 3- فیلد Default Valve را برای ستون کلیک کرده و سپس dbo.DefaultUnknown را از لیست انتخاب می کنیم. 4- دکمه Save را کلیک کردهSQL Server جدول را ذخیره می کند. قطع پیوند یک پیش فرض 1- اگر Table Designer برای جدول Oilsاز تمرین قبل باز نیست، آن را به وسیله کلیک راست کردن نام جدول در قاب Pet ail> باز کرده و Design Table را انتخاب می کنیم. SQL Server، Table Disdainer را باز می کند. 2- ستون Sampleرا انتخاب کرده، Table Designerخصوصیات این ستون را نشان می دهد. 3- dbo.DefaultUnknown را در فیلد Default Value انتخاب کرده و کلید Delete را برای برداشتن مقدار فشار می دهیم. 4- دکمه Save راکلیک کرده SQL Server تغییرات برای تعریف ستون را ذخیره می سازد. شناخت نقشها نقشها مانند پیش فرضها سطوح شئی های پایگاه داده می باشند که می تواند برای ستونها در جداول چندگانه به کار برده شوند. یک نقش Check Constraint موجود می باشد که مشخص می کند مقادیر داده ها در یک ستون مورد قبول می باشند، اما استفاده از آن بیشتر محدود شده است. یک ستون می تواند چندین Check Constraintداشته باشد که برای آن به کار برده می شود. راهنمایی: مایکروسافت نقشها و توصیه ها را که با Check Constraint جایگزین می شود را درست نمی داند. اگر چه نقشها هنوز جایگاهشان را در پایگاه داده هایSQL Server دارند از زمانی که فقط یک وظیفه بتواند برای نوع داده هایی که به وسیله SQL Server تعریف شده به کار برده شود. برخلاف Check Constraint ، یک نقش نمی تواند مبنایی برای یک ستون به طور مستقیم باشد. در عوض، مقادیری که یک نقش به کار می برد به نقشی که در یک متغیری که فرمت@Variable Name می گیرد داده می شود. در مورد متغیرها در Detail در فصل 24 بحث خواهیم کرد. ایجاد کردن نقشها از زمانی که نقشها مانند Defaults مستقل از شئی های پایگاه داده می باشند، شما باید آنها را قبل از اینکه شما بتوانید آنها را برای یک ستون در جدول به کار ببرید ایجاد کنید. ایجاد یک نقش 1- پوشه نقش را از پایگاه داده در درخت Console راهبری کرده SQL Server یک لیستی از نقشها در پایگاه داده نشان می دهد. (لیست در پایگاه داده Sample خالی می باشد) 2- دکمه New را کلیک کردهSQL Server کادر محاوره ای را باز می کند. 3- Sample Rule را به عنوان نام نقش تایپ می کنیم. 4- LEN(@Fldalue)>3 را به عنوان متن نقش تایپ می کنیم. راهنمایی: به خاطر داشته باشید LEN یک تابعTransact SQL می باشد که تعدادی از کاراکترها را در یک متن رشته ای برمی گرداند و اینکه @ قبل از یک بر چسب عبارتTransact SQL یک متغیــر را نشان می دهد، یک مقدار که برای عبارت داده می شود. بنابراین در این حالت نقش Trueمی گردد اگر طول ستون بزرگتر از 3 باشد. 5-OK را کلیک کرده، SQL Server کادر محاوره ای Rule Properties را می بندد و نقش را ایجاد می کند. ربط دادن یک Rule به یک ستون 1- کادر محاوره ای Rule Properties را برایSample Rule به وسیله دابل کلیک کردن نام Rule در قاب Details باز می کنیم. SQL Server کادر محاوره ای Rule Properties را نشان می دهد. 2- ستونBind را کلیک کرده SQL Server کادر محاوره ایBind Rule to Columns را نشان می دهد. 3- [dbo].[Oils] را درTable Combo Box انتخاب می کنیم.SQL Server فیلدها را در جدول Oils نشان می دهد. 4- ستون Sample را در لیست Unbound Columns انتخاب کرده و سپس Add را کلیک می کنیم. SQL Server ستون را به لیست Bound Columns حرکت می دهد. 5- SQL Server کادر محاوره ایBind Rule to Columns را می بندد. 6-OK را مجدداً برای بستن کادر محاوره ای Rule Properties کلیک می کنیم. شناخت User-Defined Data Types نقشها و پیش فرضها مکانیزم مفیدی برای نگهداری محدودیتهای پایگاه داده ها می باشند، اما SQL Server حتی مکانیزم قوی تری در User-Defined Data Typesها فراهم می آورد. User-Defined Data Types بر مبنای هیچ نوع از پایگاه داده حقیقی مشخص نمی گردد و شامل مشخصاتی از طول ستون می باشد. به طور کلی نقشها و پیش فرضها ممکن است به طور انتخابی برای یکUser-Defined Data Types به کار برده شوند. زمانی که یک ستون بر مبنای یک User-Defined Data Typesایجاد می گردد، ستون جدول همه خصوصیات مشخص شده را برای آن نمونه به ارث خواهد برد. زمانی که مشخصات از User-Defined Data Typesتغییرمی یابد،نقشها برای ستونها بر اساس آن نمونه همچنین تغییر خواهد کرد. راهنمایی: اگر یک User-Defined Data Type در پایگاه داده Model ایجاد گردد، همه پایگاه داده جدید به طور خودکار به آن نوع دسترسی خواهد داشت. ایجادکردن User-Defined Data Types User-Defined Data Types از شئی های پایگاه داده مستقل می باشند و باید در داخل پایگاه داده تعریف شوند قبل از اینکه آنها بتوانند به ستونها تخصیص داده شوند. ایجاد کردن یک User-Defined Data Types 1- پوشه User-Defined Data Types را از پایگاه داده Aromatherapy راهبری می کنیم. SQL Server یک لیستی ازUser-Defined Data Types را نشان می دهد (چیزی در پایگاه داده Sample وجودندارد). 2- دکمه New را کلیک کرده SQL Server کادر محاوره ای User-Defined Data Types را نشان می دهد. 3- MySample را به عنوان نام User-Defined Data Types تایپ می کنیم. 4- نوع داده پایگاه را varchar و طول آن را 20 قرار می دهیم. 5- Dbo.Sample Rule را در Rule Combo Box انتخاب می کنیم. 6- مقادیر پیش فرض برای Allow Nulls و گزینه های پیش فرض را می پذیریم و OKرا کلیک می کنیم. SQL Server ، User-Defined Data Types را ایجاد می کند. تخصیص یک ستون برای یک User-Defined Data Types 1- Table Designer را برای جدول Oils به وسیله کلیک راست کردن نام آن در قاب Details باز می کنیم و Details Table را انتخاب می کنیم. SQL Server ، Table Designer را باز می کند. 2- ستون Sample را انتخاب کرده وMySample را از Data Type Combo Boxرا انتخاب می کنیم. Data Type , SQL Server را برای MySampleقرار می دهد. راهنمایی: User-Defined Data Types در پایین لیست Data Type می باشد. 3- دکمهSave را کلیک کردهSQL Server جدول را با تعریف جدید ذخیره می سازد.
جمعه 3/7/1388 - 2:50
آموزش و تحقيقات
رجیستری چیست؟
سیستم عامل ویندوز تنظیمات سخت افزاری و نرم افزاری خود را بطور مرکزی در یک بانک اطلاعاتی با ساختار سلسله مراتبی ذخیره می کند که رجیستری نام دارد. رجیستری جایگزینی برای بسیاری از فایلهای پیکربندی INI ،SYS و COM است که در نسخه های اولیه ویندوز موجود بود. رجیستری، سیستم عامل را با مهیا کردن اطلاعات مورد نیاز برای اجرای برنامه ها و لود شدن کامپونت (Component) ها، کنترل می کند.
رجیستری شامل انواع مختلفی از اطلاعات می باشد، مثل:
- اطلاعات سخت افزارهای نصب شده روی سیستم
- اطلاعات درایورهای نصب شده روی سیستم
- اطلاعات برنامه های نصب شده روی سیستم
- اطلاعات پروتکلهای شبکه ای مورد استفاده در سیستم
ساختار رجیستری شامل چندین مجموعه رکورد است که داده های این رکوردها توسط بسیاری از برنامه ها و اجزای سیستم عامل خوانده و یا نوشته می شود.

اجزای رجیستری:
اجزای تشکیل دهنده رجیستری عبارتند از:

1- زیر شاخه (Subtree):
زیر شاخه ها همانند فولدر (Folder) های موجود در ریشه یک درایو هارد هستند. رجستری ویندوز دارای پنج زیر شاخه می باشد:
- HKEY_LOCAL_MACHINE: شامل تمام داده های پیکربندی برای کامپیوتر می باشد و شامل 5 کلید (Key) است:Hardware ،SAM ،Security ،Software و System
- HKEY_USERS: شامل داده های مربوط به تنظیمات سیستم عامل برای هر کاربر (User) است مثل تنظیمات دسکتاپ و محیط ویندوز.
- HKEY_CURRENT_USER: شامل داده های کاربر فعلی سیستم.
- HKEY_CLASSES_ROOT: شامل اطلاعات پیکربندی نرم افزار است مثل داده های OLE و داده های کلاسهای متناظر با فایل.
- HKEY_CURRENT_CONFIG: شامل اطلاعات مورد نیاز برای تنظیمات داریورهای سخت افزاری و غیره.

2- کلید (Key):
کلیدها همانند فولدرها و پوشه هاای روی هارد هستند. هر کلید متناظر با آبجکت های (Object) نرم افزاری یا سخت افزاری می باشد. زیر کلیدها (Subkey)، کلیدهایی هستند که درون یکسری کلید قرار دارند.

3- Entry:
هر کلید دارای یک یا چند entry است. هر entry دارای سه بخش می باشد:

الف) نام Name

ب) نوع داده ای Data Type - مقدار هر entry یکی از انواع داده های زیر است:
REG_DWORD
REG_SZ
REG_EXPAND_SZ
REG_BINARY
REG_MULTI_SZ
REG_FULL_RESOURCE_DESCRIPTOT

ج) مقدار (Value)

برای کار با رجیستری در ویژوال بیسیک کلاس Registery.bas را مطابق مطالب زیر ایجاد کرده و در پروژه های خود از آن استفاده کنید.
نکته 1: برای مشاهده رجیستری و اعمال تغییرات در آن (لطفاً اگر هیچ تجربه ای در تنظیم کردن رجیستری ندارید، اطلاعات آنرا تغییر ندهید)، می توانید از برنامه regedit.exe و یا regedt32.exe موجود در ویندوز استفاده کنید. برای این کار کافیست نام برنامه را در کادر Run وارد کنید.

1- تعریف ثابتهای مورد نیاز:
برای نوشتن این کلاس نیاز به تعریف چهار دسته ثابت داریم:

- ثابتهای مربوط به تعریف نوع داده (Data Type) های entry های رجیستری:

Global Const REG_SZ As Long = 1
Global Const REG_DWORD As Long = 4


- ثابتهای مربوط به تعریف کلیدهای رجیستری:

Global Const HKEY_CLASSES_ROOT = &H80000000
Global Const HKEY_CURRENT_USER = &H80000001
Global Const HKEY_LOCAL_MACHINE = &H80000002
Global Const HKEY_USERS = &H80000003


- ثابتهای مربوط به خطاهای کار با رجیستری:

Global Const ERROR_NONE = 0
Global Const ERROR_BADDB = 1
Global Const ERROR_BADKEY = 2
Global Const ERROR_CANTOPEN = 3
Global Const ERROR_CANTREAD = 4
Global Const ERROR_CANTWRITE = 5
Global Const ERROR_OUTOFMEMORY = 6
Global Const ERROR_INVALID_PARAMETER = 7
Global Const ERROR_ACCESS_DENIED = 8
Global Const 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 مربوط به یک کلید

Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long


- تابع RegCreateKeyEx: ساخت یک کلید در رجیستری (اگر کلید قبلاً وجود داشته باشد، این تابع آنرا باز می کند).

Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long


- تابع RegOpenKeyEx: باز کردن یک کلید

Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long


- تابع RegQueryValueExLong: استخراج نوع (Type) و داده (Data) یک نام متناظر با یک کلید باز شده

Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long


- تابع RegSetValueEx: ذخیره یک مقدار در فیلد Value یک کلید باز

Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long


- تابع RegDeleteKey: پاک کردن یک کلید و کلیه اطلاعات مرتبط با آن

Private Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)


- تابع RegDeleteValue: حذف مقدار یک کلید

Private Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String)


3- توابع کمکی:
برای نوشتن توابع اصلی کار با رجیستری نیاز به نوشتن توابع کمکی زیر است:

- تابع SetValueEx: با توجه به نوع داده یک کلید، مقدار موجود در آنرا در یک متغیر ذخیره می کند.

Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long
  Dim lValue 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))
   Case REG_DWORD " type of value is Double word
    lValue = vValue
    SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)
   End Select
End Function


- تابع QueryValueEx: سایز و نوع داده ای یک داده را که باید خوانده شود را مشخص می کند.

Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long
  Dim cch As Long
  Dim lrc As Long
  Dim lType As Long
  Dim lValue As Long
  Dim sValue As String
  lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
  Select Case lType
   " For strings
   Case REG_SZ:
    sValue = String(cch, 0)
    lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
    If lrc = ERROR_NONE Then
     vValue = Left$(sValue, cch)
    Else
     vValue = Empty
    End If
   " For DWORDS
   Case REG_DWORD:
    lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)
    If lrc = ERROR_NONE Then vValue = lValue
   Case Else
    "all other data types not supported
    lrc = -1
  End Select
QueryValueExExit:
  QueryValueEx = lrc
  Exit Function
QueryValueExError:
  Resume QueryValueExExit
End Function


4- توابع اصلی:
توابع مربوط به پاک کردن یک کلید از رجیستری، ساخت یک کلید جدید در رجیستری و مقداردهی به یک کلید:

- تابع DeleteKey: این تابع یک کلید از رجیستری را حذف می کند. دارای دو پارامتر ورودی است:
الف) Location که یکی از مقادیر HKEY_CLASSES_ROOT ،HKEY_CURRENT_USER ،HKEY_LOCAL_MACHINE و یا HKEY_USERS است.
ب) KeyName که نام کلیدی است که باید از رجیستری حذف شود. این کلید ممکن است شامل زیر کلیدهایی نیز باشد مثلاً Key1\SubKey1

Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String)
  Dim lRetVal As Long
  lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)
  DeleteKey = lRetVal " return function value
End Function


- تابع DeleteValue: این تابع یک entry را از کلید حذف می کند. دارای سه پارامتر ورودی است:
Location ،KeyName و ValueName که نام آن مقدار (Value) را مشخص می کند.

Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
  Dim lRetVal As Long
  Dim hKey As Long
  lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
  lRetVal = RegDeleteValue(hKey, sValueName)
  RegCloseKey (hKey)
  DeleteValue = lRetVal
End Function


- تابع CreateNewKey: این تابع یک کلید جدید ایجاد می کند. دارای دو پارامتر ورودی است: Location و KeyName

Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)
  Dim hNewKey As Long
  Dim lRetVal As Long
  lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey, lRetVal)
  RegCloseKey (hNewKey)
  CreateNewKey = lRetVal
End Function


- تابع SetKeyValue: این تابع پارامتر Data یک entry را تنظیم می کند. دارای 5 پارامتر ورودی است:
Location ،KeyName ،ValueName ،ValueSetting و ValueType

Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)
  Dim lRetVal As Long
  Dim hKey As Long
  lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
  lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
  RegCloseKey (hKey)
  SetKeyValue = lRetVal
End Function


- تابع QueryValue: این تابع فیلد داده یک entry را برمی گرداند. دارای سه پارامتر ورودی است:
Location ،KeyName و ValueName

Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
  Dim lRetVal As Long
  Dim hKey As Long
  Dim vValue As Variant
  lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
  lRetVal = QueryValueEx(hKey, sValueName, vValue)
  QueryValue = vValue
  RegCloseKey (hKey)
End Function


ساخت یک انتصاب فایل (File Association) به یک برنامه:
در این بخش می خواهم با استفاده از کلاسی که معرفی شد، تابعی بسازیم که توسط آن بتوانیم فایلهای با پسوندی مشخص را به یک برنامه اختصاص دهیم. بعبارت دیگر تابعی بنویسیم که اطلاعات لازم برای باز شدن فایلهایی با پسوند xxx را توسط برنامه MyApp.exe در رجیستری ثبت کند.

Public Sub CreateAssociation(sExtension As String, sApplication As String, sAppPath As String)
  Dim sPath, sAppExe As String
  CreateNewKey "." & sExtension, HKEY_CLASSES_ROOT
  SetKeyValue HKEY_CLASSES_ROOT, "." & sExtension, "", 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"
  sAppExe = sApplication & ".exe"
  SetKeyValue HKEY_CLASSES_ROOT, sApplication & ".Document\shell\open\command", "", sPath, REG_SZ
  CreateNewKey "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\." & sExtension, HKEY_CURRENT_USER
  SetKeyValue HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\." & sExtension, "Application", sAppExe, REG_SZ
  CreateNewKey "Applications\" & sAppExe & "\shell\open\command", HKEY_CLASSES_ROOT
  SetKeyValue HKEY_CLASSES_ROOT, "Applications\" & sAppExe & "\shell\open\command", "", sPath, REG_SZ
End Sub


کاربرد این تابع بصورت زیر است:

Call CreateAssociation("xxx", "MyApp", "c:\MyApp.exe")


اجرا شدن یک برنامه در هنگام راه اندازی سیستم:
فرض کنید می خواهیم برنامه ای بنویسیم که هر بار در هنگام راه اندازی سیستم بطور خودكار اجرا شود. البته نمی خواهم در 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

جمعه 3/7/1388 - 2:41
آموزش و تحقيقات
procedure SetSecurityRights(cFile : string);

var
pDACL: PACL;
pEA: PEXPLICIT_ACCESS_A;
R: DWORD;
begin
pEA := AllocMem(SizeOf(EXPLICIT_ACCESS));
BuildExplicitAccessWithName(pEA, "EVERYONE",
GENERIC_READ,GRANT_ACCESS, NO_INHERITANCE);
R := SetEntriesInAcl(1, pEA, nil, pDACL);
if R = ERROR_SUCCESS then
begin
if SetNamedSecurityInfo(pchar(cFile),
SE_FILE_OBJECT,DACL_SECURITY_INFORMATION, nil, nil, pDACL, nil) <>
ERROR_SUCCESS then
ShowMessage("SetNamedSecurityInfo failed: " +
SysErrorMessage(GetLastError));
LocalFree(Cardinal(pDACL));
end
else ShowMessage("SetEntriesInAcl failed: " + SysErrorMessage(R));
end
جمعه 3/7/1388 - 2:26
دانستنی های علمی

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

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

دوشنبه 23/6/1388 - 17:31
دانستنی های علمی
یكی از علمای موثق حوزه علمیه قم نقل میكند آخ:
در حدود سال ١٣٩٠ قمری.تعطیلات تابستان را در تبریز بودم.یكی از فضلا آه اآنون از اساتید دانشگاه در تهران است در محفل
جمعی از بزرگان گفت:
دیروز قم در محضر یكی از مراجع بزرگ تقلید بودم یكی از طلاب همدان با اظطراب و پریشانی به محضر ایشان عرض آرد:آقا من
ساآن همدان هستم مدتی است منزلم مورد حمله جنها قرار گرفته بصورتی آه حتی از داخل اطاق و از زیر سقف سنگباران
میشویم و زندگی برایمان غیر ممكن شده است.
اخیرا" یكی از اهل فن به خانه امد و روی ناخن دختر خردسالم چیزهایی نوشت و به این وسله از انان پرسید آه چرا ما را اذیت
می دهند.
آنها هم پاسخ دادند آه چون در این خانه ما را اذیت آرده اند اله این منزل را از زندگی ساقط خواهیم آرد.از او پرسیدم :آیا من
هم میتوانم سوال آنم؟
پاسخ داد بلی.به دخترم گفتم:از آنها بپرس مسلمانند یا آافر؟
جواب دادند آه مسلمانیم
گفتم بپرس چه مذهبی دارند.پاسخ دادند آه شیعه اثنی عشری هستیم
و در سوال بعدی معلوم شد آه از حضرت علی تقلید میكنند.
پرسیدم :اگر ایشان شما را نهی آنند از آزار ما دست بر خواهید داشت؟چون پاسخ مثبت بود به شما پناه آورده این تا ما را
نجات دهید
آن مرجع بزرگوار فرمود:امروز عصر بیا تا نامه ای بنویسم آه توسط همان شخص و به همان صورت به آنان منتقل شود
ناقل حكایت می گوید:پس از تعطیلات تابستان و مراجعت به قم از آن قضیه سوال آردم معلوم شد آه طی نامه ای اطلاع داده
آه به برآت آن مكتوب .مراحمت تماما" برطرف شده است
دوشنبه 23/6/1388 - 17:19
دعا و زیارت
در قرآن قرآن به پاره ای از مسائل علمی، از جمله كیهان شناسی، اشاره ای گذرا دارد و شاید هیچ آیه ای، مستقیم یا مستقل به ذكر آفرینش جهان و كیفیت وجود آسمان و زمین نپرداخته باشد. همیشه در راستای اثبات خداشناسی و عظمت قدرت او... بوده است.
با وجود این مسائلی علمی كه قرآن به آن نپرداخته است با دستاوردهای بشر كنونی همخوانی دارد و آیه ای از قرآن با تفسیر درست آن با نظریه علمی قطعی مخالفتی ندارد.
سایت «سكولاریسم برای ایران» یك سلسله شبهاتی درباره تناقضات قرآن مطرح نموده كه یكی از آنها این است كه «بعضی از آیات، آفرینش آسمان را مقدم كرده و بعضی دیگر آفرینش زمین را. و نتیجه گرفته كه قرآن تناقض گویی كرده است. شبهه فوق دارای اشكالات عدیده ای است كه در پاسخ لازم است دیدگاه قرآن را درباره خلقت جهان (آسمان و زمین) بررسی شود.
قرآن كریم در دو آیه، به صورت گذرا و اجمالی، به مسئله ی آغاز جهان اشاره كرده است.
آیه ی اول:
(ثُمَّ اسْتَوی إِلی السَّماءِ وَهِی دُخانٌ...);[1] سپس به آفرینش آسمان پرداخت، در حالی كه به صورت دود بود... .
«دخان» در لغت به معنای چیزی است كه به دنبال شعله و لهیب آتش بر می خیزد[2] و «سماء» به معنای طرف بالاست[3] كه در قرآن در معانی و مصادیق متعدی به كار رفته است، از جمله: جهت بالا،[4] جوّ زمین[5]، محل كرات بالا[6]، آسمان معنوی[7]و...[8]
واژه ی «استوی» در اصل به معنای اعتدال یا مساوات دو چیز با یكدیگر است[9] و هنگامی كه با «علی» متعدی می شود، به معنای «استیلا و سلطه بر چیزی» است، مانند: (الرَّحْمـنُ عَلی العَرْشِ اسْتَوی);[10] خداوند بر عرش استیلا دارد; و وقتی كه با «الی» متعدی می شود به معنای قصد است، مانند آیه ی مورد بحث.[11]
آیه ی دوم:
(أَوَ لَمْ یَرَ الَّذِینَ كَفَرُوا أَنَّ السَّمـواتِ وَالأَرضَ كانَتا رَتْقاً فَفَـتَقْناهُما وَ جَعَلْنا مِنَ الماءِ كُلَّ شَیء حَی أَفَلا یُـؤْمِنُونَ);[12]
آیا كسانی كه كفر ورزیدند ندیدند كه آسمان ها و زمین، هر دو به هم پیوسته بودند و ما آن دو را از هم جدا ساختیم و هر چیز زنده ای را از آب پدید آوردیم؟ آیا (باز هم) ایمان نمی آورند؟
واژه ی «رتق»، به معنای «چیز به هم پیوسته» و «فتق» به معنای «جدا كردن دو چیز متصل به هم» است.[13]
از ظاهر این دو آیه استفاده می شود كه قبل از خلقت آسمان ها، توده ای از گازهای گسترده و عظیم وجود داشته و زمین و آسمان به هم متصل و چسبیده بودند كه به قدرت خداوند از هم جدا شده اند.
در تفسیر نمونه در باره ی دخان (دود) آمده است:
جمله ی «هی دخان...; آسمان ها در آغاز به صورت دود بود» نشان می دهد كه آغاز آفرینش آسمان ها از توده های گازهای گسترده و عظیمی بوده است و این با آخرین تحقیقات علمی در مورد آغاز آفرینش كاملا هماهنگ است. هم اكنون نیز بسیاری از ستارگان آسمان به صورت توده ی فشرده ای از گازها و دخان است.[14]
طبق تحقیقات دانشمندان، زمین در آغاز، توده ی واحدی بود كه بر اثر انفجارهای پی در پی از هم شكافت و كهكشان ها و منظومه و كرات به وجود آمدند.[15] از آیه ی «كانَ عَرْشُهُ عَلی الماءِ»[16] نیز استفاده می شود كه، «ماء» به معنای آب است; اما گاهی به شیء مایع نیز ماء گویند. در آغاز آفرینش، جهان هستی به صورت مواد مذابی بوده (یا گازهای فوق العاده فشرده ای كه شكل مواد مذاب و مایع را داشته است) سپس در این توده ی آب گونه، حركت های شدید و انفجارهای عظیمی رخ داده است.[17]
مفسران درباره ی آیه ی 30 سوره ی انبیا (رتق و فتق، پیوستگی و جدایی) سه احتمال را مطرح كرده اند:
1. به هم پیوستگی آسمان ها و زمین، اشاره به آغاز خلقت است. كه طبق نظر دانشمندان، مجموعه ی این جهان، توده ی واحد عظیمی از بخار سوزان بود كه بر اثر انفجارات درون و حركت، تدریجاً تجزبه شده و كواكب و ستاره ها، از جمله منظومه ی شمسی و كره ی زمین به وجود آمدند و هنوز هم جهان در حال گسترش است (برخی روایات اهل بیت(علیهم السلام)اشاره به این تفسیر دارند).[18]
2. منظور از پیوستگی، یك نواخت بودن مواد جهان است، یعنی همه در هم فرو رفته بود و به صورت ماده ی واحدی خودنمایی می كرد، اما با گذشت زمان، از هم جدا شدند و تركیبات جدید و انواع مختلف گیاهان و موجودات دیگر در آسمان و زمین ظاهر شدند.[19]
3. منظور از به هم پیوستگی آسمان نباریدن باران در آغاز، و مقصود از به هم پیوستگی زمین، نروییدن گیاهان در آن زمان است; اما خداوند هر دو را گشود، از آسمان باران نازل كرد و در زمین انواع گیاهان را رویاند.(بعضی از روایات نیز اشاره به همین احتمال دارند).[20]
جهان یك قطعه ای رها شده در فضا بود و سپس تحت تاثیر جاذبه ی شیء عظیم اجرام سماوی دیگر قرار گرفت و تكه تكه شد و به صورت حلزونی در آمد و سپس این اجزای كوچك، كم كم، سیارات را به وجود آوردند.[21]
دكتر موریس بوكای نیز می نویسد:
دانش به ما می آموزد، چنانچه به عنوان مثال تكوین خورشید و محصول فرعی آن یعنی زمین را در نظر بگیریم، جریان امر، توسط تراكم سحابی نخستین و تفكیك آن رخ داده است. این دقیقاً همان است كه قرآن به طریق كاملا صریح با ذكر ماجراهایی كه «دود» آسمان ابتدا یك نوع الصاق، سپس یك نوع انفكاك را به وجود آورد، بیان نموده است.[22]
نظریه های علمی درباره ی پیدایش جهان
درباره ی پیدایش جهان، چند دیدگاه عمده در بین كیهان شناسان جدید وجود دارد كه عبارت اند از:
1. انفجار بزرگ: این نظریه در سال «1900 م» پیشنهاد شد و هم اكنون اكثر اخترشناسان آن را بهترین نظریه می دانند طبق این نظریه حدود 20 بیلیون سال پیش تمام مادّه و انرژی موجود در جهان در نقطه ای بسیار كوچك و فشرده متمركز بوده است، سپس این نقطه ی كوچك منفجر شد.[23]
2. حالت پایدار: این نظریه در سال «1940» توسط «فرد هدیل» فیزیك دان انگلیسی پیشنهاد شد.
بنا بر این نظریه، جهان نه تنها از نظر فضایی یك نواخت است، بلكه در طول زمان تغییرناپذیر نیز هست. ستارگان و كهكشان ها ممكن است تغییر كنند، اما تصویر كلی جهان با تصویر هر زمان تفاوتی ندارد.
3. جهان پلاسما: برخی اختر شناسان، خلقت جهان را با مدل «هانس الفون» دانشمند سوئدی می بینند. طبق این نظریه، 99 درصد جهان قابل مشاهده (عمدتاً ستارگان) از پلاسما ساخته شده است.
4. انفجارهای كوچك: گروهی دیگر از اخترشناسان، نظریه ی حالت پایداری را، كه با رصدهای اخترشناسی انطباق خوبی دارد، پیشنهاد می كنند. طبق این نظریه، جهان بدون آغاز و انجام است و ماده به طور پیوسته در خلال انفجارهای كوچك خلق می شود; هم چنین جهان به تدریج انبساط می یابد و كهكشان ها شكل می گیرند.[24]
پس ظاهر آیات قرآن درباره ی آغاز خلقت (كه از «دخان، دود» شروع شده است) تا حدود زیادی با نظریه ی علمی مشهور خلقت جهان (یعنی انفجار بزرگ) همخوانی و اشتراك هایی دارد; از طرف دیگر، با توجه به تعدد نظریه ها در مورد آغاز خلقت و عدم اثبات قطعی آن ها، هیچ یك از آنها را نمی توان به صورت قطعی به قرآن نسبت داد.
سوره بقره آیه 29 كه می فرماید: «او خدایی است كه همه آنچه (از نعمت ها) در زمین وجود دارد، برای شما آفریده سپس به آسمان پرداخت....» از ظاهر آیه بر می آید كه خلقت زمین اول بود، و بعد خلقت آسمان شروع شده است. (ما با توجه به وجود حرف «ثمَّ» در «ثم استوی الی السماء» كه در ادبیات عرب در همه جا به معنای ترتیب نمی آید می گوییم ثم در اینجا نیز به معنای تأخیر زمانی نیست بلكه می تواند تأخیر در بیان و ذكر حقایقی پشت سر هم بوده باشد.
اما در سوره نازعات آیه 30 می فرماید: «زمین را بعد از آن (آفرینش آسمان) گسترش داد «والارض بعد ذلك دحاها»
واژه «دحو» به معنی گستردن است. بعضی نیز آن را به معنای تكان دادن چیزی از محل اصلیش تفسیر كرده اند و چون این معنی لازم و ملزوم یكدیگرند به یك ریشه باز می گردد. به هر حال منظور از «دحو الارض، این است كه در آغاز، تمام سطح زمین را آب های حاصل از باران های سیلابی فراگرفته بود. این آب ها تدریجاً در گودال های زمین جای گرفتند و خشكیها از زیر آب سربرآوردند.
حاصل سخن اینكه، اولاً در تفسیر و تبیین یك آیه، لازم است آیات دیگر را بررسی و تحلیل نمود به سبب اینكه بعضی از آیات، آیات دیگر را تفسیر می كنند; نمی توان از یك یا دو آیه نظریه نهایی قرآن را بدست آورد.
ثانیاً: از مجموع آیاتی كه درباره خلقت آسمان و زمین نازل شده، این نكته بدست آمده كه قبل از خلقت آسمان و زمین، توده ای از گازهای گسترده و عظیم وجود داشت، و زمین و آسمان به هم متصل و چسبیده بودند و در اثر انفجارهای پی در پی از هم شكافته و كهكشان و منظومه و كرات دیگر به وجود آمد و با نظریه مشهور علمی، یعنی، انفجار بزرگ، همخوانی دارد. و آیات 29 سوره بقره و 30 سوره نازعات با آنچه گفته شد با آیات دیگر درباره خلقت آسمان و زمین هیچ گونه تناقضی با هم ندارند.
يکشنبه 18/5/1388 - 15:55
محبت و عاطفه

آسمون به ماه میگه: /* /*]]>*/ عشق یعنی چه؟

ماه میگه:یعنی بودن در آغوش تو

ماه میگه:تو بگو عشق یعنی چه؟

آسمون میگه:انتظار دیدین تو.

جمعه 11/2/1388 - 18:56
مورد توجه ترین های هفته اخیر
فعالترین ها در ماه گذشته
(0)فعالان 24 ساعت گذشته