تبلیغات
این هم یه پروپرتی Override شده برای سایه دار کردن فرم ها . زمانی که یه کنترل خواستید بسازید این تکه کد خیلی به دردتون میخوره.
' Override the CreateParams property
Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
Get
Dim cp As CreateParams = MyBase.CreateParams
cp.ClassStyle = cp.ClassStyle Or CS_DROPSHADOW
Return cp
End Get
End Property
Imports System.Diagnostics
For Each p As Process In Process.GetProcesses()
If p.ProcessName.ToLower() = "notepad" Then
p.Kill()
End If
Next
فارسی کردن صفحه کلید
System.Threading.Thread.CurrentThread.CurrentCultu re = New System.Globalization.CultureInfo("FA-IR")
انگلیسی کردن صفحه کلید
System.Threading.Thread.CurrentThread.CurrentCultu re = New System.Globalization.CultureInfo("en-US")
Imports System.IO
Imports System.IO.Compression
Public Class ZipUtil
Public Sub CompressFile(ByVal sourceFile As String, ByVal destinationFile As String)
' make sure the source file is there
If File.Exists(sourceFile) = False Then
Throw New FileNotFoundException
End If
' Create the streams and byte arrays needed
Dim buffer As Byte() = Nothing
Dim sourceStream As FileStream = Nothing
Dim destinationStream As FileStream = Nothing
Dim compressedStream As GZipStream = Nothing
Try
' Read the bytes from the source file into a byte array
sourceStream = New FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read)
' Read the source stream values into the buffer
buffer = New Byte(CInt(sourceStream.Length)) {}
Dim checkCounter As Integer = sourceStream.Read(buffer, 0, buffer.Length)
' Open the FileStream to write to
destinationStream = New FileStream(destinationFile, FileMode.OpenOrCreate, FileAccess.Write)
' Create a compression stream pointing to the destiantion stream
compressedStream = New GZipStream(destinationStream, CompressionMode.Compress, True)
'Now write the compressed data to the destination file
compressedStream.Write(buffer, 0, buffer.Length)
Catch ex As ApplicationException
MessageBox.Show(ex.Message, "An Error occured during compression", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
' Make sure we allways close all streams
If Not (sourceStream Is Nothing) Then
sourceStream.Close()
End If
If Not (compressedStream Is Nothing) Then
compressedStream.Close()
End If
If Not (destinationStream Is Nothing) Then
destinationStream.Close()
End If
End Try
End Sub
Public Sub DecompressFile(ByVal sourceFile As String, ByVal destinationFile As String)
' make sure the source file is there
If File.Exists(sourceFile) = False Then
Throw New FileNotFoundException
End If
' Create the streams and byte arrays needed
Dim sourceStream As FileStream = Nothing
Dim destinationStream As FileStream = Nothing
Dim decompressedStream As GZipStream = Nothing
Dim quartetBuffer As Byte() = Nothing
Try
' Read in the compressed source stream
sourceStream = New FileStream(sourceFile, FileMode.Open)
' Create a compression stream pointing to the destiantion stream
decompressedStream = New GZipStream(sourceStream, CompressionMode.Decompress, True)
' Read the footer to determine the length of the destiantion file
quartetBuffer = New Byte(4) {}
Dim position As Integer = CType(sourceStream.Length, Integer) - 4
sourceStream.Position = position
sourceStream.Read(quartetBuffer, 0, 4)
sourceStream.Position = 0
Dim checkLength As Integer = BitConverter.ToInt32(quartetBuffer, 0)
Dim buffer(checkLength + 100) As Byte
Dim offset As Integer = 0
Dim total As Integer = 0
' Read the compressed data into the buffer
While True
Dim bytesRead As Integer = decompressedStream.Read(buffer, offset, 100)
If bytesRead = 0 Then
Exit While
End If
offset += bytesRead
total += bytesRead
End While
' Now write everything to the destination file
destinationStream = New FileStream(destinationFile, FileMode.Create)
destinationStream.Write(buffer, 0, total)
' and flush everyhting to clean out the buffer
destinationStream.Flush()
Catch ex As ApplicationException
MessageBox.Show(ex.Message, "An Error occured during compression", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
' Make sure we allways close all streams
If Not (sourceStream Is Nothing) Then
sourceStream.Close()
End If
If Not (decompressedStream Is Nothing) Then
decompressedStream.Close()
End If
If Not (destinationStream Is Nothing) Then
destinationStream.Close()
End If
End Try
End Sub
End Class
Visual Basic
همواه خصوصیات و امکانات جدیدی به منظور توسعه سریع نرمافزار که باعث
بهبود بهرهوری، سهولت در استفاده و بالا بردن قدرت برنامهنویسان میشود،
ارائه مینماید. یکی از این امکانات My نام دارد. My امکان دسترسی به
اطلاعاتی در مورد پروژه در حال اجرا و همچنین محیطی که پروژه در آن در حال
اجرا میباشد را فراهم میسازد. مزیت مهم دیگر My در این است که به راحتی
میتوان در قالب لیستهای پیشنهادی «
IntelliSense
» با امکانات آن کار کرد.
اعضای My عبارتند
از:
Application: حاوی اطلاعاتی جامع و کاربردی
در مورد پروژه جاری.
Computer: با این گزینه میتوان به خصوصیات
و اطلاعات جامعی در مورد سخت افزارهای متصل به سیستم دست یافت.
Forms: با استفاده از این گزینه میتوان به
تمامی فرمهای موجود در پروژه و طبعاً اطلاعات درونی آنها دست پیدا کرد.
Settings: از متدهای موجود در این گزینه
میتوان تنظیمات پروژه را دستکاری نمود.
User: از این خصوصیت برای بدست آوردن
اطلاعات در مورد کاربر جاری سیستم استفاده میشود.
Webservices: این خصوصیت برای فراهم کردن
امکاناتی به منظور ایجاد و دستیابی به یک نمونه از وب سرویسهای XML که
توسط پروژه جاری به آنها ارجاع شده است استفاده میکنیم. Computer این خصوصیت یکی از
پرکاربردترین خصوصیات My می باشد. با به کارگیری این گزینه میتوان به
راحتی هر چه تمامتر به اطلاعاتی در مورد وضعیت سختافزارهای متصل به سیستم
درست پیدا کرد. این کار در یک خط کد و بدون انجام کارهای اضافی توسط
برنامهنویس، صورت میپذیرد. به عنوان مثال برای اینکه متوجه شویم ماوس
متصل به سیستم اسکرولدار است به راحتی میتوان از کد زیر استفاده کرد: MsgBox(My.Computer.Mouse.WheelScrollLines) از طریق Computers
میتوان به سختافزارهایی مانند KeyBoard، Mouse، Audio و ... به راحتی دست
پیدا کرد. در ادامه چندین
خصوصیت از computers را بررسی می كنیم:
1.
Mouse: این شئ دارای 3 خصوصیت به شرح زیر میباشد: ButtonsSwapped:
تعیین جابجا شدن کلیک چپ و راست ماوس.
WheelExists: تعیین اسکرولدار بودن ماوس.
WheelScrollLines: تعیین تعداد سطوری که با یک بار حرکت ماوس رد میشوند.
2.
Keyboard: این شئ دارای 6 خصوصیت و یک متد
می باشد:
AltKeyDown: تعیین میکند که آیا کلید Alt پایین نگه داشته شده است یا نه؟!
CtrlKeyDown: پایین بودن کلید Ctrl را بررسی می کند.
ShiftKeyDown: تعیین پایین و یا بالا بودن کلید Shift.
NumLock، CapsLock و ScrollLock: تعیین فعال یا غیرفعال بودن کلیدهای
مرتبط.
متد ()SendKeys: از این
متد برای ارسال ضربات کلید به محیط سیستم عامل استفاده میشود. به عنوان
مثال ("+%")My.Computer.Keyboard.SendKeys
باعث ارسال ضربات کلید Alt و Shift به سیستم میگردد. لذا زبان
سیستم شما تغییر میکند. البته اگر بیش از یک زبان وجود داشته باشد.
3.
Name: این خصوصیت از شئ Computer حاوی نام کامپیوتر است.
4.
Screen: اطلاعات در مورد صفحه نمایش را در اختیار
برنامهنویس قرار میدهد. این کلاس حاوی خصوصیات متعددی است که عبارتند از:
BitsPerPixel: میزان Color فعلی ویندوز را نشان میدهد. به عنوان مثال اگر
این گزینه در ویندوز بر روی True Color (32 Bit) تنظیم باشد، عدد 32 و اگر
بر روی High Color (16 Bit) تنظیم باشد عدد 16 برگشت داده می شود.
Bounds: حاوی خصوصیاتی به منظور تعیین محدوده کاری تنظیم شده میباشد.
DeviceName: نامی که در سیستم برای مانیتور در نظر گرفته شده است را نمایش
میدهد.
Primary: اگر دستگاه نمایش فعلی، دستگاه پیشفرض باشد true برگشت می دهد
WorkingArea: این گزینه اطلاعاتی راجع به میزان محیط کاری فعال در ویندوز
را در بر دارد. تفاوت این گزینه با Bounds در این است که در Bounds مختصات
کلی نمایش داده میشود اما در این گزینه، محیطی که واقعا میتوان از آن به
عنوان Desktop استفاده کرد برگشت داده میشود. مثلاً در این گزینه ارتفاع
نوار TaskBar از ارتفاع صفحه کسر میشود.
5.
Clock: با استفاده از این شئ میتوان اطلاعات مفیدی در
مورد ساعت سیستم بدست آورد. خصوصیات این شئ عبارتند از:
LocalTime: زمان جاری سیستم را برگشت میدهد.
GmtTime: زمان جاری سیستم را براساس زمان جاری GMT بیان میکند.
TickCount: مدت زمانی سپری شده از روشن بودن سیستم براساس میلی ثانیه را
برگشت میدهد.
6. Audio: از این شئ برای پخش صوت
دلخواه و همچنین صوتهای پیش فرض ویندوز میتوان استفاده کرد. این شئ فقط
دارای 3 متد است:
Play: این متد دارای 4 سربارگذاری بوده و با آن میتوان یک فایل صوتی
استاندارد را پخش نمود. برای این متد میتوان اطلاعات مسیر ذخیره سازی فایل
را ارسال کرد و یا اطلاعات باینری موسیقی را ارسال نمود و یک Stream حاوی
موسیقی ارسال نمود. همچنین نحوه پخش شدن را میتوان تنظیم کرد. میتوان
کاری کرد که تا اتمام آهنگ فعالیتی صورت نگیرد و یا اینکه موسیقی در پس
زمینه اجرا شود و کاربر بتواند به تعامل با برنامه ادامه دهد.
PlaySystemSound: از این متد برای پخش یکی از صداهای پیش فرض در ویندوز
استفاده میکنیم. این متد دارای یک پارامتر است و برای مقداردهی آن از لیست
پیشنهادی که باز میشود میتوانید استفاده کنید و یا اینکه یکی از اعضای
Media.SystemSounds را ارسال کنید. به عنوان مثال Media.SystemSounds.Beep
باعث پخش صدای بوقی از سیستم میشود.
Stop: پخش موسیقی را کنسل میکند.
7.
FileSystem: این شئ حاوی متدهای فراوانی
برای مدیریت فایلها و پوشهها میباشد. به علت سادگی و همخوانی نام متدها
با عملی که انجام میدهند از ذکر آنها خودداری میکنیم. در این فایل چندین
خصوصیت کاربردی به منظور یافتم مسیر جاری اجرای برنامه و ... نیز گنجانده
شده است. مثلا My.Computer.FileSystem.CurrentDirectory مسیر جاری اجرای
برنامه را برمیگرداند. و یا از شئ Drives در این شئ برای مدیریت درایوهای
کامپیوتر استفاده میشود. همچنین خصوصیت تحت عنوان SpecialDirectories در
این شئ وجود دارد که آدرس پوشههای مهم سیستم مانند Desktop، ProgramFiles،
Windows، Temp، Programs و ... را برگشت میدهد.
8.
Network: این شئ حاوی متدها و خصوصیاتی برای کنترل شبکه
میباشدو با متدهای موجود در این شئ میتوانید اقدام به دانلود و ... نیز
بکنید.
9.
Port: حاوی اطلاعات راجع به پورتهای سیستم و همچنین
تعامل با آنها.
10.
ClipBoard: حاوی متدهایی برای کنترل و دستکاری کلیپ بورد
سیستم. مثلا با متد ContainsText() میتوان پی برد که اگر گزینه Paste در
برنامه فشار داده شود آیا متن در حافظه وجود دارد یا خیر؟ متدهای این کلاس
به صورت خلاصه عبارتند از:
()Clear: پاک کردن حافظه کلیپبورد.
ContainsText()، ContainsAudio و متدهایی که با Contains آغاز میشوند:
بررسی اینکه شئ موجود در حافظه از نوع مد نظر می باشد یا نه؟
متدهای Get: از این متدها برای دریافت اطلاعات موجود در حافظه متناسب با
نوع متد برگشت میدهد
متدهای Set: میتوان حافظه را از درون برنامه در حال اجرا ست نمود.
11.
Info: این شئ حاوی اطلاعاتی کلی در مورد سیستم است.
اطلاعاتی از قبیل نام کامل سیستم عامل، میزان کل حافظه Ram و حافظه مجازی،
میزان در دسترس این حافظهها، نوع سیستم عامل و ورژن سیستم عامل و ... . به
عنوان مثال (MsgBox(My.Computer.Info.OSFullName نام کامل سیستم عامل را
نمایش میدهد
12.
Registery: حاوی متدهایی برای کار با رجیستری میباشد. از
متدها و اشیاء درونی این شئ برای دستکاری قسمتهای مختلف Registery میتوان
استفاده کرد.
بالاترین سطح My، توسط
اشیائی نشان داده میشود. هر کدام از این Objectها مانند یک فضانام و یا یک
کلاس با اعضای Shared عمل مینمایند. در جدول زیر اشیاء سطح اول
My و ارتباطات داخلی آنها مشخص شده است:
Public Command As String
Public Permission As String
Public DB1 As Database
Public RS1 As Recordset
Public SL As String 'Select Lesson
Public Cl As String 'Code of Collegian
Public asd As String
Option Explicit
'//===============================================
'//This function create Random number in special range
'//Count ==> count of number that must created
'//Min ==> Minimume of number that can be created
'//Max ==> Maximume of number that can be created
'//Result() ==> A byref array for put result in it and return to user
Public Function Random_X(ByVal Count As Long, ByVal Min As Long, ByVal Max As Long, ByRef Result() As Long, ByVal Sort_Array As Boolean) As Boolean
Dim i As Long
Dim Top_Array As Long
Dim Rand_Num As Long
Randomize '//Randomize Timer
'//============================
'//First check that count in range (MAX-MIN)
If Count > (Max - Min) Then
Random_X = False
Exit Function
Else
Random_X = True
End If
'//============================
Top_Array = 0
ReDim Result(Count - 1) '//Redim Empty Array and Fit it to Count
For i = LBound(Result) To UBound(Result)
Repeat:
Rand_Num = Rnd() * Max
Rand_Num = Rand_Num + Max '//Go Number larger than max
Do While (Rand_Num < Min Or Rand_Num > Max)
Rand_Num = Rand_Num - (Max - Min) '// IF Rand number is out of range , come it in range
Loop
If In_Array_X(Result, Rand_Num, i) = False Then '//IF Not exist then push it into array
Result(i) = Rand_Num
Else
GoTo Repeat
End If
Next
If Sort_Array = True Then Sort Result '//If Sort =True then Sort result array
End Function
'//=======================================
'//This function get a byref array and a num
'//Check the num exist in array
Public Function In_Array_X(ByRef Arr_Name() As Long, ByVal Num As Long, ByVal Top_Arr As Long) As Boolean
Dim i As Long
In_Array_X = False
If Top_Arr > UBound(Arr_Name) Then Top_Arr = UBound(Arr_Name)
For i = LBound(Arr_Name) To Top_Arr
If Arr_Name(i) = Num Then
In_Array_X = True
Exit For
End If
Next
End Function
'//=======================================
'//This Function get a byref array and sort it
Public Sub Sort(ByRef Sort_Arr() As Long)
Dim i As Long, j As Long
Dim Temp As Long
For i = UBound(Sort_Arr) - 1 To LBound(Sort_Arr) Step -1
For j = 0 To i Step 1
If Sort_Arr(j) > Sort_Arr(j + 1) Then
Temp = Sort_Arr(j)
Sort_Arr(j) = Sort_Arr(j + 1)
Sort_Arr(j + 1) = Temp
End If
Next
Next
End Sub
============================================================
طرز استفاده از تابع
Dim IfSuccess As Boolean
Dim Result() As Long
IfSuccess = Random_X(1, 100, 1000, Result, True)
Text1.Text = Result(0)
سلام دوستان راستش می خواستم یه آموزش درست و حسابی و کامل درباره کار با Winsock2005DLL بزارم اما گفتم اول تو سایت بنویسم ببینم اصلا کسی به یه همچین آموزشی نیاز داره یا نه اگه دیدم داره منم سعی میکنم یه مقاله درست و حسابی در آینده بزارم
دمتون گرم خدانگهدار
تو این پست یه مطلب بدرد
بخور که از سایت برنامه نویس گرفتم رو واستون میذارم امیدوارم که لازمتون نشه!
در صورتی که بخواهید بدون
فشردن یک کلید از کیبورد کاری کنید که یک کلید خاص فشرده بشه
میتونید از این دستور به صورت زیر استفاده میکنید : کد: SendKeys String[,wait] String : رشته ای که در واقع همون نویسه هایی هست که باید
به عنوان کلید ارسال بشن کد: SendKyes "+ {+} 4 {*} 6 کلیدهای ویژه
در دستور Sendkeys : توجه کنید که تنها کلیدی که
نمیتونیم اون رو به برنامه ها بفرستیم ، کلید Print Screen هست (شماره ی 34) به عنوان مثال : کد: Sendkeys "+(ES)" یعنی فشردن کلید
Shift به همراه کلید های E ,
S کد: Sendkeys "+ES" یعنی فشرن کلید
Shift به همراه E و پس از رها کردن ، فشردن
کلید S است کد: SendKeys "{key num}" که در اینجا key کلیدی است که میخواهید به برنامه بفرستید و num تعداد تکرار آن کلید هست
((دقت کنید که هیچ تفاوتی
بین فشردن یک کلید رو کیبورد و دستور sendkeys وجود نداره))
Wait : پارامتری منطقی است. اگر روی False تنظیم بشه (پیش فرض) ، روال اجرا کننده دستور Sendkeys بلافاصله بعد
از ارسال نویسه ها مجددا کنترل برنامه رو در دست میگیره و به کار خودش ادامه میده.
اما اگه رو True تنظیم بشه سیستم تا
پردازش کامل نویسه ها ، کنترل رو به روال اجرا کننده ی دستور Sendkeys باز پس نمیده
توجه کنید که برای ارسال نویسه
های خاص (~ , { , } , % , ( , ) , - , + , ^) باید اونا رو داخل {} قرار بدیم
به عنوال مثال :
برای استفاده از کلید های Alt
, Ctrl , Shift همون
طور که آقای غفوری گفتند میتونید از معادل های زیر استفاده کنید
توجه : اگه میخواین کلیدی
رو چندین بار تکرار کنید میتونید از
این الگو استفاده کنید :
با تشکر
با سلام خدمت دوسوی گلم حالتون خوفه الحمد الله
که خوبید اینبار ادامه کدهای سری قبل رو واستون می زارم
که البته سعی کردم مطالب بهتر و به درد بخورتر رو بزارم خوش باشید(ما رو هم دعا
کنید) با این کد می تونید یک فایل رو در شبکه با
استفاده از وینسوک ارسال کنید. Public Sub SendData(ByVal
sFile As String,
ByVal sSaveAs As
String, ByVal
tcpSend As Winsock) On Error GoTo ErrHandler Dim sSend As String, sBuf As String Dim
ifreefile As Integer Dim lRead As Long, lLen As Long, lThisRead As Long, lLastRead As Long Dim strData
As String tcpSend.GetData(strData) ifreefile = FreeFile ' Open file for
binary access: Open sFile For
Binary Access Read As #ifreefile lLen = LOF(ifreefile) ' Loop through
the file, loading it up in chunks of 64k: Do While lRead < lLen lThisRead = 65536 If
lThisRead + lRead > lLen Then lThisRead = lLen - lRead End If If Not lThisRead = lLastRead Then sBuf = Space$(lThisRead) End If Get #ifreefile, , sBuf lRead = lRead + lThisRead sSend = sSend & sBuf sBuf = Space$(0) Loop lTotal = lLen Close(ifreefile) bSendingFile = True '// Send the file
notification tcpSend.SendData("FILE"
& sSaveAs) DoEvents() '// Send the file tcpServer.SendData(sSend) DoEvents() '// Finished tcpSend.SendData("FILEEND") bSendingFile = False MMControl1.FileName = "FileDone.wav" MMControl1.Command = "Open" MMControl1.Command = "Play" Exit Sub ErrHandler: MsgBox "Err
" & Err & " : "
& Error End Sub Private Sub tcpServer_DataArrival(ByVal
bytesTotal As Long) Dim strData
As String Dim
ifreefile ' DoEvents tcpServer.GetData(strData) If
Right$(strData, 7) = "FILEEND" Then bFileArriving = False lblProgress = "Saving
File to " & App.Path & "\"
& sFile sArriving = sArriving &
Left$(strData, Len(strData) - 7) ifreefile = FreeFile MMControl1.FileName = "File.wav" MMControl1.Command = "Open" MMControl1.Command = "Play" Open sFile For
Binary Access Write As #ifreefile Put #ifreefile,
1, sArriving Close #ifreefile ShellExecute 0, vbNullString,
App.Path & "\" & sFile, vbNullString, vbNullString,
vbNormalFocus lblProgress = "Complete" ElseIf
Left$(strData, 4) = "FILE" Then bFileArriving = True sFile = Right$(strData, Len(strData) -
4) ElseIf
bFileArriving Then lblProgress = "Receiving
" & bytesTotal & " bytes
for " & sFile & "" >from " & tcpServer.RemoteHostIP sArriving = sArriving & strData MMControl1.FileName = "FileDone.wav" MMControl1.Command = "Open" MMControl1.Command = "Play" End If End Sub با این آموزش شما میتونید یه سری اطلاعات رو یه
جای خاص از رجیستری ذخیره کنید که مثلا برای ثبت تنظیمات کاربر میتونید مورد
استفاده قرار بدید ذخیره اطلاعات SaveSetting(My.Application.Info.AssemblyName, "Appearance", "Font",
FontName) SaveSetting(My.Application.Info.AssemblyName, "Appearance", "Color",
ColorName) بازیابی اطلاعات FontName=GetSetting(My.Application.Info.AssemblyName, "Appearance", "Font","") ColorName=GetSetting(My.Application.Info.AssemblyName, "Appearance", "Color","") HKEY_CURRENT_USER\Software\VB and VBA Program
Settings محل
ذخیره سازی اطلاعات انجام اعمال متداول در رجیستری Imports
Microsoft.Win32 Private Sub button1_Click(ByVal
sender As Object,
ByVal e As
EventArgs) Handles Button1.Click ' // Create
SubKey Registry.LocalMachine.CreateSubKey("Software\Sinpin",
RegistryKeyPermissionCheck.ReadWriteSubTree) '//Create Key and
Set Value Dim reg As RegistryKey = Registry.LocalMachine.OpenSubKey("Software\Sinpin", True) reg.SetValue("DWord",
"1", RegistryValueKind.DWord) reg.SetValue("ExpandString",
"1",
RegistryValueKind.ExpandString) reg.SetValue("QWord",
"1", RegistryValueKind.QWord)
reg.SetValue("String", "1", RegistryValueKind.String) reg.SetValue("Unknown",
"1", RegistryValueKind.Unknown) '// Delete Key reg.DeleteValue("DWOrd") '// Delete SubKey Registry.LocalMachine.DeleteSubKey("Software\Sinpin") '// Read Key
Value Dim val As String =
reg.GetValue("QWord").ToString() '// Retrieve All
Keys For Each s As String In
reg.GetValueNames() MessageBox.Show(s) Next End Sub یه سری از مطالب جاش نمیشه میزارم تو ادامه مطلب
اجرا
کردن یک فایل اجرایی با کدنویسی System.Diagnostics.Process.Start("mspaint.exe") چنانچه فایل اجرایی نیاز به آرگومان خط فرمان داشته باشد: System.Diagnostics.Process.Start("mspaint.exe",
"c:\Test.bmp") تغییر خواص یک
فایل Imports System.IO Public Class Form1 Private Sub Button1_Click(ByVal
sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click Dim
file As FileInfo = New
FileInfo("C:\test.txt") file.Attributes = file.Attributes Or FileAttributes.ReadOnly Or
FileAttributes.Hidden End Sub End Class
سلام خدمت دوستان خودم پس از یه مدت طولانی آپ نکردن تصمیم گرفتن از
این به بعد درباره ویژوال بیسیک 2008 کار کنم البته اگه همون ویژوال بیسیک 6 هم
چیزی گیرم بیاد میزارم اما به طور کلی دیگه زدیم تو کار ویژوال بیسیک 9 واسه شروع
هم چند تا سورس کوچک اما کاربردی رو از سایت برنامه نویس گرفتم که واستون می ذارم
امیدوارم استفاده کنید.....(نظر نداید ندادید اما ما رو از دعا نندازید) این سورس خودش میگه چیکار میکنه (میگی نه ازش بپرس) Public Declare Function
ExitWindowsEx Lib "user32.dll"
(ByVal uFlags As
Integer, ByVal
dwReason As Integer)
As Integer '// Log Off If
RadioButton1.Checked = True Then ExitWindowsEx(0, 0) '// Reboot If
RadioButton2.Checked = True Then ExitWindowsEx(2, 0) '// Shutdown If
RadioButton3.Checked = True Then ExitWindowsEx(1, 0) '/ Force
LogOff
If RadioButton4.Checked = True Then
ExitWindowsEx(4, 0) انتقال مقادیر خاصیت Text دو تکست باکس از طریق Drag & Drop Private Sub
TextBox1_MouseDown(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDown TextBox1.SelectAll() TextBox1.DoDragDrop(TextBox1.Text,
DragDropEffects.Copy) End Sub Private Sub TextBox2_DragEnter(ByVal sender
As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles
TextBox2.DragEnter If
(e.Data.GetDataPresent(DataFormats.Text)) Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Sub گرفتن و تسخیر کردن (Capture) تصویر صفحه نمایش Public Class Form1 Private Function CaptureScreen() As
Image Dim
screen As Bitmap = New
Bitmap(Windows.Forms.Screen.PrimaryScreen.Bounds.Width,
Windows.Forms.Screen.PrimaryScreen.Bounds.Height) Dim g As Graphics = Graphics.FromImage(screen) Using
(g) g.CopyFromScreen(0, 0, 0, 0,
screen.Size) End Using Return
screen End Function Private Sub Form1_Load(ByVal
sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load End Sub Private Sub Button1_Click(ByVal
sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click PictureBox1.Image = CaptureScreen() End Sub End Class بدست آوردن مسیر فولدرهای ویژه Dim
Path1 As String
= Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) Dim
Path2 As String
= Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) Dim
Path3 As String
= Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles) Dim
Path4 As String
= Environment.GetFolderPath(Environment.SpecialFolder.Cookies) Dim
Path5 As String
= Environment.GetFolderPath(Environment.SpecialFolder.Desktop) Dim
Path6 As String
= Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) Dim
Path7 As String
= Environment.GetFolderPath(Environment.SpecialFolder.Favorites) Dim
Path8 As String
= Environment.GetFolderPath(Environment.SpecialFolder.History) Dim
Path9 As String
= Environment.GetFolderPath(Environment.SpecialFolder.InternetCache) Dim Path10 As String =
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) Dim
Path11 As String
= Environment.GetFolderPath(Environment.SpecialFolder.MyComputer) Dim
Path12 As String
= Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) Dim
Path13 As String
= Environment.GetFolderPath(Environment.SpecialFolder.MyMusic) Dim
Path14 As String
= Environment.GetFolderPath(Environment.SpecialFolder.MyPictures) Dim
Path15 As String
= Environment.GetFolderPath(Environment.SpecialFolder.Personal) Dim
Path16 As String
= Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) Dim
Path17 As String
= Environment.GetFolderPath(Environment.SpecialFolder.Programs) Dim Path18 As String =
Environment.GetFolderPath(Environment.SpecialFolder.Recent) Dim
Path19 As String
= Environment.GetFolderPath(Environment.SpecialFolder.SendTo) Dim
Path20 As String
= Environment.GetFolderPath(Environment.SpecialFolder.StartMenu) Dim
Path21 As String
= Environment.GetFolderPath(Environment.SpecialFolder.System) Dim
Path22 As String
= Environment.GetFolderPath(Environment.SpecialFolder.Startup) Dim Path23 As String =
Environment.GetFolderPath(Environment.SpecialFolder.Templates) خاموش و روشن کردن مانیتور OptionStrictOff OptionExplicitOn FriendClass frmMonOff Inherits System.Windows.Forms.Form PrivateDeclareFunction SendMessage Lib"user32"Alias"SendMessageA"(ByVal hWnd AsInteger, ByVal wMsg AsInteger, ByVal wParam AsInteger, ByVal lParam As Any) AsInteger Const SC_MONITORPOWER AsInteger = &HF170 Const MON_OFF AsShort = 2 Const WM_SYSCOMMAND AsShort = &H112s PrivateSub frmMonOff_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) HandlesMyBase.Load SendMessage(Me.Handle.ToInt32,
WM_SYSCOMMAND, SC_MONITORPOWER, MON_OFF) EndSub EndClass
به فرمتون اضافه کنین وکدای زیررو وارد برنامتون کنین:CommandButtonدو تا دونه
Private
Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal
lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength
As Long, ByVal hwndCallback As Long) As Long Sub
OpenCDDoor() mciSendString "Set CDAudio Door Open Wait",
0&, 0&, 0& End
Sub Sub
CloseCDDoor() mciSendString "Set CDAudio Door Closed Wait",
0&, 0&, 0& End
Sub Private Sub
Command1_Click()
OpenCDDoor End
Sub Private Sub
Command2_Click()
CloseCDDoor End
Sub Private Sub
Form_Load() Command1.Caption = "Open
CD" Command2.Caption = "Close
CD" End Sub
این برنامه نشان میدهد كه با ویژوال بیسیك می توان به قسمت ریجستری ویندوز وارد شد و
تغییرات دلخواه را انجام داد '---------------------------------------' '---------------------------------------' Const ERROR_SUCCESS = 0& منبعش رو هم پاک نکردم
دو تا كامند به فرمتون اضافه كنید و نام یكی را
cmdshowو دیگری را Cmdhideبگذارید
یك listBoxبه فرمتون اضافه كنید و خاصیت
Styleآن را از Standard به CheckBox تغییر دهید
در آخر یك DriveListBox به
فرمتون اضاف كنید و كد زیر را در برنامه تان قرار دهید
Option
Explicit
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias
"RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As
Long) As Long
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias
"RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As
Long
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias
"RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As
Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias
"RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal
Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As
Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias
"RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long)
As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey
As Long) As Long
Const ERROR_BADDB =
1009&
Const ERROR_BADKEY = 1010&
Const ERROR_CANTOPEN =
1011&
Const ERROR_CANTREAD = 1012&
Const ERROR_CANTWRITE =
1013&
Const ERROR_REGISTRY_RECOVERED = 1014&
Const
ERROR_REGISTRY_CORRUPT = 1015&
Const ERROR_REGISTRY_IO_FAILED =
1016&
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER
= &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const REG_SZ =
1
'-------------------------------------------'
Dim RetValue As Long,
Result As Long
Dim KeyID As Long, KeyValue As Long
Dim SubKey As
String
Dim Regkey As String
Dim HCurKey As Long
Dim LRegResult As
Long
Dim S As String
Dim A As String
Private Sub CmdShow_Click()
S
= "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
A =
"NoDrives"
LRegResult = RegOpenKey(HKEY_CURRENT_USER, S, HCurKey)
LRegResult = RegDeleteValue(HCurKey, "NoDrives")
LRegResult =
RegCloseKey(HCurKey)
End Sub
Private Sub Form_Load()
Dim I As
Long
For I = 0 To Drive1.ListCount - 1
List1.AddItem
UCase(Left(Drive1.List(I), 2))
Next I
End Sub
Private Sub
CmdHide_Click()
Dim I As Long
Dim DrNum As Long
For I = 0 To
List1.ListCount - 1
If List1.Selected(I) = True Then
Select Case
I
Case 0: DrNum = DrNum + 1 'A:
' 2 ------->
B:
Case 1: DrNum = DrNum + 4 'C:
Case 2: DrNum =
DrNum + 8 'D:
Case 3: DrNum = DrNum + 16
'E:
Case 4: DrNum = DrNum + 32 'F:
Case 5: DrNum =
DrNum + 64 'G:
Case 6: DrNum = DrNum + 128
'H:
Case 7: DrNum = DrNum + 256 'I:
Case 8: DrNum =
DrNum + 512 'J:
Case 9: DrNum = DrNum + 1024
'K:
Case 10: DrNum = DrNum + 2048 'L:
Case 11: DrNum =
DrNum + 4096 'M:
Case 12: DrNum = DrNum + 8192 'N:
Case 13: DrNum = DrNum + 16384 'O:
Case 14: DrNum = DrNum +
32768 'P:
Case 15: DrNum = DrNum + 65536 'Q:
Case
16: DrNum = DrNum + 131072 'R:
Case 17: DrNum = DrNum + 262144
'S:
Case 18: DrNum = DrNum + 524288 'T:
Case 19: DrNum =
DrNum + 1048576 'U:
Case 20: DrNum = DrNum + 2097152 'V:
Case 21: DrNum = DrNum + 4194304 'W:
Case 22: DrNum = DrNum +
8388608 'X:
Case 23: DrNum = DrNum + 16777216 'Y:
Case
24: DrNum = DrNum + 33554432 'Z:
End Select
End If
Next
I
If DrNum = 0 Then
S =
"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
LRegResult
= RegOpenKey(HKEY_CURRENT_USER, S, HCurKey)
LRegResult =
RegDeleteValue(HCurKey, "NoDrives")
LRegResult =
RegCloseKey(HCurKey)
Else
If DrNum <> 0 Then
Regkey =
"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
RetValue
= RegCreateKey(HKEY_CURRENT_USER, Regkey, KeyID)
SubKey =
"NoDrives"
KeyValue = DrNum
RetValue = RegSetValueEx(KeyID,
SubKey, 0&, 4, KeyValue, 4)
End If
End If
End Sub
Private
Sub Form_Unload(Cancel As Integer)
MsgBox "برای مخفی یا نشان دادن درایو
باید کامپیوتر شما ریستارت یالوگ آو شود", vbInformation, "WWW.AGK.blogfa.com"
Unload Me
End
Sub
سلام. امروز میخوام در مورد كار با Process ها یكم بنویسم.مخصوصن در مورد بستن Process
برنامه ها. واسه بستن Processیه فایل اجرایی(طبق این راهی كه من بلدم) : واسه بدست آوردن آیدی Process با توجه به اطلاعاتی كه ما از اون برنامه داریم
چند تا راه هست كه من 2 تاشو میگم. توی راه اول ما با 3 تا تابع لیست Process ها و آیدی اونها رو بدست میاریم.هر
كدوم اسمش با اسم مورد نظر ما یكی بود از آیدیش استفاده میكنیم و اون رو
میبندیم. فعلا همینو میگم بعد میرم سراغ راه بعدی. Private Declare Function
CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID
As Long) As Long بعد با تابع Process32First و Process32Next اطلاعاتی در مورد هر كدوم از
Process ها مثل نام فایل و ProcessID و ... كه با بقیش فعلا كاری بدست بیاریم: Private Declare Function Process32First
Lib "kernel32.dll" (ByVal hSnapshot As Long, Uprocess As PROCESSENTRY32) As
Long البته این روش تا این مرحله فقط اسم فایل رو به ما میده مثل (notepad.exe) نه
آدرس كامل اون رو كه در مورد بدست آوردن آدرس كامل هم توضیح میدم. آرگومان بعدی هم آیدی Process یه كه میخواهیم در موردش اطلاعات بدست بیاریم كه
چون ما اینجا نمیخواهیم اطلاعاتی (لیست Module ها و ...) در مورد Process خاصی
بدست بیاریم (چون هنوز IDیی نداریم) و فعلا میخواهیم خود لیست Process ها رو بدست
بیاریم و آرگومان اول رو هم TH32CS_SNAPPROCESS قرار دادیم اینجا هرچی بگذاریم فرقی
نداره. آرگومان دوم برای وقتیه كه آرگومان اول رو چیز دیگه ای بغیر از اینی كه ما
الان گذشتیم بگذاریم...(فكر كنم زیادی توضیح دادم!!!!) حالا برای شروع بدست آوردن اطلاعات مورد نظرمون از Process32First استفاده
میكنیم.آرگومان اول هندلیه كه با تابع قبلی بدست آوردیم.بعدی یه متغیر از نوع
PROCESSENTRY32 هستش كه تابع اطلاعات مورد نظر رو توی این قرار میده: CONST MAX_PATH = 260 توی این szExeFile ٬Type اسم فایل ، th32ProcessID هم همون آیدی مورد
نظرمونه.با بقیش هم همونطور كه گفتم كاری نداریم. Private Declare Function CloseHandle
Lib "kernel32.dll" (ByVal hObject As Long) As Long خوب میریم سراغ كد : Private Const MAX_PATH = 260 Private Type PROCESSENTRY32 Private Sub Command1_Click() همه چیزه این كد رو به غیر از 2 چیز كوچیك توضیح دادم.یكی ایكنه برای اینكه
میخواهیم متغیر Process كه از نوع PROCESSENTRY32 هستش رو به تابع ارسال كنیم
باید طولش رو توی عضو .dwSize اون قرار بدیم.(این موضوع فقط مال این تابع و این نوع
نیست...) خوب تا اینجا فعلا لیست اسم ها و آیدی Process ها رو بدست آوردیم.با این روش و
با تابعی كه میگم میتونیم برنامه ای اسم فایل اجراییش رو داشته باشیم ببندیم.اما
چون ممكنه فایل اجرایی 2 تا برنامه ی جدا 1 اسم داشته باشن میتونه مشكل پیش بیاد و
بهتره با استفاده از مسیر فایل ها كارمون رو انجام بدیم كه هنوز روش بدست آوردن
مسیر رو نگفتم. همونطور كه اول گفتم باید با OpenProcess یه هندل از Process ایجاد كنیم : Private Declare Function OpenProcess
Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long,
ByVal dwProcessId As Long) As Long آرگومان اول نوع دسترسی هستش كه ما PROCESS_ALL_ACCESS =
&H1F0FFF (همه ی دسترسی ها) رو میگذاریم و خیال خودمون رو راحت
میكنیم. آرگومان بعدی رو هم True بگذارین(تاثیری تو كار ما نداره).بعد هم همون آیدیه
Process هستش . حالا باید مقدار برگشتی رو به تابع TerminateProcess بدیم : Private Declare Function
TerminateProcess Lib "kernel32" Alias "TerminateProcess" (ByVal hProcess As
Long, ByVal uExitCode As Long) As Long آرگومان اول همون هندله.دومی رو هم 0 قرار بدین. Private Const MAX_PATH = 260 hSnap =
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) در ضمن بعد از اینكه Process رو بستیم هندل رو هم با CloseHandle میبندیم. خوب حالا میاییم سراغ بدست آوردن آدرس كامل فایل های در حال اجرا. آرگومان اول كه میدونین چیه.دومی یه متغیر از نوع MODULEENTRY32 هستش كه
اطلاعات Module ها توش قرار میگیره: Private Const MAX_PATH = 260 اونی كه ما باش كار داریم szExePath هستش كه مسیر اون Module هستش چون فایلی كه
ما میخواهیم آدرسش رو بدست بیاریم هم یكی از همین Module هاست(اولین Module كه
توسط تابع Module32First برگردونه میشه) بنابر این آدرس همون آدرسیه كه ما
دنبالشیم.البته szModule هم فقط اسم Module هستش(بدون مسیر) چون ما اینجا فقط میخوایم آدرس اولین Module كه همون آدرس فایل Exe هستش رو بدست
بیاریم و با بقیه Module ها كاری نداریم دیگه واسه Module ها از حلقه استفاده
نمیكنیم.شما اگه خواستین این كار رو بكنین فرم كار مثل كد قبیلیه كه گذشتم. Option Explicit البته با این روش به دلیلی كه نمیدونم آدرس كامل یكسری از فایل ها كه تا اونجایی
كه چك كردم Process اون ها از نوع System بود و آدرسون هم توی دایركتوریه
سیستم(مثل svchost.exe) رو تابع برنمیگردونه و فقط اسم اون ها رو
برمیگردونه! Option Explicit CloseHandle
hSnapM Private Declare Function
GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As
Long) As Long آرگومان اول هندل مورد نظر هست.دومی هم یك متغیر از نوع Long كه تابع آیدیه
Process رو توش قرار میده .(مقدار برگشتی هم آیدیه Thread هستش كه كاری باش
نداریم) Option Explicit Private Sub Command1_Click() توی این پست روش هایی واسه بستن Processبرنامه ها رو گفتم.هدف من از گفتن این
مطلب ها فقط راه بستن Process نبود..با بدست آوردن ProcessID كارهای زیادی در مورد
Process ها و Thread ها و .. میشه كرد كه اینجا 2 تا روش برای این كار گفتم...اگه
حوصلشو داشتم بازم در مورد Process ها و مخصوصن خوندن memory برنامه ها كه یكی از
استفاده های باحالش بدست آوردن پسورد یاهو مسنجر (یا برنامه های مشابه) هستش مطلب
مینویسم(<مثل قبلی ها كه گفتی و ننوشتی؟؟؟:پی) خوش باشید...ما كه نیستیم. دوستان واسه نظر هم دکمه پایین سمت راست رو بزنید
اول باید آیدی
اون Process رو بدست بیاریم.
بعد باید با تابع OpenProcess یه هندل از اون
Process بدست بیاریم.
بعد با تابع TerminateProcess اون رو ببندیم .
یكیش با استفاده از اسم یا مسیر اون فایلی كه
در حال اجراست.
یكیش با استفاده از داشتن هندل یكی از پنجره های اون برنامه.
واسه ی كاری كه گفتم اول باید با
تابع CreateToolhelp32Snapshot (كه واسه بدست آوردن لیست Process ها و یا heap ها
، Module ها و... ی Process بكار میره) یه هندل لیست از Process ها بدست بدست
بیاریم:
Private Declare Function Process32Next Lib "kernel32.dll" (ByVal
hSnapshot As Long, Uprocess As PROCESSENTRY32) As Long
آرگومان اول تابع CreateToolhelp32Snapshot بستگی به لیستی كه میخواهیم بدست
بیاریم داره كه ما اینجا چون میخواهیم لیست همه ی Process های سیستم رو بدست بیاریم
اون رو Private Const TH32CS_SNAPPROCESS = &H2
میگذاریم.
Private Type
PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As
Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As
Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags
As Long
szExeFile As String * MAX_PATH
End Type
(آرگومان های تابع
Process3Next هم طبعا مثل Process32First هستش.)
بعد با یك حلقه تا زمانی كه
مقدار برگشتی تابع Process32Next صفر نباشه به فراخوانی این تابع ادامه میدیم و
توی هر بار فراخوانی اطلاعات یكی از Process ها رو بدست میاریم.(وقتی كه تابع صفر
برگردونه یعنی به انتهای لیست رسیدیم)
بعد از بدست آوردن اطلاعات مورد نظر باید
هندلی كه با تابع CreateToolhelp32Snapshot بدست آوردیم رو ببندیم :
Private
Const TH32CS_SNAPPROCESS = &H2
dwSize
As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID
As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As
Long
szExeFile As String * MAX_PATH
End Type
Private Declare Function
CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID
As Long) As Long
Private Declare Function Process32First Lib "kernel32.dll"
(ByVal hSnapshot As Long, Uprocess As PROCESSENTRY32) As Long
Private Declare
Function Process32Next Lib "kernel32.dll" (ByVal hSnapshot As Long, Uprocess As
PROCESSENTRY32) As Long
Private Declare Function CloseHandle Lib
"kernel32.dll" (ByVal hObject As Long) As Long
Dim
hSnap As Long, pResult As Long, Process As PROCESSENTRY32
hSnap =
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
Process.dwSize =
Len(Process)
pResult = Process32First(hSnap, Process)
Do While
pResult <> 0
List1.AddItem Left$(Process.szExeFile, InStr(1,
Process.szExeFile, Chr(0)) - 1) & " : " & Process.th32ProcessID
pResult = Process32Next(hSnap, Process)
Loop
CloseHandle
hSnap
End Sub
بعدی اینكه از نام فایل اون مقدار مورد نظر رو كه میخواهیم جدا كنیم و
كاراكتر های (0) رو از اسم فایل جدا كنیم از Left و Instr استفاده كردیم .مثل كاری
كه توی پست قبلی توضیح دادم.(قبلا از Replace استفاده میكردم اما تابلوه كه این
روش سرعتش بیشتره)
الان روش بستن Process به همین روش رو توضیح میدم بعد میرم سراغ
بدست آوردن مسیر...
حالا میخواهیم یه برنامه
بنوسیم كه هرچی برنامه ی NotePad كه در حال اجراس رو ببنده.(یا هر فایلی كه اسمش
notepad.exe باشه ) :
Private
Const TH32CS_SNAPPROCESS = &H2
Private Const PROCESS_ALL_ACCESS =
&H1F0FFF
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As
Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID
As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String *
MAX_PATH
End Type
Private Declare Function CreateToolhelp32Snapshot Lib
"kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long,
ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private
Declare Function Process32First Lib "kernel32.dll" (ByVal hSnapshot As Long,
Uprocess As PROCESSENTRY32) As Long
Private Declare Function Process32Next
Lib "kernel32.dll" (ByVal hSnapshot As Long, Uprocess As PROCESSENTRY32) As
Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject
As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32"
(ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Sub
Command1_Click()
Dim hSnap As Long, pResult As Long, Process As
PROCESSENTRY32
Dim AppName As String, pID As Long, hProcess As
Long
Process.dwSize =
Len(Process)
pResult = Process32First(hSnap, Process)
Do While
pResult <> 0
AppName = Left$(Process.szExeFile, InStr(1,
Process.szExeFile, Chr(0)) – 1)
If StrComp(AppName, "notepad.exe",
vbTextCompare) = 0 Then 'file name = notepad.exe ?
pID =
Process.th32ProcessID
hProcess = OpenProcess(PROCESS_ALL_ACCESS,
True, pID)
TerminateProcess hProcess, 0
CloseHandle hProcess
End If
pResult = Process32Next(hSnap,
Process)
Loop
CloseHandle hSnap
End Sub
اگه یادتون
باشه واسه بدست آوردن یك لیست از كل Process ها وقتی از تابع
CreateToolhelp32Snapshot استفاده كردیم آرگومان اول رو TH32CS_SNAPPROCESS قرار
دادیم و چون با Process خاصی كار نداشتیم آرگومان دوم رو 0 گذاشتیم.برای اینكه
بتونیم اطلاعات دیگه ای از Process ها مانند اطلاعاتModule هایی(dll ها ocx ها
و ...) كه Process داره ازشون استفاده میكنه (و مسیر كامل فایل كه این هم خودش آدرس
یكی از همون Module هاست) رو بدست بیاریم باید روی یك Process تمركز كنیم و مثل
دفعه قبل نیست كه با یك حلقه اطلاعاتی رو در مورد همه ی Process ها بدست
بیاریم.برای این كار بعد از بدست آوردن آیدی هر Process ،آرگومان اول تابع رو
Private Const TH32CS_SNAPMODULE = &H8 قرار میدیم و آرگومان دوم رو هم آیدی
اون رو.
حالا به جای استفاده از Process32First و Process32Next از
Module32First و Module32Next استفاده میكنیم:
Private Declare Function
Module32First Lib "kernel32" (ByVal hSnapshot As Long, uProcess As
MODULEENTRY32) As Long
Private Declare Function Module32Next Lib "kernel32"
(ByVal hSnapshot As Long, uProcess As MODULEENTRY32) As Long
Private
Type MODULEENTRY32
dwSize As Long
th32ModuleID As Long
th32ProcessID As Long
GlblcntUsage As Long
ProccntUsage As Long
modBaseAddr As Long
modBaseSize As Long
hModule As Long
szModule
As String * 256
szExePath As String * MAX_PATH
End Type
كد
ما برای بدست آوردن آدرس همه ی فایل های در حال اجرا اینطوری میشه :
Private Const
MAX_PATH = 260
Private Const TH32CS_SNAPPROCESS = &H2
Private Const
TH32CS_SNAPMODULE = &H8
Private Type PROCESSENTRY32
dwSize As
Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As
Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID
As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As
String * MAX_PATH
End Type
Private Type MODULEENTRY32
dwSize As
Long
th32ModuleID As Long
th32ProcessID As Long
GlblcntUsage As
Long
ProccntUsage As Long
modBaseAddr As Long
modBaseSize As
Long
hModule As Long
szModule As String * 256
szExePath As String
* 260
End Type
Private Declare Function Module32First Lib "kernel32"
(ByVal hSnapshot As Long, uProcess As MODULEENTRY32) As Long
Private Declare
Function Module32Next Lib "kernel32" (ByVal hSnapshot As Long, uProcess As
MODULEENTRY32) As Long
Private Declare Function CreateToolhelp32Snapshot Lib
"kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private
Declare Function Process32First Lib "kernel32.dll" (ByVal hSnapshot As Long,
uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next
Lib "kernel32.dll" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As
Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject
As Long) As Long
Private Sub Command1_Click()
'Process :
Dim hSnap As
Long, pResult As Long, Process As PROCESSENTRY32
Dim pID As Long
'Module
:
Dim hSnapM As Long, Module As MODULEENTRY32
hSnap =
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0(
Process.dwSize =
Len(Process(
pResult = Process32First(hSnap, Process)
Do While
pResult <> 0
pID = Process.th32ProcessID
'
hSnapM
= CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pID)
Module.dwSize =
Len(Module)
Call Module32First(hSnapM, Module)
List1.AddItem Left$(Module.szExePath, InStr(1, Module.szExePath, Chr(0)) –
1)
CloseHandle hSnapM
'
pResult = Process32Next(hSnap,
Process)
Loop
CloseHandle hSnap
End Sub
بگذریم.حالا میخواهیم برنامه ای كه قبل از این نوشتیم رو با روش
جدیدی كه گفتم بنویسیم.یعنی بجای اینكه همه ی فایل هایی كه در حال اجرا هستن و
اسمشون notepad.exe هستش رو ببندیم همه ی اونهایی كه آدرسشون
c:\windows\systtem32\notepad.exe هست رو ببندیم.كدمون چیز جدیدی نداره :
Private Const
MAX_PATH = 260
Private Const TH32CS_SNAPPROCESS = &H2
Private Const
TH32CS_SNAPMODULE = &H8
Private Const PROCESS_ALL_ACCESS =
&H1F0FFF
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As
Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID
As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String *
MAX_PATH
End Type
Private Type MODULEENTRY32
dwSize As Long
th32ModuleID As Long
th32ProcessID As Long
GlblcntUsage As Long
ProccntUsage As Long
modBaseAddr As Long
modBaseSize As Long
hModule As Long
szModule As String * 256
szExePath As String *
260
End Type
Private Declare Function Module32First Lib "kernel32" (ByVal
hSnapshot As Long, uProcess As MODULEENTRY32) As Long
Private Declare
Function Module32Next Lib "kernel32" (ByVal hSnapshot As Long, uProcess As
MODULEENTRY32) As Long
Private Declare Function CreateToolhelp32Snapshot Lib
"kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long,
ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private
Declare Function Process32First Lib "kernel32.dll" (ByVal hSnapshot As Long,
uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next
Lib "kernel32.dll" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As
Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject
As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32"
(ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Sub
Command1_Click()
'Process :
Dim hSnap As Long, pResult As Long, Process As
PROCESSENTRY32
Dim pID As Long, hProcess As Long, appPath As
String
'Module :
Dim hSnapM As Long, Module As MODULEENTRY32
hSnap
= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
Process.dwSize =
Len(Process)
pResult = Process32First(hSnap, Process)
Do While
pResult <> 0
pID = Process.th32ProcessID
'
hSnapM
= CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pID)
Module.dwSize =
Len(Modul(
Call Module32First(hSnapM, Module)
appPath =
Left$(Module.szExePath, InStr(1, Module.szExePath, Chr(0)) – 1)
If
StrComp(appPath, "c:\windows\system32\notepad.exe", vbTextCompare) = 0 Then
'file name = notepad.exe
pID =
Module.th32ProcessID
hProcess = OpenProcess(PROCESS_ALL_ACCESS,
True, pID)
TerminateProcess hProcess, 0
CloseHandle hProcess
End If
'
pResult = Process32Next(hSnap, Process)
Loop
CloseHandle hSnap
End Sub
برای تست برنامه فایل notepad.exe رو یكبار از پوشه ی سیستم یبار هم از
پوشه ی ویندوز باز كنین.برنامه رو اجرا كنین میبینین فقط اونی كه توی پوشه ی سیستم
هستش بسته میشه.
اینهایی كه تاحالا گفتم در مورد روش اول بدست آوردن ProcessID
بود.راه دیگش همونطور كه اول كار اشاره كردم استفاده از هندل یكی از پنجره های
برنامه هستش.با این روش مثلا میتونین برنامه ای كه موس روش هست رو ببندین.واسه این
كار از تابع GetWindowThreadProcessId استفاده میكنیم تا آیدیه Process رو بدست
بیاریم :
بعد از بدست آوردن آیدیه Process رو بدست آوردیم مثل قبل عمل میكنیم و
برنامه مورد نظر رو میبندیم.
میخواهیم برنامه ای بنوسیم كه وقتی روی یك دكمه
فشار داده میشه برنامه ای كه موس روشه بسته بشه.واسه این كار با تابع های
GetCursorPos و WindowFromPoint كه قبلا در موردشون گفتم(به آرشیو مراجعه كنین)
هندل پنجره ای كه موس روشه رو بدست میاریم و با روشی كه گفتم میبندیمش :
Private Declare
Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long,
lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib
"kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal
dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib
"kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function
TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As
Long) As Long
Private Declare Function WindowFromPoint Lib "user32" (ByVal
xPoint As Long, ByVal yPoint As Long) As Long
Private Type
POINTAPI
x As Long
y As Long
End Type
Private
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As
Long
Dim
wHandle As Long, PAPI As POINTAPI, pID As Long, hProcess As Long
GetCursorPos PAPI
wHandle = WindowFromPoint(PAPI.x, PAPI.y)
GetWindowThreadProcessId wHandle, pID
hProcess =
OpenProcess(PROCESS_ALL_ACCESS, True, pID)
TerminateProcess hProcess,
0
CloseHandle hProcess
End Sub
توی این كد چون باید موس روی برنامه ای باشه كه باید بسته بشه با خود موس
نمیتونین روی دكمه كلیك كنین چون برنامه ی خودتون بسته میشه!!! Focus رو بهش بدین و
با Enter كردن اونو فشار بدین!!!!! :پی
اول یه ماژول به پروژه اضافه کنید و این کد رو توش بنویسید این کد مربوط به تایمرتونه lblXpos.Caption = pt.x حالا موس رو هر جا ببرین مکانش یعنی شماره ستون و سطرش روی کپشن لیبل ها
نشون داده میشه
Declare Function
GetCursorPos& Lib "user32" (lpPoint As PointAPI)
Type PointAPI
x As Long
y As Long
End Type
حالا یه تایمر رو
فرم بزارین و خاصیت interval اون رو 10 قرار بدین
دوتا لیبل هم به نام های
lblXpos و lblYpos رو فرم بزارین
Private Sub Timer1_Timer()
Dim
dl&
Dim pt As PointAPI
dl& = GetCursorPos(pt)
lblYpos.Caption = pt.y
End Sub
آخرین پست ها