ایران سرفراز- نرم افزار وپروژهای دانشجویی


نرم افزار وپروژهای دانشجویی

کار با رجیستری در ویژوال بیسیک - قسمت اول

<!-- /* Font Definitions */ @font-face {font-family:TimesNewRoman; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:3 0 0 0 1 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} a:link, span.MsoHyperlink {color:blue; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {color:purple; text-decoration:underline; text-underline:single;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

کار با رجیستری در ویژوال بیسیک - قسمت اول

رجیستری چیست ؟

سیستم عامل ویندوز تنظیمات سخت افزاری و نرم افزاری خود را بطور

مرکزی در یک بانک اطلاعاتی با ساختار سلسله مراتبی ذخیره می کند

که رجیستری نام دارد . رجیستری جایگزینی برای بسیاری از فایلهای

است که در نسخه های اولیه ویندوز COM و SYS ،INI پیکربندی

موجود بود . رجیستری ، سیستم عامل را با مهیا کردن اطلاعات موردنیز

ها ، کنترل می کند . component شدن load برای اجرای برنامه ها و

رجیستری شامل انواع مختلفی از اطلاعات می باشد مثل :

- اطلاعات سخت افزارهای نصب شده روی سیستم

- اطلاعات درایورهای نصب شده روی سیستم

- اطلاعات برنامه های نصب شده روی سیستم

- اطلاعات پروتکلهای شبکه ای مورد استفاده در سیستم

ساختار رجیستری شامل چندین مجموعه رکورد است که داده های این

رکوردها توسط بسیاری از برنامه ها و اجزای سیستم عامل خوانده و یا

نوشته می شود .

اجزای رجیستری

۵٣

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

های موجود در ریشه یک folder ها همانند subtree : Subtree – 1

می باشد : subtree درایو هارد هستند . رجستری ویندوز دارای پنج

شامل تمام داده های پیکربندی : HKEY_LOCAL_MACHINE -

،SAM ،Hardware : است key برای کامپیوتر می باشد و شامل 5

System و Software ،Security

شامل داده های مربوط به تنظیمات سیستم عامل : HKEY_USERS -

و محیط ویندوز desktop است مثل تنظیمات user برای هر

شامل داده های کاربر فعلی سیستم : HKEY_CURRENT_USER -

شامل اطلاعات پیکربندی نرم افزار : HKEY_CLASSES_ROOT -

و داده های کلاسهای متناظر با فایل OLE است مثل داده های

شامل اطلاعات مورد نیاز برای : HKEY_CURRENT_CONFIG -

تنظیمات داریورهای سخت افزاری و غیره

های روی هارد subfolder ها و folder ها همانند Key : key – 2

های نرم افزاری یا سخت افزاری می object متناظر با key هستند . هر

قراردارند . key هایی هستند که درون یکسری key ها subkey . باشد

دارای سه entry است . هر entry دارای یک یا چند key هر : Entry – 3

بخش می باشد :

Name - نام

یکی از انواع داده های زیر entry مقدار هر : Data Type - نوع داده ای

است :

،REG_EXPAND_SZ ،REG_SZ ،REG_DWORD

، REG_BINARY

،REG_MULTI_SZ

REG_FULL_RESOURCE_DESCRIPTOT

Value - مقدار

۵۴

!Error

نکته 1 : برای مشاهده رجیستری و اعمال تغییرات در آن ( لطفاً اگر هیچ

تجربه ای در تنظیم کردن رجیستری ندارید اطلاعات آنرا تغییر ندهید ) ،

موجود در ویندوز regedt32.exe و یا regedit.exe می توانید از برنامه

وارد کنید . Run استفاده کنید . برای اینکار کافیست نام برنامه را در کادر

نکته 2 : در قسمت دوم این مقاله کلاسی برای خواندن و نوشتن از/به

رجیستری در ویژوال بیسیک خواهم نوشت و سپس نمونه ای از

کاربردهای نوشتن یکسری اطلاعات خاص در رجیستری را خواهیم دید .

۵۵

کار با رجیستری در ویژوال بیسیک - قسمت دوم

را Registery.bas برای کار با رجیستری در ویژوال بیسیک کلاس

مطابق مطالب زیر ایجاد کرده و در پروژه های خود از آن استفاده کنید :

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

چهار دسته ثابت داریم :

های رجیستری : entry های data type - ثابتهای مربوط به تعریف

Global Const REG_SZ As Long = 1

REG_DWORD As Long = 4 Global Const

های رجیستری key - ثابتهای مربوط به تعریف

H80000000& = Global Const HKEY_CLASSES_ROOT

H80000001& = Global Const HKEY_CURRENT_USER

H80000002& = Const HKEY_LOCAL_MACHINE Global

H80000003& = Global Const HKEY_USERS

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

Global Const ERROR_NONE = 0

ERROR_BADDB = 1 Global Const

Global Const ERROR_BADKEY = 2

3 = Global Const ERROR_CANTOPEN

Global Const ERROR_CANTREAD = 4

5 = Global Const ERROR_CANTWRITE

۵۶

Global Const ERROR_OUTOFMEMORY = 6

7 = Global Const ERROR_INVALID_PARAMETER

Global Const ERROR_ACCESS_DENIED = 8

ERROR_INVALID_PARAMETERS = 87 Global Const

Global Const ERROR_NO_MORE_ITEMS = 259

- ثابتهای متفرقه

H3F& = Global Const KEY_ALL_ACCESS

Const REG_OPTION_NON_VOLATILE = 0 Global

های مورد نیاز : برای کار با رجیستری از توابع Api کردن Declare - 2

استفاده می کنیم . این توابع عبارتند از : Advapi32.dll کتابخانه

key مربوط به یک handle آزاد کردن : RegCloseKey - تابع

ByVal ) "Declare Function RegCloseKey Lib "advapi32.dll

hKey As Long) As Long

key در رجیستری ( اگر key ساخت یک : RegCreateKeyEx - تابع

قبلا وجود داشته باشد ، این تابع آنرا باز می کند ) :

"Declare Function RegCreateKeyEx Lib "advapi32.dll

Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal

Reserved As Long, ByVal lpSubKey As String, ByVal

lpClass As String, ByVal dwOptions As Long, ByVal

samDesired As Long, ByVal lpSecurityAttributes As Long,

lpdwDisposition As Long) As Long ,phkResult As Long

۵٧

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

"Declare Function RegOpenKeyEx Lib "advapi32.dll

Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal

ulOptions As Long, ByVal lpSubKey As String, ByVal

samDesired As Long, phkResult As Long) As Long

ی یک نام data و type استخراج : RegQueryValueExLong - تابع

باز شده key متناظر با یک

Declare Function RegQueryValueExString Lib

advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey "

As String, ByVal As Long, ByVal lpValueName

lpReserved As Long, lpType As Long, ByVal lpData As

lpcbData As Long) As Long ,String

Declare Function RegQueryValueExLong Lib

advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey "

As String, ByVal As Long, ByVal lpValueName

lpReserved As Long, lpType As Long, lpData As Long,

Long) As Long lpcbData As

Declare Function RegQueryValueExNULL Lib

advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey "

As String, ByVal As Long, ByVal lpValueName

lpReserved As Long, lpType As Long, ByVal lpData As

lpcbData As Long) As Long ,Long

۵٨

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

Declare Function RegSetValueExString Lib

advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As "

String, ByVal Reserved As Long, ByVal lpValueName As

,Long, ByVal dwType As Long, ByVal lpValue As String

ByVal cbData As Long) As Long

advapi32.dll" " Declare Function RegSetValueExLong Lib

Alias "RegSetValueExA" (ByVal hKey As Long, ByVal

String, ByVal Reserved As Long, ByVal lpValueName As

cbData As dwType As Long, lpValue As Long, ByVal

Long) As Long

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

آن

Lib &Private Declare Function RegDeleteKey

advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As "

(String Long, ByVal lpSubKey As

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

Lib &Private Declare Function RegDeleteValue

advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As "

(String Long, ByVal lpValueName As

۵٩

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

نوشتن توابع کمکی زیر است :

با توجه به نوع داده یک کلید ، مقدار موجود در : SetValueEx - تابع

آنرا در یک متغیر ذخیره می کند :

,Public Function SetValueEx(ByVal hKey As Long

sValueName As String, lType As Long, vValue As

Variant) As Long

Long Dim lValue As

Dim sValue As String

Select Case lType

is string Case REG_SZ ' type of value

sValue = vValue

sValueName, ,SetValueEx = RegSetValueExString(hKey

lType, sValue, Len(sValue))x ,&0

value is Double word Case REG_DWORD ' type of

lValue = vValue

sValueName, ,SetValueEx = RegSetValueExLong(hKey

lType, lValue, 4)x ,&0

End Select

End Function

سایز و نوع داده ای یک داده را که باید : QueryValueEx - تابع

خوانده شود مشخص می کند .

Function QueryValueEx(ByVal lhKey As Long, ByVal

szValueName As String, vValue As Variant) As Long

Dim cch As Long

۶٠

As Long Dim lrc

Dim lType As Long

Dim lValue As Long

String Dim sValue As

,&lrc = RegQueryValueExNULL(lhKey, szValueName, 0

cch)x ,&lType, 0

Select Case lType

For strings '

:Case REG_SZ

String(cch, 0)x = sValue

,&lrc = RegQueryValueExString(lhKey, szValueName, 0

lType, sValue, cch)x

If lrc = ERROR_NONE Then

cch)x ,vValue = Left$(sValue

Else

vValue = Empty

End If

For DWORDS '

:REG_DWORD Case

,&lrc = RegQueryValueExLong(lhKey, szValueName, 0

lValue, cch)x ,lType

If lrc = ERROR_NONE Then vValue = lValue

Case Else

other data types not supported all'

lrc = -1

Select End

:QueryValueExExit

QueryValueEx = lrc

Function Exit

:QueryValueExError

Resume QueryValueExExit

Function End

۶١

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

ساخت یک کلید جدید در رجیستری و مقداردهی به یک کلید :

این تابع یک کلید از رجیستری را حذف می کند . : DeleteKey - تابع

دارای دو پارامتر ورودی است :

،HKEY_CLASSES_ROOT که یکی از مقادیر Location

HKEY_CURRENT_USER

است . HKEY_USERS و یا HKEY_LOCAL_MACHINE ،

که نام کلیدی است که باید از رجیستری حذف شود . این KeyName

Key1\SubKey هایی نیز باشد مثلا 1 subkey کلید ممکنست شامل

,Public Function DeleteKey(lPredefinedKey As Long

sKeyName As String)x

Dim lRetVal As Long

RegDeleteKey(lPredefinedKey, sKeyName)x = lRetVal

value DeleteKey = lRetVal ' return function

End Function

را از کلید حذف می کند . entry این تابع یک : DeleteValue - تابع

و KeyName ،Location : دارای سه پارامتر ورودی است

را مشخص می کند . value که نام آن ValueName

,Public Function DeleteValue(lPredefinedKey As Long

x(sKeyName As String, sValueName As String

Dim lRetVal As Long

As Long Dim hKey

lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0,

۶٢

hKey)x ,KEY_ALL_ACCESS

lRetVal = RegDeleteValue(hKey, sValueName)x

hKey)x) RegCloseKey

DeleteValue = lRetVal

End Function

این تابع یک کلید جدید ایجاد می کند . دارای : CreateNewKey - تابع

KeyName و Location : دو پارامتر ورودی است

,Public Function CreateNewKey(lPredefinedKey As Long

sNewKeyName As String)x

Dim hNewKey As Long

Dim lRetVal As Long

lRetVal = RegCreateKeyEx(lPredefinedKey,

,vbNullString ,&sNewKeyName, 0

REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,

lRetVal)x ,hNewKey ,&0

RegCloseKey (hNewKey)x

CreateNewKey = lRetVal

Function End

را تنظیم می entry یک data این تابع پارامتر : SetKeyValue - تابع

،KeyName ،Location : کند . دارای 5 پارامتر ورودی است

ValueType و ValueSetting ،ValueName

,Public Function SetKeyValue(lPredefinedKey As Long

sKeyName As String, sValueName As String,

As Long)x vValueSetting As Variant, lValueType

Dim lRetVal As Long

Dim hKey As Long

۶٣

RegOpenKeyEx(lPredefinedKey, sKeyName, 0, = lRetVal

KEY_ALL_ACCESS, hKey)x

SetValueEx(hKey, sValueName, lValueType, = lRetVal

vValueSetting)x

hKey)x) RegCloseKey

SetKeyValue = lRetVal

End Function

را برمی گرداند . entry این تابع فیلد داده یک : QueryValue - تابع

و KeyName ، Location : دارای سه پارامتر ورودی است

ValueName

,Public Function QueryValue(lPredefinedKey As Long

sKeyName As String, sValueName As String)x

Dim lRetVal As Long

As Long Dim hKey

Dim vValue As Variant

sKeyName, 0, ,lRetVal = RegOpenKeyEx(lPredefinedKey

KEY_ALL_ACCESS, hKey)x

vValue)x ,lRetVal = QueryValueEx(hKey, sValueName

QueryValue = vValue

RegCloseKey (hKey)x

End

Function

کار با رجیستری در ویژوال بیسیک - قسمت سوم

۶۴

به یک برنامه File Association ساخت یک انتصاب فایل یا

در این درس می خواهم با استفاده از کلاسی که در درس قبل معرفی شد

تابعی بسازیم که توسط آن بتوانیم فایلهای با پسوندی مشخص را به

یک برنامه اختصاص دهیم . بعبارت دیگر تابعی بنویسیم که اطلاعات

را توسط برنامه xxx لازم برای باز شدن فایلهایی با پسوند

در رجیستری ثبت کند . MyApp.exe

,Public Sub CreateAssociation(sExtension As String

sApplication As String, sAppPath As String)x

String Dim sPath, sAppExe As

sExtension, & "." CreateNewKey

HKEY_CLASSES_ROOT

sExtension, & "." ,HKEY_CLASSES_ROOT SetKeyValue

REG_SZ ,"Document." & "", sApplication

& CreateNewKey sApplication

,"Document\shell\open\command."

HKEY_CLASSES_ROOT

& SetKeyValue HKEY_CLASSES_ROOT, sApplication

Document", REG_SZ " & Document", "", sApplication."

x"1% " & sPath = sAppPath

exe"x." & sAppExe = sApplication

&HKEY_CLASSES_ROOT, sApplication SetKeyValue

REG_SZ ,Document\shell\open\command", "", sPath."

CreateNewKey

"

Software\Microsoft\Windows\CurrentVersion\Explorer\Fi

sExtension, HKEY_CURRENT_USER & ".\leExts

,SetKeyValue HKEY_CURRENT_USER

۶۵

"

Software\Microsoft\Windows\CurrentVersion\Explorer\Fi

sExtension, "Application", sAppExe, REG_SZ & ".\leExts

& sAppExe & "\CreateNewKey "Applications

shell\open\command", HKEY_CLASSES_ROOT\"

"\HKEY_CLASSES_ROOT, "Applications SetKeyValue

sPath, REG_SZ ,"" ,"shell\open\command\" & sAppExe &

End Sub

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

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

کار با رجیستری در ویژوال بیسیک - قسمت چهارم

اجرا شدن یک برنامه در هنگام راه اندازی سیستم

فرض کنید می خواهیم برنامه ای بنویسیم که هر بار در هنگام راه

startup اندازی سیستم بطور خودکار اجرا شود. البته نمی خواهم در

ویندوز دیده شود .

رجیستری قرار دهیم StartUp برای این کار باید برنامه موردنظر را در

. به این ترتیب که در یکی از کلیدهای زیر یک مقدار رشته ای

ایجاد کنیم و آدرس برنامه را در آن وارد کنیم : (String Value) جدید

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windo

ws\CurrentVersion\Run

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Win

dows\CurrentVersion\Run

۶۶

و مسیرش MyApp برای مثال اگه اسم برنامه مورد نظر

است باید بصورت زیر عمل کرد : C:\Windows\MyApp.exe

,SetKeyValue HKEY_LOCAL_MACHINE

SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "

REG_SZ ,""MyApp", "C:\MyApp.exe

نکته : البته دو تا راه دیگر برای اینکار وجود دارد که برخی تروجان ها هم

از این روشها استفاده می کنند تا روی سیستم باقی بمانند :

و دیگری استفاده run = و نوشتن نام فایل جلوی win.ini یکی استفاده از

. explorer.exe و نوشتن نام برنامه جلوی خط system.ini از

برنامه نویسی سخت افزار در ویژوال بیسیک

برنامه نویسی سخت افزار در ویژوال بیسیک

مقدمه

شاید تابحال خواسته باشید از طریق پورت پرینتر و یا پورت سریال یا

با سخت افزاری که خودتان ساخته اید ارتباط برقرار کنید . ISA باس

با I/O برای این کار شما نیاز به برنامه ای دارید که بوسیله دستورات

سخت افزار شما ارتباط برقرار کند . چون ویژوال بیسیک دارای

نیست بایستی توسط ویژوال سی یک I/O دستورات کار با پورتهای

برای کار با این پورتها بسازیم . Dll

۶٧

و کاربردهای آن DLL

و INPUT برنامه نویسی کرده باشید با دستورات DOS اگر شما در

آشنا C در outp و inp و با دستورات QuickBasic در زبان OUPUT

پیاده سازی نشده اند . این توابع برای VB هستید . این توابع در

و نیز برنامه نویسان سیستم حیاتی PC سازندگان سخت افزار برای

هستند زیرا به شما اجازه خواندن از پورت و نوشتن به پورت را می

یا کتابخانه Dll باید از VB دهند . برای ایجاد امکان استفاده ار پورت در

اجازه می دهند تا یک کد VB ها به Dll . های دینامیک استفاده کنیم

نوشته شده به یک زبان دیگر را در زمان اجرا ( بطور دینامیک ) به

برنامه لینک شود . چون ویژوال سی دارای توابع خواندن و نوشتن

موردنظر استفاده Dll پورت است بنابراین ما از این زبان برای ساخت

می کنیم .

VC در DLL نوشتن

ما بایستی دو فایل را ایجاد کنیم . اولین فایل یک فایل Dll برای ساخت

می CPP یا source ++C است و دومین فایل ، یک فایل DEF یا define

ایجاد کنید . لیست کد Notepad باشد . هر دو فایل را می توانید توسط

این دو فایل بصورت زیر است :

: Port.def file

LIBRARY Port

DLL FOR I/O PORT DESCRIPTION

EXPORTS

Outp @1

Inp @2

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

۶٨

: Port.cpp file

#include "conio.h"x

PortData)x short _stdcall Outp(int PortAddress,int

{

Dummy;x short

Dummy=(short)(_outp(PortAddress,PortData));x

return(Dummy);x

};

stdcall Inp(int PortAddress)x_ short

{

PortData;x short

PortData=(short)(_inp(PortAddress));x

return(PortData);x

};

پس از نوشتن این دو فایل آنها را در یک دایرکتوری قرار دهید ( مثلا مورد File و سپس وارد محیط ویژوال سی شوید . از منوی ( C:\port

Projects را انتخاب کنید و در کادری که ظاهر می شود در قسمت New

را انتخاب کنید . همچنین در Win32 Dynamic-Link Library مورد

را وارد port عبارت Project name سمت راست همان صفحه در کادر

را وارد کنید و آنگاه C:\port\port عبارت Location کنید و در کادر

را کلیک کنید . OK

۶٩

!Error

ایجاد workspace را به cpp و def در مرحله بعدی بایستی فایل های

Port روی عبارت FileView شده اضافه کنیم . برای اینکار در برگه

را انتخاب کنید . Project Add Files to کلیک راست کرده و مورد files

٧٠

را انتخاب کنید . با همین port.cpp در کادری که ظاهر می شود فایل

را نیز به پروژه اضافه نمائید . port.def روش فایل

dll را انتخاب کنید تا Build port.dll شده مورد Build حال وارد منوی

مورد نظر ساخته شود .

٧١

ویندوزتان کپی کنید . system ساخته شده را در دایرکتوری dll

در ویژوال بیسیک Dll استفاده از

را In و Out ساخته شده باید ابتدا توابع dll برای استفاده از توابع

کنید : declare

Private Declare Function Outp Lib “port.dll” (Byval

PortAddress as Integer,Byval PortData as Integer) as

Integer

Function Inp Lib “port.dll” (Byval Private Declare

PortAddress as Integer) as Integer

حال در برنامه تان برای نوشتن به یک پورت از دستور زیر استفاده

کنید :

Dummy=Outp(port_number,data)x

و برای خواندن از پورت از دستور زیر استفاده کنید :

٧٢

Portvalue=Inp(port_number)x

در dll و یک برنامه نمونه استفاده از این port.dll نکته : برای دریافت

ویژوال بیسیک ، در بخش نظر خواهی آدرس ایمیل خود را بگذارید .

و برنامه نویسی آن در ویژوال بیسیک Parallel پورت

تذکر : در مقاله های قبلی بخشی تحت عنوان " برنامه نویسی سخت

افزار در ویژوال بیسیک " نوشتم که در آن روشی برای دسترسی به

پورتها از طریق ویژوال بیسیک ذکر شد . لازم به تذکر است که این روش

تنها در ویندوزهای 95 و 98 امکان پذیر است .

( Parallel ) مبانی پورت موازی

پورت پارالل استاندارد کامپیوتر یک درگاه 25 پینی است که 12 پین آن

DATA ) خروجی می باشد . از این 12 خط ، 8 خط بعنوان داده خروجی

می باشند . 5 ( CONTROL Port ) و 4 خط بعنوان خط کنترل ( Port

( STATUS Port ) پین نیز ورودی بوده و بعنوان خطوط وضعیت

استفاده می شوند .

هستند . ( GROUND ) 8 پین باقیمانده نیز زمین

که هرکدام متناظر با یکی از I/O خطوط پورت پارالل توسط سه آدرس

سه پورت داده ، کنترل و و ضعیت است قابل دسترسی می باشند .

( LPT می باشد ( 1 x آدرس پایه پورت پارالل در اکثر کامپیوترها 3780

status برای پورت ، x برای پورت داده برابر 3780 I/O . بنابراین آدرس

می باشد . x37A برابر 0 command و برای پورت x برابر 3790

٧٣

و ECP پورت پارالل استاندارد دارای دو حالت توسعه یافته به نامهای

نیز می باشد . EPP

بوسیله پورت پارالل می توانید مدارهای جانبی خود را به کامپیوتر

متصل کنید . تنها نکته ای که در این بین وجود دارد چگونگی برنامه

نویسی پورت پارالل و در نتیجه برقراری ارتباط با مدار جانبی است .

برای اطلاعات بیشتر در این زمینه با من تماس بگیرید .

برنامه نویسی پورت پارالل در محیطهای مختلف ویندوز

می توان به dll با استفاده از این : Inpout32.dll استفاده از کتابخانه

دسترسی داشت Win 9x/NT/2000/XP پورتهای سیستم در محیطهای

.

dll به این آدرس مراجعه کنید . برای استفاده از این dll برای دریافت این

ویندوزتان کپی کنید . سپس System کافی است آنرا در دایرکتوری 32

یک ماژوال به پروژه تان اضافه کرده و عبارت زیرا را در آن قرار دهید :

Public Declare Function Inp Lib "inpout32.dll" Alias

Inp32" (ByVal PortAddress As Integer) As Integer"

inpout32.dll" Alias "Out32" " Public Declare Sub Out Lib

Integer)x (ByVal PortAddress As Integer, ByVal Value As

حال برای مثال با دستور زیر می توانید اطلاعاتی را روی پینهای

ی مربوط به پورت پارالل بنویسید : DATA

H378, your_data)x&)Call Out

٧۴

آشنایی با شی پرینتر در ویژوال بیسیک

آشنایی با شی پرینتر در ویژوال بیسیک 6

مقدمه

شی پرینتر ، شیی است که پرینتر پیش فرض سیستم را کنترل می کند .

استفاده از شی پرینتر در ویژوال بیسیک 6 مانند کار با سایر اشیا است

و بایستی از خواص و متدهای آن استفاده کرد . در ادامه با برخی از این

خواص و متدها آشنا خواهید شد .

چاپ متن توسط شی پرینتر

و CurrentX برای چاپ متن توسط شی پرینتر کافیست خواص

که محل قرار گرفتن کرسر می باشد را تنظیم نوده و سپس CurrentY

متن مورد نظر را چاپ نموده و در پایان با Print با استفاده از متد

صفحه چاپی را از پرینتر بیرون بدهیم . مثال : EndDoc استفاده از متد

Printer.CurrentX=150

Printer.CurrentY=200

Printer.Print "Visual Basic Printer Object Test"

Printer.EndDoc

قرار داده شده Pixel برابر ScaleMode در مثال فوق فرض شده که

عمل چاپ EndDoc است . توجه داشته باشید که تا قبل از اجرای متد

٧۵

انجام نمی شود و فقط بعد از این متد است که چاپ انجام شده و کاغذ

بیرون می آید .

دیگری را استفاده کنیم متن Print دستور ، Print اگر پس از یک دستور

روی خط بعدی چاپ خواهد شد . اگر بخواهیم متن بلافاصله بعد از متن

اول از علامت ; استفاده کنیم . Print اول چاپ شود باید بعد از دستور

استفاده CurrentY و CurrentX نکته : برای کنترل دقیق محل چاپ از

نمائید .

چاپ گرافیک توسط شی پرینتر

به 4 روش می توان اشکال گرافیکی را توسط شی پرینتر چاپ کنید :

می توان یک دایره ، قوس و یا Circle 1 – چاپ دایره : با استفاده از متد

بیضی را در صفحه چاپ کرد . فرمت کلی این متد بصورت زیر است :

Circle (x,y),radius,[color],[start],[end],[aspect]

شعاع آن می باشد . radius مختصات مرکز دایره و y و x که

اختیاری هستند و بترتیب aspect و end ،start ،color پارامترهای

رنگ ، محل شروع قوس ، محل خاتمه قوس و نسبت شعاع بیضی را

نشان می دهند .

می توان یک خط و مستطیل را در Line 2 – چاپ خط : با استفاده از متد

صفحه چاپ کرد . فرمت کلی این متد بصورت زیر است :

Line (x1,y1)-(x2,y2),[color],[B[F]]

مختصات y و 2 x مختصات شروع خط ( یا مستطیل ) و 2 y و 1 x که 1

انتهای خط ( یا مستطیل ) هستند .

٧۶

اختیاری بوده و رنگ خط ( یا مستتطیل ) را نشان می دهد color پارامتر

.

اختیاری بوده و نشان می دهد یک مستیل رسم شود . B پارامتر

می آید و نشان می دهد یک مستطیل B اختیاری بوده و بهمراه F پارامتر

توپر رسم شود .

می توان نقطه ای روی صفحه PSet 3 – چاپ نقطه : با استفاده از متد

چاپ کرد و فرمت کلی آن بصورت زیر است :

PSet (x,y),[color]

مختصات نقطه می باشند . y و x که

اختیاری بوده و رنگ نقطه را نشان می دهد . color پارامتر

می توان محتویات PaintPicture 4 – چاپ تصویر : با استفاده از متد

یک فایل گرافیکی را چاپ کرد . فرمت کلی این متد بصورت زیر است :

Printer.PaintPicture picture, x1, y1, [width1], [height1],

[x2], [y2], [width2], [height2], [opcode]

یک picture مختصات قرارگرفتن تصویر در صفحه بوده و y و 1 x1

است . این شی را می توان از یک IPictureDisp شی از کلاس

فرم گرفت و یا از دستور Picture یا از خاصیت PictureBox

استفاده کرد . LoadPicture

: مثال 1

Printer.PaintPicture Picture1.Picture, 100, 100

: مثال 2

٧٧

PaintPicture LoadPicture("C:\sample.jpg"), 100, 100

y و 2 x طول و عرض تصویر چاپی می باشند . 2 height و 1 width1

می توانند میزان برش از تصویر اصلی height و 2 width نیز بهمراه 2

برای چاپ را مشخص کنند .

سایر خواص مهم شی پرینتر

اگر پرینتر رنگی باشد ، رنگی یا تک رنگ بودن چاپ را : ColorMode

تعیین می کند .

تعداد چاپ را مشخص می کند . : Copies

نوع فونت چاپ متن را مشخص می کند . : Font

سایز فونت چاپ متن را مشخص می کند . : FontSize

کیفیت چاپ را مشخص می کند . : PrintQuality

سایر متدهای مهم شی پرینتر

پرینت در حال چاپ را از صف چاپ حذف می کند . : KillDoc

صفحه جاری را به پایان برده و صفحه جدیدی را برای : NewPage

چاپ آماده می کند .

سیستم مختصات کاربر را تعیین می کند . : Scale

را Scale ارتفاع متن پس از چاپ شدن در مختصات : TextHeight

تعیین می کند .

را Scale عرض متن پس از چاپ شدن در مختصات : TextWidth

تعیین می کند .

٧٨

کار با اسکنر در وی بی

   + MOHSEN GHASEMI - ٦:٤٩ ‎ب.ظ ; ۱۳۸٩/۳/٢٩