1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

سورس های کاربردی و پیشرفته

شروع موضوع توسط hector2141 ‏28/9/12 در انجمن Visual Basic

  1. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,318
    تشکر شده:
    2,702
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : سورس های کاربردی و پیشرفته

    توسط این سورس کد می توانید از صفحه دسکتاب خودتان فیلم بگیرید.


    کد PHP:
    Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
    Private Declare Function GetDesktopWindow Lib "user32" () As Long
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

    Private Sub Form_Load()
    AutoRedraw = True
    End Sub

    Private Sub Timer1_Timer()
    Dim handel, DC As Long
    handel
    = GetDesktopWindow
    DC
    = GetDC(handel)
    StretchBlt Me.hdc, 0, 0, Width, Height, DC, 0, 0, Screen.Width, Screen.Height, vbSrcCopy
    Refresh
    End Sub
     
  2. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,318
    تشکر شده:
    2,702
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : سورس های کاربردی و پیشرفته

    برنامه تان کل سیستم را به هنگ می اندازد؟

    در وی بی یک تابع به نام Doevents موجود می باشد که اگر برنامه شما حتی هنگ کند سیستم عامل در نهایت سلامت(بدون هنگ کردن) کار میکند و خیلی راحت برای کاربران این امکان وجود دارد که برنامه هنگ کرده شما را ببندند .چه خوب نه؟

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

    نحوه کار به صورتی است که مثلا در یک حلقه پردازشگر کارها را یکی پس از دیگری انجام می دهد و وقتی به این تابع رسید مروری بر فرمان هایی که به سیستم عامل داده شده است را اجرا میکند(به کارهای سیستم عامل رسیدگی می کند) که این سیستم مانع از هنگ کردن سیستم عامل می شود.


    12- کپی اطلاعات به کلیپ برد و استخراج اطلاعات از آن


    با تابع settext از شی clipboard می توان یک رشته به کلیپ برد خالی کپی کرد به صورت زیر:

    Clipboard.SetText "salam"

    *نکته: برای کپی یک متن باید حتما کلیپ برد ویندوز شما خالی باشد.


    با تابع gettext از شی clipboard می توان به اطلاعات داخل کلیپ برد دسترسی پیدا کرد


    mohsen = Clipboard.GetText

    MsgBox mohsen, vbInformation


    برای خالی کردن کلیپ برد به این صورت عمل کنید.

    Clipboard.Clear
     
  3. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,318
    تشکر شده:
    2,702
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : سورس های کاربردی و پیشرفته

    مثالی از کاربرد کد :

    میتونید کاری کنید که توی پروژه شما وقتی روی یک Label کلید کردن قابلیت جابجایی صفحه اجرا

    بشه !!!

    کد PHP:
    API های زیر را از API Viewer ویژوال بیسیک بازخوانی کنید !

    SendMessage + ReleaseCapture



    کد زیر رو تو قابلیت MouseDown در Label قرار بدید
    !

    MousePointer = 15

    Call ReleaseCapture

    (&Call SendMessage(hWnd,&HA1,2,0
    MousePointer
    = 1
     
  4. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,318
    تشکر شده:
    2,702
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : سورس های کاربردی و پیشرفته

    تبدیل تاریخ سیستم به هجری شمسی



    کد PHP:
    Function mil2shams(miladi_mm_dd_yyyy As String) As String
    Dim iran
    (12), CHRIS(12)
    CHRIS(1) = 31: CHRIS(2) = 28: CHRIS(3) = 31
    CHRIS
    (4) = 30: CHRIS(5) = 31: CHRIS(6) = 30
    CHRIS
    (7) = 31: CHRIS(8) = 31: CHRIS(9) = 30
    CHRIS
    (10) = 31: CHRIS(11) = 30: CHRIS(12) = 31
    For i = 1 To 12: iran(i) = 31 - (i \ 7) - (i \ 12): Next
    mo
    = Val(Left(miladi_mm_dd_yyyy, 2))
    miladi_mm_dd_yyyyy1 = Val(Mid(miladi_mm_dd_yyyy, 4, 2))
    Year1 = Val(Mid(miladi_mm_dd_yyyy, 7, 4))
    leap1 = Int((Year1 - 1) / 400)
    leap2 = Year1 - 1 - 400 * leap1
    leap3
    = leap2 \ 100
    leap4
    = leap2 Mod 100
    leap5
    = leap4 \ 4
    CHRIS
    (2) = 28
    If ((Year1 Mod 4) = 0 And (Year1 Mod 100) <> 0) Or _
    (Year1 Mod 400) = 0 Then CHRIS(2) = 29
    miladi_mm_dd_yyyyy11
    = miladi_mm_dd_yyyyy1
    For i = 1 To mo - 1
    miladi_mm_dd_yyyyy11
    = miladi_mm_dd_yyyyy11 + CHRIS(i)
    Next i
    miladi_mm_dd_yyyyy1num
    = 365 * (Year1 - 1) + _
    miladi_mm_dd_yyyyy11
    + 97 * leap1 + 24 * leap3 + leap5
    miladi_mm_dd_yyyyy1num
    = miladi_mm_dd_yyyyy1num - 221056!
    iry1 = Int(miladi_mm_dd_yyyyy1num / 12053)
    iry2 = miladi_mm_dd_yyyyy1num - 12053 * iry1
    iry
    = 33 * iry1 - 16
    If iry2 > 365 Then iry = iry + 1: iry2 = iry2 - 365
    iry3
    = iry2 \ 1461
    iry4
    = iry2 Mod 1461
    iry5
    = iry4 \ 365
    iry6
    = iry4 Mod 365
    iry
    = iry + 1 + 4 * iry3 + iry5
    iran
    (12) = 29
    esfand
    = (8 * iry + 22) / 33 - 0.001
    esfand
    = esfand - Int(esfand)
    If
    esfand > 0.77 Then iran(12) = 30
    For i = 1 To 12
    If iry6 > iran(i) Then iry6 = iry6 - iran(i) _
    Else irm = i: miladi_mm_dd_yyyyy11 = iry6: Exit For
    Next i
    miladi_mm_dd_yyyyy11
    = miladi_mm_dd_yyyyy11 + 5
     
  5. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,318
    تشکر شده:
    2,702
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : سورس های کاربردی و پیشرفته

    ساختن فایل در وی بی


    تا حالا شده دوست داشته با شین که برنامه تون یک مقدار رو توی یک فایل ذخیره کنه ؟

    خب اگه دوشت دارین با ما همراه بشین...

    ابتدا باید فایل را با روش خاصی و با شماره منحصر بفردی باز کرد تا با توابع دیگر بتوان بر روی آن اطلاعاتی نوشت.

    Open "c:\s.txt" for binary as 1

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


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

    Put #1,1,"salam"


    بعضی مواقع هم می خواهیم اطلاعات نوشته شده در فایل را بخوانیم که به صورت زیر است


    Open "c:\s.txt" For Binary As 1

    Input #1, sa


    MsgBox sa

    این فایل باز شد و اطلاعان خط اول آن در متغیر سا ذخیره شد


    حالا نوبت به بستن فایل است

    Close #1
     
  6. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,318
    تشکر شده:
    2,702
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : سورس های کاربردی و پیشرفته

    چگونه یک عدد صد رقمی را در سه رقمی با استفاده از آرایه ها ضرب کنیم.

    در حالت عادی ضرب عددی صد رقمی در سه رقمی باعث ایجاد خطای Over Flow می گردد. جهت برطرف نمودن این مشکل ما از الگوریتم زیر استفاده می نمائیم.
    ابتدا باید عدد 100 رقمی و 3 رقمی گرفته شود سپس ارقام آن به طور جداگانه در خانه های آرایه قرار گیرد. سپس عملیات ضرب را آغاز می کنیم.
    کد PHP:
    Option Base 1 ' باعث می شود اندیس آرایه از یک شروع شود
    F=false
    Help2[1]=0
    Help3[1]=0
    Help3[2]=0
    I=0
    Temp=Val(InputBox("Enter First Number: ")) '
    عدد صد رقمی را وارد کنید
    Do While temp>0
    I
    =i+1
    Hundred
    [i]=Temp mod 10
    Help2[j+1]=Temp mod 10
    Sec=Temp\10
    Overf=true
    Else if (Temp>9) and (j=i) then
    Help2[j+1]=Temp mod 10
    Help2[j+2]=Temp\10
    Overf=False
    Else
    Help2[j+1]=Temp
    End If
    Case 3:
    If (Temp>9) and (j< SPAN>
    Help3[j+2]=Temp mod 10
    Sec=Temp\10
    Overf=True
    Else if (Temp>9) And (j=i) then
    Help3[j+2]=Temp mod10
    Help3[j+3]=Temp\10
    Overf=False
    LP=J+3
    Else
    Help3[j+2]=Temp
    End if
    End Select
    Next j
    Next k
    For z=1 to LP
    If (overf=true) then
    Temp=(Help1[z]+Help2[z]+Help3[z])+Sec)
    Else
    Temp=(Help1[z]+Help2[z]+Help3[z])
    End if
    If (Temp>9) and (z=LP) then
    Final[z]=Temp mod 10
    Final[z+1]=Temp\10
    Else
    Final[z]=Temp
    Overf=False
    End if
    Next z

    Temp
    =Temp\10
    Loop
    Indx
    =0
    Temp
    =Val(InputBox("Enter Second Number: ")) 'عدد سه رقمی را وارد کنید
    Do While Indx<=3
    Indx=Indx+1
    Three[Indx]=Temp mod 10
    Temp=Temp\10
    Loop

    For k=1 to 3
    For j=1 to i
    If overf=true then
    Temp=(Three[k]*Hundred[j])+sec
    Overf=false
    Else:
    Temp=Three[k]*Hundred[j]
    End if
    Select case k
    Case 1:
    If (Temp>9) and (j
    Help1[j]=Temp mod 10
    Sec=temp\10
    Overf=True
    Else if (Temp>9) and (j=i) then
     
  7. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,318
    تشکر شده:
    2,702
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : سورس های کاربردی و پیشرفته

    تبدیل کد رنگ vb به html :
    ویژوال بیسیک کد رنگ را به صورت BBGGRR ذخیره می کند ؛ ما باید قالب رنگ را به RRGGBB# تبدیل کنیم ؛ یعنی جای کد رنگ قرمز با آبی باید عوض شود. تابع زیر اینکار را انجام می دهد:
    کد PHP:
    Function VB2HTMLColor(color As Long) As String
    Dim aux
    As String
    aux
    = Right("00000" & Hex(color), 6)
    VB2HTMLColor = "#" & Right(aux, 2) & Mid(aux, 3, 2) & Left(aux, 2)
    End Function
     
  8. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,318
    تشکر شده:
    2,702
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : سورس های کاربردی و پیشرفته

    دست آوردن IP و نام سيستم ميزبان

    برای امروز قصد دارم يک پروژه ساده را به شما معرفی کنم.

    شما ظرف چند دقيقه ميتوانيد اين پروژه را در ويژوال بيسيک بسازيد.

    ابتدا ويژوال بيسيک را باز کنيد سپس کنترلر های زير را روی فرم قرار دهيد :

    دو عدد TextBox و دو عدد WinSock

    حالا روی فرم دو بار کليک کرده و در رويداد لود فرم کدهای زير را وارد کنيد :

    کد PHP:
    Text1.Text = Winsock1.LocalIP
    Text2
    .Text = Winsock2.LocalHostName


    برنامه را اجرا کنيد . اين برنامه آی پی و پورت سيستم ميزبان را در اختيار شما قرار ميدهد.
    لازم به ذکر است بعدا که به مرحله ساخت اسب های تراوا رسيديم
    خدمت شما عرض خواهم کرد که کاربرد اين برنامه در هک سيستم قربانيان چيست
     
  9. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,318
    تشکر شده:
    2,702
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : سورس های کاربردی و پیشرفته

    انتقال اطلاعات از یک پایگاه به پایگاه داده دیگر :

    » شاید یکی دیگر از جنبه های برنامه نویسی پایگاه داده توانایی کپی کردن اطلاعات از پایگاه داده ای به پایگاه داده دیگر است که بیشترین کاربرد این عمل در پشتیبان گیری یا انتقال اطلاعات از جدول فرعی به جدول اصلی ( مادر ) مشخص می شود .

    » برای انجام این انتقال دو نوع روش وجود دارد. روش اول این است که ما اطلاعات را به صورت رکورد به رکورد از جدول فرعی خوانده و به صورت رکورد به رکورد در جدول اصلی قرار دهیم و مراقب باشیم که اطلاعات تکراری در این عملیات کپی نگردند ، که انجام کد نویسی برای این روش به نظر من کاری مشکل و دشوار است . روش دوم استفاده از دستورات SQL است که برای انجام چنین عملیاتی ایجاد شده اند و امکان انجام همه این کارها را در یک خط کد نویسی فراهم می نمایند . در این درس من می خواهم روش دوم را به شما عزیزان آموزش دهم .

    » برای مثال شما دو پایگاه داده با نام های mdb1 ( پایگاه داده مادر ) و mdb2 ( پایگاه داده فرعی ) که دارای ساختار یکسانی هستند را در نظر بگیرید . ما قصد داریم اطلاعات موجود در پایگاه داده فرعی را بر روی اطلاعات موجود در پایگاه داده مادر بیفزاییم . پس در این حالت اطلاعاتی باید از پایگاه داده فرعی یا رابط به پایگاه داده مادر کپی گردند که نظیری در پایگاه داده مادر ندارند تا به این صورت از ذخیره سازی داده های تکراری در پایگاه داده مادر جلوگیری شود .

    _ به دلیل این که انجام این کار در یک خط کد نویسی صورت می گیرد ما دیگر توانایی مراقبت از ورود داده های تکراری را نداریم . پس بهتر است که انجام این کار را هم بر عهده خود دستور قرار دهیم . به این صورت که اگر ما در پایگاه داده مادر فیلدی را به عنوان کلید قرار دهیم در هنگام انتقال داده ها این کلید به طور خودکار اجازه ورود داده های تکراری را نخواهد داد و فقط داده های کپی خواهند شد که در فیلد کلید نظیری ندارند . برای مثال شما دو پایگاه داده را به صورت زیر تنظیم نمایید :
    »
    پایگاه داده مادر ( mdb1 ) :

    --> یک جدول با نام
    Table1 دارای فیلد های زیر :

    >
    ID : از نوع عددی به عنوان کلید

    >
    Name : از نوع متن

    >
    Family : از نوع متن

    »
    پایگاه داده فرعی ( mdb2 ) :

    --> یک جدول با نام
    Table2 دارای فیلد های زیر :

    >
    ID : از نوع عدد

    >
    Name : از نوع متن

    >
    Family : از نوع متن


    » دستور :

    جدول فرعی SELECT _ FROM ' مسیر و نام جدول اصلی ' IN جدول اصلی INSERT INTO

    _در این دستور فقط مسیر و نام پایگاه داده مقصد ذکر می شود و پایگاه داده مبدا باید در اجرای برنامه گشوده شود . حال مثال را کامل می کنیم . ابتدا شما باید از دیالوگ References گزینه Microsoft DAO 3.51 Object Libraryرا تیک بزنید و کد زیر را در دکمه ای قرار دهید :
    ()Private Sub CmdCopy_Click
    Dim DBase AsDatabase

    Dim SQL As String

    (Set DBase = OpenDatabase(App.Path & "\mdb2.mdb", True, False

    " SQL = " INSERT INTO Table1 IN '" & App.Path & "\mdb1.mdb' SELECT * FROM Table2

    DBase.Execute SQL


    " vbInformation , " Copy Completed , "
    عمل انتقال اطلاعات با موفقیت به پایان رسید" Msgbox
     
  10. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,318
    تشکر شده:
    2,702
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : سورس های کاربردی و پیشرفته

    چگونه می توان هندل ( Handle ) یک Textbox را در یک پنجره بدست آورد ؟
    پاسخ : برای بدست آوردن هندل پنجره برنامه ای که هم اکنون باز است از تابع FindWindow استفاده کنید . نحوه declare کردن آن بصورت زیر است :
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    فرض کنید caption فرم برنامه مورد نظرتان در متغیر strWindowName قرار داشته باشد . با دستور زیر می توانید هندل پنجره آنرا بدست آورید :
    Dim hwndFound As Long
    hwndFound = FindWindow(vbNullString, strWindowName)
    نکته : برای پیدا کردن هندل پنجره برنامه ای که caption آنرا بطور دقیق نمی دانید می توانید از تابع FindWindowLike استفاده کنید .
    حال که هندل پنجره مورد نظرتان را استخراج کردید می توانید با استفاده از تابع FindWindowEx هندل اشیا موجود در آن پنجره را بدست آورید . نحوه declare کردن این تابع بصورت زیر است :
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    این تابع را بصورت زیر استفاده کنید :
    htextbox = FindWindowEx(hwndFound, ByVal 0&, "ThunderRT6TextBox", vbNullString)
    که ThunderRT6Textbox نام کلاس Rich Textbox ها در ویژوال بیسیک 6 است . دستور فوق هندل اولین Textbox موجود در پنجره را به شما بر می گرداند . برای بدست آوردن هندل سایر Textbox ها از حلقه زیر استفاده کنید :
    Dim lChild As Long
    Dim lLast As Long

    Do
    lLast = lChild
    lChild = FindWindowEx(lParent, lChild, "ThunderRT6Textbox", vbNullString)
    Loop While lChild