تبلیغات
آموزش پیشرفته ویژوال بیسیک
جمعه 10 اردیبهشت 1389  08:38 ب.ظ
نوع مطلب: (آموزش ،) توسط: Lopht

این هم یه پروپرتی Override شده برای سایه دار کردن فرم ها . زمانی که یه کنترل خواستید بسازید این تکه کد خیلی به دردتون میخوره.
Private Const CS_DROPSHADOW As Integer = 131072
    ' 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


  • آخرین ویرایش:-
جمعه 10 اردیبهشت 1389  09:02 ق.ظ
نوع مطلب: (آموزش ،) توسط: Lopht

Imports System.Diagnostics

For Each p As Process In Process.GetProcesses()

If p.ProcessName.ToLower() = "notepad" Then
p.Kill()
End If
Next


  • آخرین ویرایش:-
جمعه 10 اردیبهشت 1389  08:56 ق.ظ
نوع مطلب: (آموزش ،) توسط: Lopht

فارسی کردن صفحه کلید
System.Threading.Thread.CurrentThread.CurrentCultu re = New System.Globalization.CultureInfo("FA-IR")

انگلیسی کردن صفحه کلید
System.Threading.Thread.CurrentThread.CurrentCultu re = New System.Globalization.CultureInfo("en-US")


  • آخرین ویرایش:-
جمعه 10 اردیبهشت 1389  08:54 ق.ظ
نوع مطلب: (آموزش ،) توسط: Lopht

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


  • آخرین ویرایش:-
جمعه 10 اردیبهشت 1389  08:50 ق.ظ
نوع مطلب: (آموزش ،) توسط: Lopht

Visual Basic همواه خصوصیات و امکانات جدیدی به منظور توسعه سریع نرم­افزار که باعث بهبود بهره­وری، سهولت در استفاده و بالا بردن قدرت برنامه­نویسان می­شود، ارائه می­نماید. یکی از این امکانات My نام دارد. My امکان دسترسی به اطلاعاتی در مورد پروژه در حال اجرا و همچنین محیطی که پروژه در آن در حال اجرا می­باشد را فراهم می­سازد. مزیت مهم دیگر My در این است که به راحتی می­توان در قالب لیست­های پیشنهادی « IntelliSense » با امکانات آن کار کرد.
     بالاترین سطح My، توسط اشیائی نشان داده می­شود. هر کدام از این Objectها مانند یک فضانام و یا یک کلاس با اعضای Shared عمل می­نمایند. در جدول زیر اشیاء سطح اول My و ارتباطات داخلی آن­ها مشخص شده است:


اعضای 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 می­توان استفاده کرد.


  • آخرین ویرایش:-
جمعه 6 آذر 1388  08:55 ق.ظ
نوع مطلب: (آموزش ،) توسط: Lopht

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)


  • آخرین ویرایش:-
پنجشنبه 16 مهر 1388  08:04 ب.ظ

سلام دوستان راستش می خواستم یه آموزش درست و حسابی و کامل درباره کار با Winsock2005DLL بزارم اما گفتم اول تو سایت بنویسم ببینم اصلا کسی به یه همچین آموزشی نیاز داره یا نه اگه دیدم داره منم سعی میکنم یه مقاله درست و حسابی در آینده بزارم
دمتون گرم خدانگهدار


  • آخرین ویرایش:-
پنجشنبه 16 مهر 1388  08:02 ب.ظ
نوع مطلب: (آموزش ،) توسط: Lopht

تو این پست یه مطلب بدرد بخور که از سایت برنامه نویس گرفتم رو واستون میذارم امیدوارم که لازمتون نشه!

 

در صورتی که بخواهید بدون فشردن یک کلید از کیبورد کاری کنید که یک کلید خاص فشرده بشه میتونید از این دستور به صورت زیر استفاده میکنید :
((
دقت کنید که هیچ تفاوتی بین فشردن یک کلید رو کیبورد و دستور sendkeys وجود نداره))

کد:

SendKeys String[,wait]

String : رشته ای که در واقع همون نویسه هایی هست که باید به عنوان کلید ارسال بشن
Wait : پارامتری منطقی است. اگر روی False تنظیم بشه (پیش فرض) ، روال اجرا کننده دستور Sendkeys بلافاصله بعد از ارسال نویسه ها مجددا کنترل برنامه رو در دست میگیره و به کار خودش ادامه میده. اما اگه رو True تنظیم بشه سیستم تا پردازش کامل نویسه ها ، کنترل رو به روال اجرا کننده ی دستور Sendkeys باز پس نمیده

توجه کنید که برای ارسال نویسه های خاص (~ , { , } , % , ( , ) , - , + , ^) باید اونا رو داخل {} قرار بدیم
به عنوال مثال :

کد:

SendKyes "+ {+} 4 {*} 6

کلیدهای ویژه در دستور Sendkeys :

  1. کلید TAB : معادل {TAB}
  2. کلید UP ARROW : معادل {UP}
  3. کلید F1 : معادل {F1}
  4. کلید F2 : معادل {F2}
  5. کلید F3 : معادل {F3}
  6. کلید F4 : معادل {F4}
  7. کلید F5 : معادل {F5}
  8. کلید F6 : معادل {F6}
  9. کلید F7 : معادل {F7}
  10. کلید F8 : معادل {F8}
  11. کلید F9 : معادل {F9}
  12. کلید F10 : معادل {F10}
  13. کلید F11 : معادل {F11}
  14. کلید F12 : معادل {F12}
  15. کلید F13 : معادل {F13}
  16. کلید F14 : معادل {F14}
  17. کلید F15 : معادل {F15}
  18. کلید F16 : معادل {F16}
  19. کلید BACKSPACE: معادل {BACKSPACE} یا {BS} یا {BKSP}
  20. کلید BREAK : معادل {BREAK}
  21. کلید CAPS LOCK : معادل {CAPSLOCK}
  22. کلید DELETE یا DEL : معادل {DELETE} یا {DEL}
  23. کلید DOWN ARROW : معادل {DOWN}
  24. کلید END : معادل {END}
  25. کلید ENTER : معادل {ENTER} یا {~}
  26. کلید ESC : معادل {ESC}
  27. کلید HELP : معادل {HELP}
  28. کلید HOME : معادل {HOME}
  29. کلید INS یا INSERT : معادل {INSERT} یا {INS}
  30. کلید LEFT ARROW : معادل {LEFT}
  31. کلید NUM LOCK : معادل {NUMLOCK}
  32. کلید PAGE DOWN : معادل {PGDN}
  33. کلید PAGE UP : معادل {PGUP}
  34. کلید PRINT SCREEN : معادل {PRTSC}
  35. کلید RIGHT ARROW : معادل {RIGHT}
  36. کلید SCROLL LOCK : معادل {SCROLLLOCK}

توجه کنید که تنها کلیدی که نمیتونیم اون رو به برنامه ها بفرستیم ، کلید Print Screen هست (شماره ی 34)
برای استفاده از کلید های Alt , Ctrl , Shift همون طور که آقای غفوری گفتند میتونید از معادل های زیر استفاده کنید

  1. کلید Shift : معادل {+}
  2. کلید Ctrl : معادل {^}
  3. کلید Alt : معادل {%}

به عنوان مثال :

کد:

Sendkeys "+(ES)"

یعنی فشردن کلید Shift به همراه کلید های E , S

کد:

 Sendkeys "+ES"

یعنی فشرن کلید Shift به همراه E و پس از رها کردن ، فشردن کلید S است

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

کد:

SendKeys "{key num}"

که در اینجا key کلیدی است که میخواهید به برنامه بفرستید و num تعداد تکرار آن کلید هست
با تشکر


  • آخرین ویرایش:-
پنجشنبه 16 مهر 1388  07:59 ب.ظ
نوع مطلب: (آموزش ،) توسط: Lopht

با سلام خدمت دوسوی گلم حالتون خوفه الحمد الله که خوبید

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

 

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

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

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


  • آخرین ویرایش:-
سه شنبه 14 مهر 1388  01:52 ب.ظ
نوع مطلب: (آموزش ،) توسط: Lopht

 

اجرا کردن یک فایل اجرایی با کدنویسی

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


  • آخرین ویرایش:-
سه شنبه 14 مهر 1388  01:47 ب.ظ
نوع مطلب: (آموزش ،) توسط: Lopht

سلام خدمت دوستان خودم

پس از یه مدت طولانی آپ نکردن تصمیم گرفتن از این به بعد درباره ویژوال بیسیک 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




  • آخرین ویرایش:-
یکشنبه 24 خرداد 1388  05:26 ق.ظ
نوع مطلب: (آموزش ،) توسط: Lopht

به فرمتون اضافه کنین وکدای زیررو وارد برنامتون کنین: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


  • آخرین ویرایش:-
یکشنبه 24 خرداد 1388  05:23 ق.ظ
نوع مطلب: (آموزش ،) توسط: Lopht

این برنامه نشان میدهد كه با ویژوال بیسیك می توان به قسمت ریجستری ویندوز وارد شد و تغییرات دلخواه را انجام داد
دو تا كامند به فرمتون اضافه كنید و نام یكی را cmdshowو دیگری را Cmdhideبگذارید
یك listBoxبه فرمتون اضافه كنید و خاصیت Styleآن را از Standard به ‍CheckBox تغییر دهید
در آخر یك DriveListBox به فرمتون اضاف كنید و كد زیر را در برنامه تان قرار دهید

'---------------------------------------'

'   http://www.AGK.Blogfa.com      '

'---------------------------------------'
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_SUCCESS = 0&
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

منبعش رو هم پاک نکردم


  • آخرین ویرایش:-
یکشنبه 24 خرداد 1388  05:16 ق.ظ
نوع مطلب: (آموزش ،) توسط: Lopht

سلام.

امروز میخوام در مورد كار با Process ها یكم بنویسم.مخصوصن در مورد بستن Process برنامه ها.

واسه بستن  Processیه فایل اجرایی(طبق این راهی كه من بلدم) :
اول باید آیدی اون Process رو بدست بیاریم.
بعد باید با تابع OpenProcess یه هندل از اون Process بدست بیاریم.
بعد با تابع TerminateProcess اون رو ببندیم .

واسه بدست آوردن آیدی Process با توجه به اطلاعاتی كه ما از اون برنامه داریم چند تا راه هست كه من 2 تاشو میگم.
یكیش با استفاده از اسم یا مسیر اون فایلی كه در حال اجراست.
یكیش با استفاده از داشتن هندل یكی از پنجره های اون برنامه.

توی راه اول ما با 3 تا تابع لیست Process ها و آیدی اونها رو بدست میاریم.هر كدوم اسمش با اسم مورد نظر ما یكی بود از آیدیش استفاده میكنیم و اون رو میبندیم.

فعلا همینو میگم بعد میرم سراغ راه بعدی.
واسه ی كاری كه گفتم اول باید با تابع CreateToolhelp32Snapshot (كه واسه بدست آوردن لیست Process ها و یا heap  ها ، Module  ها و... ی  Process بكار میره) یه هندل لیست از   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
Private Declare Function Process32Next Lib "kernel32.dll" (ByVal hSnapshot As Long, Uprocess As PROCESSENTRY32) As Long

البته این روش تا این مرحله فقط اسم فایل رو به ما میده مثل (notepad.exe) نه آدرس كامل اون رو كه در مورد بدست آوردن آدرس كامل هم توضیح میدم.


آرگومان اول تابع CreateToolhelp32Snapshot بستگی به لیستی كه میخواهیم بدست بیاریم داره كه ما اینجا چون میخواهیم لیست همه ی Process های سیستم رو بدست بیاریم اون رو Private Const TH32CS_SNAPPROCESS = &H2 میگذاریم.

آرگومان بعدی هم  آیدی Process یه كه میخواهیم در موردش اطلاعات بدست بیاریم كه چون ما اینجا نمیخواهیم  اطلاعاتی (لیست Module  ها و ...) در مورد Process خاصی بدست بیاریم (چون هنوز IDیی نداریم) و فعلا میخواهیم خود لیست Process ها رو بدست بیاریم و آرگومان اول رو هم TH32CS_SNAPPROCESS قرار دادیم اینجا هرچی بگذاریم فرقی نداره. آرگومان دوم برای وقتیه كه آرگومان اول رو چیز دیگه ای بغیر از اینی كه ما الان گذشتیم بگذاریم...(فكر كنم زیادی توضیح دادم!!!!)

حالا برای شروع بدست آوردن اطلاعات مورد نظرمون از Process32First استفاده میكنیم.آرگومان اول هندلیه كه با تابع قبلی بدست آوردیم.بعدی یه متغیر از نوع PROCESSENTRY32 هستش كه تابع اطلاعات مورد نظر رو توی این قرار میده:

CONST MAX_PATH = 260
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

توی این  szExeFile ٬Type  اسم فایل ، th32ProcessID هم همون آیدی مورد نظرمونه.با بقیش هم همونطور كه گفتم كاری نداریم.
(آرگومان های تابع Process3Next هم طبعا مثل Process32First هستش.)
بعد با یك حلقه تا زمانی كه مقدار برگشتی تابع Process32Next  صفر نباشه به فراخوانی این تابع ادامه میدیم و توی هر بار فراخوانی اطلاعات یكی از Process ها رو بدست میاریم.(وقتی كه تابع صفر برگردونه یعنی به انتهای لیست رسیدیم)
بعد از بدست آوردن اطلاعات مورد نظر باید هندلی كه با تابع CreateToolhelp32Snapshot بدست آوردیم رو ببندیم :

Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long

خوب میریم سراغ كد :

Private Const MAX_PATH = 260
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
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()
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

همه چیزه این كد رو به غیر از 2 چیز كوچیك توضیح دادم.یكی ایكنه برای اینكه میخواهیم متغیر Process  كه از نوع  PROCESSENTRY32 هستش رو به تابع ارسال كنیم باید طولش رو توی عضو .dwSize اون قرار بدیم.(این موضوع فقط مال این تابع و این نوع نیست...)
بعدی اینكه  از نام فایل اون مقدار مورد نظر رو كه میخواهیم جدا كنیم و كاراكتر های (0) رو از اسم فایل جدا كنیم از Left  و Instr استفاده كردیم .مثل كاری كه توی پست قبلی توضیح دادم.(قبلا از Replace  استفاده میكردم اما تابلوه كه این روش سرعتش بیشتره)

خوب تا اینجا فعلا لیست اسم ها و آیدی Process ها رو بدست آوردیم.با این روش و با تابعی كه میگم میتونیم  برنامه  ای اسم فایل اجراییش رو داشته باشیم ببندیم.اما چون ممكنه فایل اجرایی 2 تا برنامه ی جدا 1 اسم داشته باشن میتونه مشكل پیش بیاد و بهتره با استفاده از مسیر فایل ها كارمون رو انجام بدیم كه هنوز روش بدست آوردن مسیر رو نگفتم.
الان روش بستن Process به همین روش رو توضیح میدم بعد میرم سراغ بدست آوردن مسیر...

همونطور كه اول گفتم باید با 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 قرار بدین.
حالا میخواهیم یه برنامه بنوسیم كه هرچی برنامه ی NotePad كه در حال اجراس رو ببنده.(یا هر فایلی كه اسمش notepad.exe باشه ) :

Private Const MAX_PATH = 260
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

    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
    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 رو بستیم هندل رو هم  با CloseHandle میبندیم.

خوب حالا میاییم سراغ بدست آوردن آدرس كامل فایل های در حال اجرا.
اگه یادتون باشه واسه بدست آوردن یك لیست از كل 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

آرگومان اول كه میدونین چیه.دومی یه متغیر از نوع  MODULEENTRY32 هستش كه اطلاعات Module ها توش قرار میگیره:

Private Const MAX_PATH = 260
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

اونی كه ما باش كار داریم szExePath هستش كه مسیر اون Module  هستش چون فایلی كه ما میخواهیم آدرسش رو بدست بیاریم هم یكی از همین Module  هاست(اولین Module كه توسط تابع Module32First  برگردونه میشه) بنابر این آدرس همون آدرسیه كه ما دنبالشیم.البته szModule  هم فقط اسم Module هستش(بدون مسیر)

چون ما اینجا فقط میخوایم آدرس اولین Module كه همون آدرس فایل Exe هستش رو بدست بیاریم و با بقیه  Module  ها كاری نداریم دیگه واسه Module  ها از حلقه استفاده نمیكنیم.شما اگه خواستین این كار رو بكنین فرم كار مثل كد قبیلیه كه گذشتم.
كد ما برای بدست آوردن آدرس همه ی فایل های در حال اجرا اینطوری میشه :

Option Explicit
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

 

البته با این روش به دلیلی كه نمیدونم آدرس كامل یكسری از فایل ها كه تا اونجایی كه چك كردم Process  اون ها از نوع System  بود و آدرسون هم توی دایركتوریه سیستم(مثل svchost.exe) رو تابع برنمیگردونه و فقط اسم اون ها رو برمیگردونه!
بگذریم.حالا میخواهیم برنامه ای كه قبل از این نوشتیم رو با روش جدیدی كه گفتم بنویسیم.یعنی بجای اینكه همه ی فایل هایی كه در حال اجرا هستن و اسمشون notepad.exe هستش رو ببندیم همه ی اونهایی كه آدرسشون c:\windows\systtem32\notepad.exe هست رو ببندیم.كدمون چیز جدیدی نداره :

Option Explicit
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

        CloseHandle hSnapM
'
        pResult = Process32Next(hSnap, Process)
       
    Loop
    CloseHandle hSnap
End Sub


برای تست برنامه فایل notepad.exe رو یكبار از پوشه ی سیستم یبار  هم  از پوشه ی ویندوز باز كنین.برنامه رو اجرا كنین میبینین فقط اونی كه توی پوشه ی سیستم هستش بسته میشه.
اینهایی كه تاحالا گفتم در مورد روش اول بدست آوردن ProcessID بود.راه دیگش همونطور كه اول كار اشاره كردم استفاده از هندل یكی از پنجره های برنامه هستش.با این روش مثلا میتونین برنامه ای كه موس روش هست رو ببندین.واسه این كار از تابع GetWindowThreadProcessId  استفاده میكنیم تا آیدیه Process  رو بدست بیاریم :

Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long

آرگومان اول هندل مورد نظر هست.دومی هم یك متغیر از نوع Long  كه تابع آیدیه Process رو توش قرار میده .(مقدار برگشتی هم آیدیه Thread هستش كه كاری باش نداریم) 
بعد از بدست آوردن آیدیه Process رو بدست آوردیم مثل قبل عمل میكنیم و برنامه مورد نظر رو میبندیم.
میخواهیم برنامه ای بنوسیم كه وقتی روی یك دكمه فشار داده میشه برنامه ای كه موس روشه بسته بشه.واسه این كار با تابع های GetCursorPos و WindowFromPoint كه قبلا در موردشون گفتم(به آرشیو مراجعه كنین) هندل پنجره ای كه موس روشه رو بدست میاریم و با روشی كه گفتم میبندیمش :

Option Explicit
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

Private Sub Command1_Click()
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 كردن اونو فشار بدین!!!!!  :پی

توی این پست روش هایی واسه بستن Processبرنامه ها  رو گفتم.هدف من از گفتن این مطلب ها فقط راه بستن Process نبود..با بدست آوردن ProcessID كارهای زیادی در مورد Process ها و Thread ها و .. میشه كرد كه اینجا 2 تا روش برای این كار گفتم...اگه حوصلشو داشتم بازم در مورد Process ها و مخصوصن خوندن memory برنامه ها كه یكی از استفاده های باحالش بدست آوردن پسورد یاهو مسنجر (یا برنامه های مشابه) هستش مطلب مینویسم(<مثل قبلی ها كه گفتی و ننوشتی؟؟؟:پی)

خوش باشید...ما كه نیستیم.

دوستان واسه نظر هم دکمه پایین سمت راست رو بزنید


  • آخرین ویرایش:-
یکشنبه 24 خرداد 1388  05:12 ق.ظ
نوع مطلب: (آموزش ،) توسط: Lopht

اول یه ماژول به پروژه اضافه کنید و این کد رو توش بنویسید
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)

    lblXpos.Caption = pt.x
    lblYpos.Caption = pt.y
   
End Sub

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


  • آخرین ویرایش:-
  • تعداد کل صفحات :3  
  • 1  
  • 2  
  • 3