مديريت رشته ها در ويژوال بيسيک

مديريت رشته ها در ويژوال بيسيک ۶


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

تابع Asc : کد اسکی اولين کاراکتر رشته ورودی را بر می گرداند .
فرمت کلی آن بصورت زير است :

 

تشخیص فشرده شدن کليدهای کيبرد

یکی از دوستان سوال کرده بودند که چگونه می توان کلیدهای کیبرد را حتی وقتی فوکوس روی برنامه ما نیست تشخیص داد مانند دیکشنری ها که مثلاً با CTRL+F12 فعال می شوند و یا Keylogger ها که کلیدهای فشرده شده را ثبت می کنند .
من دو روش زیر را برای اینکار پيشنهاد می کنم :

۱ - استفاده از یک تابع کتابخانه ای به اسم  GetAsyncKeyState موجود در کتابخانه user32.dll . این تابع ، فشرده شدن یا رها شدن یک کلید را تشخیص می دهد . نحوه declare کردن این تابع بصورت زیر است :

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

حال در برنامه تان یک timer قرار داده و در event آن کد زیر را قرار دهید :

    For i = 1 To 255
        results = 0
        results = GetAsyncKeyState(i)
        If results <> 0 Then
           Msgbox(Chr(i))
        End If
    Next

برای مشاهده یک برنامه نمونه به این آدرس مراجعه کنید .

۲ - استفاده از قلاب یا Hook : قلاب ، یک ابزار در مکانیزم مدیریت پیغام سیستم ویندوز است که توسط آن برنامه ها می توانند یک روتین را برای مدیریت و پردازش پیغامهای خاصی قبل از اینکه آن پیغامها به برنامه مقصد برسند نصب نمایند . قلابها باعث کندی سیستم می شوند زیرا حجم پردازشی سیستم روی هر پیغام را افزایش می دهند بنابراین بایستی زمانیکه واقعاً به قلاب نیاز دارید آنرا نصب نموده و هر چه زودتر آنرا حذف نمایید . سیستم ویندوز از انواع زیادی از قلابها پشتیبانی می کند که هر کدام امکان دستیابی به پیغامهای خاصی را مهیا می نمایند برای مثال یک برنامه کاربردی می تواند با استفاده از قلاب کیبرد برای مدیریت و پردازش پیغامهای مربوط به آن ( مثل فشرده شدن یک کلید خاص یا رها شدن آن ) استفاده کند .
برای نصب یک قلاب در برنامه از یک تابع کتابخانه ای به اسم SetWindowsHookEx استفاده می شود . این تابع یک قلاب را به زنجیره قلابهای سیستم اضافه می کند . نحوه declare کردن این تابع بصورت زیر است :

Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long

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

Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long

برای ایجاد قلاب کیبرد همچنین نیاز به تعریف یک ثابت است که شماره قلاب کیبرد در آن قرار دارد :

Public Const WH_KEYBOARD = 2

حال بایستی یک تابع پس زمینه یا Callback Function نوشت که به ازای فشرده شدن کیبرد اجرا شود و آدرس آنرا ( با استفاده از کلمه کلیدی Address Of ) بهمراه ثابت فوق به تابع SetWindowsHookEx فرستاد .

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

توابع رياضی  در ويژوال بيسيک ۶


برای نوشتن برنامه های مهندسی ، محاسباتی ، گرافيکی و آماری نياز داريد تا از برخی توابع رياضی استفاده نمائيد . ويژوال بيسيک ۶ دارای مجموعه ای از توابع است که برای انجام محاسبات عددی پيش بينی شده اند . در اين مقاله ابتدا با اين توابع آشنا شده و سپس چگونگی ايجاد ساير توابع رياضی را که در ميان اين مجموعه وجود ندارند خواهيد ديد . در پايان نيز با توابع رياضی موجود در دات نت آشنا می شويد .

توابع رياضی موجود در ويژوال بيسيک ۶

-  تابع Abs (قدرمطلق) : مقدار بدون علامت يک عدد را برمی گرداند .
- تابع Atn (آرک تانژانت) : خروجی تابع عددی از نوع double است که برابر زاويه ای است که تانژانت آن عدد ورودی تابع است .
- تابع Cos ( کسينوس ) : خروجی تابع عددی از نوع double است که برابر کسينوس زاويه ورودی است .
- تابع Exp (توان نمانی) : خروجی تابع عددی از نوع double است که برابر e به توان ورودی تابع است .
- تابع Int (تابع کف يا تابع جزء صحيح) : نزديکترين عدد صحيح مساوی يا کوچکتر نسبت به عدد ورودی را برمی گرداند .
- تابع Log (لگاريتم ) : خروجی تابع عددی از نوع double است که برابر لگاريم طبيعی عدد ورودی است ( لگاريتم بر مبنای عددe يا همان Ln )
- تابع Round ( گرد کردن ) : خروجی تابع عددی از نوع double است که برابر نزديکترين عدد صحيح به مقدار عدد ورودی است .
- تابع Sgn (علامت) : خروجی تابع عددی از نوع صحيح است که نشان دهنده علامت عدد ورودی است .
- تابع Sin (سينوس ) : خروجی تابع عددی از نوع double است که برابر سينوس زاويه ورودی است .
- تابع Sqr  (جذر) : خروجی تابع عددی از نوع double است که برابر ريشه دوم يا جذر عدد ورودی است .
- تابع Tan (تانژانت)  : خروجی تابع عددی از نوع double است که برابر با تانژانت زاويه ورودی ( برحسب راديان ) می باشد .

نکته : برای محاسبه توان n ام يک عدد  ( n می توان صحيح يا اعشاری باشد ) از اپراتور ^ استفاده نمائيد . برای مثال :

2^5=32

9^0.5=3

4.2^3.7=202.31

چگونگی ايجاد ساير توابع رياضی که در ويژوال بيسيک ۶ وجود ندارند

جدول زير چگونگی محاسبه ساير توابع رياضی که در ويژوال بيسيک ۶ وجود ندارند را نشان می دهد :

 

سکانت

Sec(X) = 1 / Cos(X)

کسکانت

Cosec(X) = 1 / Sin(X)

کتانژانت

Cotan(X) = 1 / Tan(X)

آرک سينوس

Arcsin(X) = Atn(X / Sqr(1-X * X ))

آرک کسينوس

Arccos(X) = Atn(-X / Sqr(1-X * X)) + 2 * Atn(1)

آرک سکانت

Arcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) -1) * (2 * Atn(1))

آرک کسکانت

Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1))

آرک کتانژانت

Arccotan(X) = Atn(X) + 2 * Atn(1)

سيونس هيپربوليک

HSin(X) = (Exp(X) - Exp(-X)) / 2

کسينوس هيپربوليک

HCos(X) = (Exp(X) + Exp(-X)) / 2

تانژانت هيپربوليک

HTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X))

سکانت هيپربوليک

HSec(X) = 2 / (Exp(X) + Exp(-X))

کسکانت هيپربوليک

HCosec(X) = 2 / (Exp(X) - Exp(-X))

کتانژانت هيپربوليک

HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X))

آرک سينوس هيپربوليک

HArcsin(X) = Log(X + Sqr(X * X + 1))

آرک کسينوس هيپربوليک

HArccos(X) = Log(X + Sqr(X * X - 1))

آرک تانژانت هيپربوليک

HArctan(X) = Log((1 + X) / (1 - X)) / 2

آرک سکانت هيپربوليک

HArcsec(X) = Log((Sqr(1-X * X) + 1) / X)

آرک کسکانت هيپربوليک

HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) +1) / X)

آرک کتانژانت هيپربوليک

HArccotan(X) = Log((X + 1) / (X - 1)) / 2

لگاريتم بر مبنای N

LogN(X) = Log(X) / Log(N)


اعداد π و e در ويژوال بيسيک 6 

برای استفاده از عدد پی و عدد e در برنامه های خود ثوابت زير را تعريف نمائيد :

Const Pi = 3.14159265358979
Const e  = 2.71828182845904

همچنين عدد پی را می توان به صورت زير تعريف کرد :

Pi = 4*Atn(1)

تبديل راديان / درجه

چون اکثر توابع مثلثاتی بر حسب راديان کار می کنند گاهی اوقات نياز داريم تا زاويا را از در جه به راديان و بالعکس تبديل کنيم  . برای تبديل يک زاويه که بر حسب راديان می باشد به درجه آنرا در 180 ضرب کرده و سپس بر عدد پی تقسيم می کنيم :

Degree(x) =x*180/Pi

برای تبديل يک زاويه که بر حسب درجه بيان شده به راديان آنرا در عدد پی ضرب کرده و سپس بر 180 تقسيم می کنيم :

Rad(x) =x*Pi/180

توابع رياضی و VB.Net

مجموعه توابع رياضی در در ويژوال بيسيک دات نت وجود دارند بسيار قويتر و کاملتر هستند . اين مجموعه توابع در کلاس System.Math موجود می باشند :

- در کلاس Math دو ثابت به اسم E و PI برای نشان دادن پايه لگاريتم طبيعی و عدد پی وجود دارند .

- توابع مثلثاتی : Acos ( آرک کسينوس ) ، Asin ( آرک سينوس) ، Atan ( آرک تانژانت) ، Atan2 ( آرک تانژانت خارج قسمت تقسيم ورودی ها ) ، Cos ( کسينوس ) ، Sin ( سينوس ) ، Tan ( تانژانت )

- توابع عمومی : Abs ( قدرمطلق ) ، BigMul ( حاصلضرب کامل دو عدد 32 بيتی ) ، Ceiling ( تابع سقف ) ، DivRem ( خارج قسمت نقسيم دو عدد ) ، Floor ( تابع کف ) ، IEEERemainder ( باقيمانده نقسيم دو عدد )  ، Max ( ماکزيمم بين دو عدد ) ، Min ( مينيمم بين دو عدد ) ، Round ( تابع گرد کردن ) ، Sign ( تابع علامت ) ، Sqrt ( تابع جذر )

- توابع هيپربوليک : Cosh ( کسينوس هيپربوليک ) ، Sinh ( سينوس هيپربوليک ) ، Tanh ( تانژانت هيپربوليک )

- توابع نمايي و لگاريتمی : Exp ( عدد e به توان مقدار ورودی ) ، Log ( لگاريتم ) ، Log10 ( لگاريتم بر پايه 10 ) ، Pow ( تابع توان )