exploit

هیچ وقت برای تازه شدن دیر نیست!

exploit

هیچ وقت برای تازه شدن دیر نیست!

اجرای دستورات dos

ابتدا Command Prompt را فراخوانی می کنیم , خوب برای فراخوانی از تابع Shell استفاده میکنیم که قبلا در مورد این تابع توضیح داده ام :

Shell "cmd.exe"

:: اکنون یک شیء ایجاد می کنیم تا بتوانیم از طیق آن به هسته Dos دسترسی داشته باشیم :

Dim WinShell
Set WinShell = CreateObject("Wscript.shell")

خوب حالا می توانید به راحتی هر دستوری که دارید میتوانید اجرا کنید در آخر هم دستور تابع Sendkeys کلید Enter را اجرا کرده و دستور اجرا میشود:

WinShell.SendKeys " Dos دستور مورد نظر برای اجرا در "
WinShell.SendKeys "{ENTER}"

به مثاهای زیر توجه کنید که به ترتیب اولی برای ایجاد پوشه ای به نام Visual Basic در درایو C و دستور دوم برای نمایش پوشه های موجود در درایو C و دستور سوم برای Format فلاپی دیسک می باشد .

'For Create Folder With Dos Prompt :WinShell.SendKeys "MD C:\Visual" & " Basic"
WinShell.SendKeys "{ENTER}"

'For Showing C Directory :
WinShell.SendKeys "Dir C:\"
WinShell.SendKeys "{ENTER}"

'For Format Floppy Disk Of Dos :WinShell.SendKeys "format A:"
WinShell.SendKeys "{ENTER}"

splash screen

:: امروز می خواهم چگونگی ساخت یک Splash Screen برای برنامه هایی که مینویسیم را براتون شرح بدم . خوب باز هم باید توابع مورد نیاز را فراخوانی کرده و همچنین ثوایت مورد نیاز را تعریف کنیم

Const LWA_COLORKEY = &H1Const LWA_ALPHA = &H2Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED =
&H80000Private Declare Function GetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As
Long
Private
Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal _
dwNewLong As Long) As
Long
Private
Declare Function SetLayeredWindowAttributes Lib _
"user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha _
As Byte, ByVal dwFlags As Long) As
Long

نوع نمایش این Splash Screen به گونه ای است که میزان شفافیت فرم آن از 0 به 255 رسیده و دوباره کاهش یافته به صفر می رسد (یا بعبارت دیگر از حالت نامرئی به شفافیت کامل رسیده و دوباره از شفافیت آن کاسته شده و نامرئی می شود ) . خوب تنها Control که برای این برنامه نیاز داریمTimer می باشد . کدی که در Form_Load می بینید باعث می شود که فرم در ابتدای امر نامرئی باشد چون مقدار bAlfa آنرا 0 داده ام


Private Sub Form_Load()
    
    Dim Ret As
Long    'Set the window style to 'Layered'    Ret = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
    Ret = Ret Or WS_EX_LAYERED
    SetWindowLong Me.hWnd, GWL_EXSTYLE, Ret

   'SetLayeredWindowAttributes Me.hWnd,0,(0-255),LWA_ALPHA    SetLayeredWindowAttributes Me.hWnd,0,0,LWA_ALPHA

    Timer1.interval = 1
    End
    
End Sub

در مرحله بعد برای اینکه فرم از حالت نامرئی به مرئی برسد (یعنی مقدار آن از 0 به 255 برسد) یک حلقه For نوشتم . حال برای اینکه فرم دوباره از حالت مرئی به نامرئی برشد یک حلقه For دیگر با گام افزایش -1 نوشتم تا مقدار آنرا کاهش دهد .

Private Sub Timer1_Timer()
 
     For i = 1 To
255       SetLayeredWindowAttributes Me.hWnd,0,CByte(i),LWA_ALPHA
     Next i

     For i = 255 To 1 Step -
1       SetLayeredWindowAttributes Me.hWnd,0,CByte(i),LWA_ALPHA
     Next i
     
     Timer1.Enabled =
False  
End Sub

(*) یک نکته : این برنامه در سیستم عاملهای windows 2000 به بعد قابل اجراست , زیرا توابع مورد استفاده در این برنامه در ویندوزهای 98 و 95 وجود ندارد .

:: این برنامه را می توانید دریافت کنید

کیبرد فارسی

میخواهم براتون بگم که چطور می شه تو VB وقتی برنامه مون اجرا شد بشه برای ورود اطلاعات از زبان فارسی استفاده کرد

برای اینکار اول باید از یه API استفاده کرد . تابع LoadKeyboardLayout رو از کتابخانه User32 به صورت زیر فراخوانی کنیم :

Public Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long

بعد از برای فراخوانی تابع باید تابع را در رویداد مورد نظر فراخوانی کرد مثلا من تابع رو وقتی که فرم برنامه load شده فراخونی کردم :

LoadKeyboardLayout "00000429", 1 ' 00000429 :::::> For Farsi Keyboard

برای اینکه بعد از Unload شدن فرم برنامه زبان ویندوز به انگلیسی برگردد کد زیر را میتوانیم در رویداد unload بنویسیم

LoadKeyboardLayout "00000409", 1 ' 00000429 :::::> For ٍEnglish Keyboard

:: در ضمن اگر مایل به دیدن کد سایر زبانها هستید یه سری به آدرس زیر در رجیستری ویندوز بزنید .

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Keyboard Layouts

تابع sendkeys


خوب اینجا می خوام یک کد کاربردی دیگه رو بهتون بگم . این کد باعث می شه که وقتی شما رویداد خاصی رو اجرا مکنید , کلید خاصی از کیبرد اجرا شود یعنی مثلاً اگر شما روی یک Textbox هستید و کلید Enter را فشردید عملی معادل فشردن کلید ..... , Tab ,Delete,Pagedown , F1 ,F2 روی دهد :

Private Sub TextBox_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
       SendKeys "{tab}"
    End If
End Sub

باز هم این کد را در رویداد keypress پیشنهاد می کنم .

در اینجا کدهایی که می توان از طریق این تابع با آنها کار کرد را می بینیم :

Key

Code

BACKSPACE{BACKSPACE}, {BS}, or {BKSP}
BREAK{BREAK}
CAPS LOCK{CAPSLOCK}
DEL or DELETE{DELETE} or {DEL}
DOWN ARROW{DOWN}
END{END}
ENTER {ENTER} or ~
ESC{ESC}
HELP{HELP}
HOME{HOME}
INS or INSERT{INSERT} or {INS}
LEFT ARROW{LEFT}
NUM LOCK{NUMLOCK}
PAGE DOWN{PGDN}
PAGE UP{PGUP}
PRINT SCREEN{PRTSC}
RIGHT ARROW{RIGHT}
SCROLL LOCK{SCROLLLOCK}
TAB{TAB}
UP ARROW{UP}
F1{F1}
F2{F2}
F3{F3}
F4{F4}
F5{F5}
F6{F6}
F7{F7}
F8{F8}
F9{F9}
F10{F10}
F11{F11}
F12{F12}
F13{F13}
F14{F14}
F15{F15}
F16{F16}

تا برنامه هایی بعدی خدا حافظ .

تابع tnstr

سلام دوستان , امروز می خوام یه مطلب کاربردی تو VB رو براتون بگم که شاید خیلی به کارتون بیاد این کد شاید براتون تو برنامه هایی که باید از ورودی مقدار خاصی رو بگیرید مثلا می خواهید از ورودی فقط یک مقدار عددی رو بگیرید و بعد اون رو تو محاسبات استفاده کنید و اگر کاربر مثلا در ورودی 788در12 را تایپ کنه برنامه Error میده خوب برای رفع این مشکل می شه از ورودی فقط عدد گفت یعنی در صورتی که کاربر فقط اعداد 0 تا 9 رو تایپ کنه در ورودی نمایش داده می شه این هم حلال این مشکل .

خوب این کد رو بهتر که در رویداد Keypress کنترل مورد نظر خود ( از جمله  Textbox , Rich Textbox , Inputbox  و ... ) بنویسید که به محض فشرده شدن هر کلید از سوی کاربر این قسمت چک می شود .

 

Private Sub TextBox_KeyPress(KeyAscii As Integer)
'=============================================
   Dim StrValid As String
   StrValid = "0123456789"
   If InStr(StrValid, Chr(KeyAscii)) = 0 Then
      KeyAscii = 0
   End If
End Sub

 

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

1. تابع Instr : یک زیررشته را در یک رشته دیگر جستجو میکند و موقعیت آنرا در رشته بر می گرداند شکل کلی این تابع به صورت زیر است :

InStr([start, ]string1, string2[, compare])

قسمت

توضیحات

start

مکانی از رشته که جستجو باید از آنجا  آغاز شود

string1

رشته اول

string2

رشته دوم

compare

مشخص کردن نوع مقایسه که بین دو رشته انجام میشود که خود بر سه نوع vbBinaryCompare و vbDatabaseCompare و vbTextCompare می باشد

به این مثال توجه کنید :

instr("visual basic Language","Language")  ==============> عدد 14 برگردانده میشود

:: یک نکته و آن اینکه مواvدی که در شکل کلی این تابع در داخل [ ] قرار دارند اختیاری می باشند .

 

2. تابع Chr : این تابع کاراکتر معادل کد اسکی یک مقدار را بر می گرداند

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