exploit

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

exploit

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

Restart و ShutDown کردن سیستم در VB

سلام دوستان امروز می خواهم به سوال یکی از دوستان پاسخ دهم . یکی از دوستان پرسیده بود که چگونه می توان برنامه نوشت که بتوان سیستم را Restart و یا ShutDown کرد . خوب برای این کار کافیست که با API ها آشنایی داشته باشید , من در آموزش استفاده از Themes WinXp درباره API ها توضیحاتی دادم بد نیست که یه نگاه به اون داشته باشید . از دو تابع که در کتابخانه shell32.dll ویندوز موجود می باشد استفاده میکنیم . از تابع SHRestartSystemMB برای restart کردن و از تابع SHShutDownDialog برای shutDown کردن استفاده می شود . همچنین برای این برنامه دو ثابت تعریف کردم که در اولی عدد معادل برای restart و در دومی کد معادل برای ShutDown کردن قرار دارد .

در برنامه های قبلی هم که با کار کردن با توابع آشنا شدید دیگر فکر نکنم نیازی برای توضیح بیشتر باشه کد برای دریافت این برنامه اینجا کلیک کنید .

'Define Const For Use of API
Const Shut_Down = 1
Const Win_Reboot= 4

'Declare API Concern to Windows Restart
Private Declare Function SHRestartSystemMB Lib "shell32" Alias "#59" (ByVal hOwner As Long, ByVal sExtraPrompt As String, ByVal uFlags As Long) As Long


'Declare API Concern to Windows Shut Down
Private Declare Function SHShutDownDialog Lib "shell32" Alias "#60" (ByVal YourGuess As Long) As Long

Private Sub CmdRestart_Click()
SHRestartSystemMB Me.hwnd, vbNullString, Win_Reboot
End Sub
Private Sub CmdShutdown_Click()
SHShutDownDialog Shut_Down
End Sub

چگونه می توان یک Explorer را اجرا کرد ؟

برای این کار می توان از راههای مختلفی استفاده کرد مثلاً از شیء Shell و . . .  . برای اینکار از منوی Project آیتم Preference را انتخاب کنید , اکنون آیتم Microsoft Shell Controls and Automaton  را انتخاب کنید . حالا مراحل زیر را انجام میدهیم .


Dim SH As New Shell


حالا می توانید از متدهای زیادی که این شیء در اختیارتان می گزارد استفاده کنید . از جمله این متد های اجرا Internet Explorer , Outlook , اجرای آیتم های موجود در کنترل پنل , نمایش پنجره جستجوی ویندوز و کلی کارهای مفید دیگه . به مثالهای زیر توجه کنید :


SH.Open "http://vb.blogfa.com"

SH.TrayProperties

SH.SetTime

SH.FindComputer 'System Search

SH.ControlPanelItem "sysdm.cpl" 'System Properties

SH.ControlPanelItem "inetcpl.cpl" 'Internet Options

SH.ControlPanelItem "'appwiz.cpl" 'Add/Remove Programs

این شیء دارای متدهای دیگری هم میباشد که به راحتی می توانید از آنها استفاده کنید .

 

اجرای دستورات 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