# Native Code > برنامه نویسی در 6 VB >  دانلود سورس برنامه نویسان

## saeedzx

سلام من تصمیم گرفتم هر روز یک سورس به اینم سایت اضافه کنم  :لبخند گشاده!: 

دوستان شما هم اگه سورس دارید بذارید در این قسمت

اولیش هست سورس چک کننده یاهو مسنجر :قلب: 



 :متفکر: دوستان در صورت موافق بودن شما من از همین لحظه 130 سورس را تضمین می کنم :متفکر:

----------


## saeedzx

با سلام امروز یک سورس زیبای مدیاپلیر با اسکین بسیار زیبا آوردم امیدوارم خوشتون بیاد

سلام دوستان گلم امروز یک جستجو گر خیلی بهال با امکان ردیابی پسوند هارو داره مثل :*.txt خیلی جالبه دانلود کنید

با سلام دوباره اومدم با یک سورس جالب  دانلودر بهش میگن خیلی جالبه سرعتش بالاست  :قهقهه: 

اینم سورس جدیدscroltext که متن از پایین به بالا حرکت می کنه ؟؟؟


 :قهقهه: سلام به دوستان گلم این یک سورس Source Dragon Remote که دارای 2 قسمت سرور و کلاینت تشکیل شده که شما هم میتونید با ریموت دستاب با اون ها اتصال بر قرار کنید :چشمک:

----------


## saeedzx

سورس برای اتصال به شبکه و فرستادن متن و یا همون PM  :کف کرده!: 

سورس پلیر AVI

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

یک کرنومتر خوب با ثانیه شمار و.....

ساختن اکونت در ویندوز

سورسی برای کپی گرفت هر فایلی در ویندوز

----------


## saeedzx

یک سورس زیبا برای نگه داشتن زمان

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

یک سورس ارسال کننده فکس که خیلی قشنگه

یک سورس آنتی ویروس ( بی نظیر )

یک اسکین بود با نام vbskpro2.ocx من 10 تا اسکین دیگههم بهش اضافه کردن بنگرید

PM سندر زیبا و حرفه ای

----------


## saeedzx

با سلام به دوستان گلم 
امروز یک سورس زیبا که قبلاً نوشته بود برای شما به ارمغان آورده ام 
سورس دیگری از نرم افزار ویدئوکلوپ که کارایی خوبی در آموزش زبان Vb دارد چون نکته ها و روش هایی زیادی در این سورس موجود است 


دانلود کنید

----------


## saeedzx

سورس Display Image در یاهو مسنجر

سورس زیبای افکت فرم Close effect

اینم یک سورس miclockersource   :بامزه: 

این OCX شطرنج که خیلی ها دونبالشن

----------


## saeedzx

سورس که هرچیزی که دوست داری می تنید روی sturt up قرار دهید

یک ResEditor حر فه ای حالشو ببرید

اینم یک سورس یاهو مسنجر


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

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

----------


## saeedzx

اینم Ocx های نرم افزار کلوپ که توشون نبود     :تشویق:  OCX  :تشویق:   اگه خوشتون اومد تشکر یادتون نره یا علی

----------


## alih110

> تو سايت يه ربات براي نظر دادن تو بلاگفا ديدم، ولي فايل اجرايي نداشت.
> براي همين اينجا گفتم.
> اگه اونو اينجا بزارين ممنون ميشم.


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

----------


## saeedzx

سلام دوست عزیز  bahman_akbarzadeh

اینم فایل ارسال نظر در بلگفا و همچنین جستجو گر وب

دانلود

----------


## saeedzx

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

برنامه فوق از دو بخش Tools و Spy-Ware تشکیل شده که با محیط بسیار ساده ای که در اختیار کاربر قرار میده کار کردن با برنامه رو بسیار آسان می کنه.

  Proccess Manager 



در این قسمت می تونید به اطلاعات کاملی در مورد پروسس ها  و برنامه های در حال اجرا دسترسی پیدا کنید و به وسیله امکاناتی که در اختیار دارید می تونید هر کدوم از پروسس ها رو کنترل کنید.



Service Manager



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

Internet History



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

Installed Programs 



  کلیه برنامه های نصب شده در ویندوز توی این قسمت قرار میگیره و به راحتی می تونید اونا رو از روی سیستم پاک کنید

System Settings 



کسانی که لازمه سیتمشون محدود باشه (مثل کافی نت ها) حتما این قسمت از برنامه به دردشون می خوره 

Port Manager



یه سری اطلاعات در مورد پورت ها رو می تونید در این قسمت به دست بیارید

Registry Editor



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

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

Multimedia Informations



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

Disks and Memory Informations



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

Network Properties



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

Video Properties



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

DirectX  Informations



وسایر اطلاعات مربوط به اون رو میشه مشاهده کرد Direct X در این قسمت مشخصات مربوط به 

CPU & APM Information



اطلاعات مربوط به پردازنده سیستم و همچنین اطلاعات مربوط به منبع تغذیه سیستم در این قسمت از برنامه قابل مشاهده است

Hardware  Properties



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



و اما بخشی از برنامه که خیلی ها دوسش دارن 

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



Yahoo Messenger



من خودم شخصا با این قسمت از برنامه کلی حال کردم 

در این قسمت از برنامه لیست تمامی آیدی هایی که بعد از اجرای این برنامه لوگین شدن رو به همراه رمز عبور و ساعت و تاریخ دقیق لوگین رو در اختیار شما قرار می ده

از دیگر خصوصیات از بخش نمایش Save بودن پسورد و Invisible بودن آیدی هنگام لوگین هستش.

بخش فوق از کلیه ورژن های یاهو مسنجر از جمله Yahoo 8.1 پشتیبانی می کنه 



Windows Messenger



خیلی کم پیش میاد کسی از Windows Messenger استفاده کنه ولی واسه بالا بردن قدرت برنامه و کامل کردن برنامه این بخش رو هم به برنامه اضافه کردم که می تونید کلیه آیدی های Windows Messenger رو به همراه کلمه عبور اونها و تاریخ وساعت دقیق اون رو مشاهده کنید.

Dialup Manager



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

در این قسمت تمام پسورد های Dialup به همراه سایر مشخصات اون نمایش داده میشه.

Trillian Messenger



Trillian Messenger هم یکی از مسنجر های خوبه که تمامی مسنجرهای دیگه (مثل یاهو مسنجر و ICQ و غیره ) رو در خودش جای داده!!!

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

Keylogger Manager



این آخرین بخش برنامه هستش که در موردش توضیح میدم.

توی این قسمت تمام کلید های فشرده شده توسط کاربر به همراه پنجره هایی که در اونها نمایش داده میشه به این صورت که با فعال کردن این قسمت و تنظیم اون در تایم دلخواه تمامی کلید ها رو ذخیره کنید!!!!



--------------------------------------------------------------------------------


Security Settings



Add On Startup : در صورت فعال کردن این بخش شما نیازی با اجرای مجدد برنامه بعد از ریستارت یا روشن شدن برنامه نخواهید داشت.

Hide After Run : بعد از فعال کردن این قسمت برنامه در صورت ریستارت و اجرای اتوماتیک به صورت مخفی به اجرا در میاد تا کسی متوجه کش رفتن پسوردهای اون نشه 

Enable Password Protection : اگه می خواین فقط خودتون از این برنامه استفاده کنین می تونید با انتخاب یک کلمه عبور اون رو فقط مختص به خودتون بکنید تا شخص دیگه ای غیر از شما نتونه از برنامه استفاده کنه 

Disable Password : با زدن این کلید و وارد کردن پسورد قبلی میتونید پسورد رو (در صورت وجود) از روی برنامه حذف کنید.

Security Mode : Security Mode یکی از منوهای برنامست که با استفاده از اون می تونید به صورت دستی برنامه رو در حال اجرا مخفی نگه دارید و با زدن کلید Ctrl+R اون رو دوباره به حالت اول برگردونید.



دانلود کنید اما  سورس ندارم

----------


## M_P_1374

توی یه پست ScrollText  رو آپلود کرده بودن 
من اونو پیشرفته ترشو درست کردم و اینجا میذارم
که خاصیت جابجایی نوشته به 3 سمت و امکان تغییر رنگ پس زمینه و سرعت جابجایی رو میشه توی این تنظیم کرد

----------


## saeedzx

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

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

اینم 2 تا سورس حسابداری و انبار داری زیبا که کار دوستان گلمه  :متعجب: 

اینم یک سورس ماشین حساب پیشرفته  :لبخند: 

این سورس اکونت سایز ویندوز xp کاملاً فارسی  :گیج: 

مژده اینم سورس VBDecompiler که خیلی ها دونبالشن  :متعجب: 

اینم یک سورس Chocolate_Mail که کارش خیلی جالبه  :قهقهه:

----------


## M_P_1374

یه سری از نرم افزارامو میذارم
-----------------------
MPs Digital Clock
یه ساعت دیجیتال قشنگ
-----------------------
M_Merlin Control
مثالی برای کنترل کاراکتر های ویندوز

----------


## M_P_1374

بازم هست
-----------------------
MPs Random Chracters
برای تولید کارکتر در بازه های مختلف
-----------------------
MPs Mouse Capturing
یکی از قابلیت ها نوع Variant
-----------------------
MPs Screen Savers
7-8 تا اسکرین سیور که از توابع ریاضی پیروی میکنن
-----------------------
در ضمن کاری داشتین میتونین روی من حساب کنین سعی میکنم تا اونجایی که عقلم جواب میده کمک کنم

----------


## sohrab o

کار با بارکد خوان 1

----------


## sohrab o

کار با بارکد خوان 2

----------


## sohrab o

تعدادی ProgressBar جالب و جدید

----------


## sohrab o

چند نوع Shape زیبا و مفید

----------


## sohrab o

چند نوع MsgBox زیبا

----------


## sohrab o

چند نمونه Button
نمیدونم تکراریه یا خیر؟!

----------


## sohrab o

و بالاخره این هم چند نمونه سورس OCX

----------


## MBG73

نمایش مقدار حافظه فیزیکی و مجازی با ویژوال بیسیک


این برنامه با استفاده از API مقدار حافظه فیزیکی و مجازی و ... را برایتان نمایش می ده .


  
(DOWNLOAD (22.1 KB

----------


## MBG73

جلوگیری از اجرای مجدد یک برنامه 
با استفاده از تيکه کد زير در فرم اصلي برنامه تان مي توانيد از اجراي مجدد برنامه جلوگيري کنيد . 

Private Sub Form_Load()
    If App.PrevInstance = True Then
       Dim Result As Integer
       Result = MsgBox("برنامه در حال اجراست", vbInformation, "Warnnig")
       Unload Me
    End If  
End Sub

----------


## saeedzx

با سلام این یک سورس توپ که یکی از دوستان در خواست کرده بود 
 سورس چت کردن تو فضای شبکه حتی اینترنت ( سرعت بالا ) با همراه اسکین بسیار زیبا


سلام دوست گرامی Abolfazl Hidden 
 من این سورس رو داشتم  ببین به دردت می خوره

                  سورس زیبای FindUserPassword برای پیدا کردن کلمه عبور ویندوز برای هر نوع کاربر در سیستم 
امکانات این سورس جستحو کردن با اعداد و حروف و علامت های (@,#,% ,....) که هم می توان هر حالت را به طور جداگانه جستجو کنیم و یا هر 3 مورد را همزمات 

دانلود
رمز عبور: www.jadougar.ir

بزرگترین بانک خطای مودم 
ADSL و ِ.......

----------


## saeedzx

*کنترل Internet Transfer - قسمت اول

*مقدمه : کنترل Internet Transfer نسبت به کنترل  WebBrowser که در روزهاي قبلي معرفي شد در سطح پايينتري قرار دارد . اين کنترل با  استفاده از دو پروتکل HTTP و FTP مي تواند داده ها را منتقل کند . اين کنترل  زمانيکه از پروتکل HTTP استفاده مي کند با همان روش کنترل WebBrowser به سرويس  دهنده صفحات وب متصل مي شود اما بجاي آنکه صفحه وب را نمايش دهد متن Html صفحه را  بازيابي مي کند . همچنين زمانيکه اين کنترل از پروتکل FTP استفاده مي کند قادرست  فايلها را بين کامپيوترهاي روي شبکه منتقل سازد . 
*اتصالات HTTP* :  همانطور که مي دانيد ، پروتکل HTTP استاندارد وب مي باشد . صفحات وب با زبان Html  نوشته مي شوند و انتقال آنها از server به client توسط پروتکل HTTP صورت مي گيرد .  
متد OpenURL : ساده ترين راه استفاده از کنترل IT متد OpenURL است . شکل  کلي اين متد بصورت زير است :
 Inet.OpenURL(url,DataType)xکه url آدرس صفحه وب و  DataType نوع داده بازيابي شونده است و دو مقدار icString ( داده متني ) يا  icByteArray ( داده باينري ) را مي گيرد . مقدار بازگشتي اين متد ، داده هاي منتقل  شده است . 
اين متد بصورت سنکرون کار مي کند يعني در تمام مدت کار آن برنامه نمي  تواند کار ديگري انجام دهد . اگر از icByteArray استفاده کنيد بايد مقدار بازگشتي  آنرا در يک ارايه بايت قرار دهيد . 
مثال 1 : از بخش Component در منوي Project  مورد Microsoft Internet Transfer Control 6.0 را به toolbar خود اضافه کنيد . سپس  يک کنترل IT روي فرم قرار دهيد و همچنين يک Rich Textbox و يک دکمه روي فرم قرار  دهيد و کد زير را براي event مربوط به کليک دکمه بنويسيد :
 TextBox.text=Inet.OpenURL(“www.microsoft.com”,icString)xمثال 2 : کد زير داده هاي باينري را از اينترنت خوانده و آنها را در يک فايل  ذخيره مي کند :
 Dim b() as  byte
B()=Inet.OpenURL(ftp://ftp.microsoft.com/test.zip,icByteArray)x
Open  App.path & “\test.zip” For Access Write As #1
Put #1,b()x
Close  #1
رويداد StateChanged : کنترل IT فقط يک event  دارد که StateChanged مي باشد . اين event زماني روي مي دهد که State کنترل تغيير  کند . State هر اتفاقي است که برنامه بايد از آن مطلع شود . تعريف کلي اين event  بصورت زير است : 
 Inet_StateChanged(ByVal NewState As  Integer)xکه NewState مقداري است که حالت جديد را بيان مي  کند . مقادير ممکن اين پارامتر عبارتند از :
icNone : حالت تغيير نکرده است .  
icResolvingHost : در حال جستجوي آدرس IP کامپيوتر موردنظر .
icHostResolved  : آدرس IP کامپيوتر موردنظر يافت شد . 
icConnecting : در حال اتصال به کامپيوتر  مقصد
icConnected : اتصال به کامپيوتر مقصد برقرار شد . 
icRequesting : در  حال ارسال درخواست به کامپيوتر مقصد 
icRequestSent : درخواست به کامپيوتر مقصد  ارسال شد . 
icReceivingResponse : در حال دريافت پاسخ از کامپوتر مقصد .  
icResponseReceived : پاسخ کامپيوتر مقصد دريافت شد . 
icDisconnecting : در  حال قطع اتصال با کامپيوتر مقصد . 
icDisconnected : اتصال مقصد با موفقيت قطع  شد . 
icError : در ارتباط با کامپيوتر مقصد خطايي رخ داده است .  
icResponseCompleted : تکميل پاسخ – تمام داده ها دريافت شد . 
تشخيص خطا در  عمليات انتقال داده اهميت بالايي دارد و StateChanged در صورت بروز هر خطايي مقدار  icError را برمي گرداند و اطلاعات خطا را در دو خاصيت ResponseCode و ResponseInfo  برمي گرداند . 
انتقال داده بصورت آسنکرون : کنترل IT متدهاي انعطاف پذير  ديگري هم دارد که آسنکرون هستند و اجازه مي دهند تا همزمان با عمليات انتقال داده ،  برنامه به وظايف ديگري هم بپردازد . اين متدها با استفاده از Event Driven Model  کار مي کنند . بدين معني که وقتي برنامه درخواست انتقال داده اي را مي دهد کنترل IT  درخواست را در زمينه برنامه انجام مي دهد و برنامه ازاد است تا به کارهاي ديگرش  بپردازد . زمانيکه داده ها بازيابي شود ، داده ها را از بافر داخلي کنترل IT مي  خواند . 
متد GetChunk : در عمليات انتقال آسنکرون ، بايستي داده را توسط  اين متد از بافر داخلي کنترل IT بگيريم :
 Inet.GetChunk(datasize[,datatype])xکه پارامتر  datasize از نوع long بوده و تعيين مي کند چند بايت از بافر خوانده شود و پارامتر  اختياري datatype نوع داده را مشخص مي کند و مي تواند مقادير icString و  icByteArray را بگيرد . 
زمانيکه StateChanged وارد حالتهاي icResponseReceived  و يا icResponseCompleted شد بايد از GetChunk استفاده کنيد . بدين صورت که از يک  حلقه استفاده مي کنيم تا کل بافر را بخوانيم :
 Private Sub Inet_StateChanged(Byval  State as Integer)x
Dim temp1,temp2
Select Case State
Case  icResponseCompleted
temp1=””x
temp2=””x
Do
temp1=Inet.GetChunk(512,icString)x
temp2=temp2  & temp1
Loop Until temp1=””x
End Select
End Subبراي بالابردن کارايي ، بهتر است از قطعات کوچک ( بين 512 تا 1024 بايتي )  استفاده کنيد . 
متد Execute : و اما انعطاف پذيرترين متد کنترل IT ، متد  Execute است . فرمت کلي اين متد بصورت زير است :
 Inet.Execute(url,Command,Data,RequestHeaders)xکه  url آدرس مقصد ، Command فرماني است که به کامپيوتر مقصد داده مي شود و Data و  RequestHeaders اطلاعات اضافي لازم براي اجراي فرمان داده شده است . فرمانهاي  Command همان فرمانهاي HTTP هستند که عبارتند از :
- GET : دريافت داده ها از  کامپيوتر مقصد 
- HEAD : دريافت اطلاعات header از کامپيوتر مقصد 
- POST :  ارسال اطلاعات لازم براي تکميل درخواست
- PUT : ارسال فايل براي کامپيوتر ميزبان  ( upload )
فرمان GET پرکاربردترين فرمان متد Execute است و داده هاي خوانده شده  را در بافر داخلي بافر کنترل IT قرار مي دهد تا بتوان با متد GetChunk آنها را  بازيابي نمود . 
مثال : 
 Inet.Execute  http://www.microsoft.com,”GET”xساير خواص کنترلIT  : 
- AccessType : نوع دسترسي کنترل IT به اينترنت را مشخص مي کند و سه  مقدار مي تواند بگيرد :
icUseDefault : استفاده از تنظيمات رجيستري براي دسترسي  به اينترنت
icDirect : اتصال مستقيم کنترل IT به اينترنت
icNamedProxy :  اتصال به اينترنت توسط پروکسي
- Document : نام صفحه پيش فرض که در متد Execute  از آن استفاده مي شود . اگر به متد Execute پارامتر url را ندهيد از اين صفحه پيش  فرض استفاده مي کند . 
- Password : کلمه رمز عبور کامپيوتر ميزبان FTP 
-  Procotol : نوع پروتکل مورد استفاده در متد Execute را مشخص مي کند و 5 مقدار مي  تواند بگيرد :
icUnknown : نامعلوم
icDefault : پروتکل پيش فرض
icFTP :  پروتکل FTP
icHTTP : پروتکل HTTP
icHTTP : پروتکل حفاظت شده HTTP
- Proxy  : نام ميزبان پروکسي
- RequestTimeOut : مدت زماني که کنترل IT صبر مي کند تا  اطلاعات را دريافت کند . اگر اين خاصيت صفر باشد کنترل تا هر زمان که لازم باشد  براي دريافت پاسخ صبر مي کند . در حالت سنکرون ( متد OpenURL ) بعد از سپري شدن اين  مدت زمان ، يک خطا توليد مي شود و در حالت آسنکرون ( متد Execute ) رويداد  StateChanged مقدار خطا را بر مي گرداند
- ResponseCode : بعد از بروز حالت  icError اين خاصيت کد خطا را مي دهد . 
- ResponseInfo : توضيحي درباره خطا
-  StillExecuting : اگر True باشد يعني کنترل مشغول انجام کار است . 
- URL : آدرس  مقصد در متدهاي OpenURL و يا Execute 
- UserName : نام کاربر براي ورود به  کامپيوتر ميزبان FTP 

*کنترل Internet Transfer - قسمت دوم* 

اتصالات FTP
پروتکل FTP علاوه بر نقل و انتقال فايل بين دو کامپيوتر ، مي تواند  نوعي مديريت فايل ( مثل حذف فايل يا ايجاد پوشه ) روي کامپيوتر مقصد را انجام دهد .  FTP در انتقال فايل بسيار قويتر از HTTP است ولي به مراتب پيچيده تر از HTTP مي  باشد اما کنترل IT اين پيچيدگيها را از ديد برنامه نويس مخفي کرده است . 
براي  کار با سرورهاي FTP بايد به آنها Login نمود . نوع خاصي از Login به نام Anonymous  Login ( ورود ناشناس ) وجود دارد که با آن کاربران مي توانند بدون محدوديت از سايت  FTP استفاده کنند . توجه کنيد که حتي براي ورود ناشناس هم نياز به نام کاربر و کلمه  عبور است . براي ارسال نام کاربر و کلمه عبور از خواص username و password کنترل IT  استفاده مي شود . اگر خاصيت username خالي باشد ( blank ) ، کنترل IT بطور خودکار  از anonymous استفاده مي کند و آدرس email کاربر بعنوان passowrd استفاده مي شود  .
استفاده از متد OpenURL : متد OpenURL ساده ترين راه انجام عمليات FTP  است . دستور زير از يک سايت FTP ليست مي گيرد :

Text.text=Inet.OpenURL("ftp://ftp.microsoft.com",icString)xبراي خواندن فايل از يک سايت FTP بايد در حالت باينري کار کرد :
 b()=Inet.OpenURL("ftp://ftp.microsft.com/test.zip",icByteArray)x
استفاده از متد Execute : متد Execute قابليتهاي بيشتري دارد و اجرای  آن در FTP نياز به دو پارامتر دارد :
 Inet.Execute(url,operation)x
که url آدرس سايت  FTP بهمراه نام و مسير فايل و پارامتر operation يک فرمان FTP است . کنترل IT با  داده هاي خوانده شده FTP به دو طريق رفتار مي کند :
برخي از داده ها مثل پاسخ  فرمان DIR در بافر کنترل IT قرار مي گيرد و بايد آنها را با متد GetChunk خواند .  
برخي ديگر از داده ها مثل فايل خوانده شده با فرمان GET مستقيماً روي ديسک  نوشته مي شوند و ديگر نيازي به استفاده از متد GetChunk نيست . 
فرامين FTP  بسيار قوي هستند و حتي به شما اين امکان را مي دهند که فايلها را به روي کامپيوتر  مقصد کپي کنيد ، به پوشه هاي کامپيوتر مقصد برويد ، فايلها را حذف کنيد و يا تغيير  نام دهيد . البته بايد توجه داشت که فرامين قابل اجرا به نوع ورود به سيستم FTP  بستگي دارد . اگر با کاربر anonymous به يک سايت FTP وارد شويد تنها مي تواند  فايلها را ببيند و آنها را download کنيد . 
مهمترين فرامين FTP عبارتند از  :
CD path : به دايرکتوري path مي رويد .
CDUP : به يک دايرکتوري بالاتر مي  رود . 
CLOSE : بستن اتصال FTP 
DELETE file1 : حذف فايل file1 
DIR file1  : جستجوي فايل file1 روي دايرکتوري جاري
MKDIR path : ايجاد يک دايرکتوري با نام  path 
PUT file1 file2 : فايل file1 را از کامپيوتر مبدا روي فايل file2 در  کامپيوتر مقصد کپي مي کند . 
PWD : نام دايرکتوري جاري در کامپيوتر مقصد را برمي  گرداند . 
QUIT : قطع اتصال FTP 
GET file1 file2 : فايل file1 را از  کامپيوتر مقصد روي فايل file2 در کامپيوتر مبدا کپي مي کند . 
RENAME file1  file2 : تغيير نام فايل file1 به file2 
RMDIR path : حذف دايرکتوري path در  کامپيوتر مقصد
SIZE file1 : بدست آوردن تعداد بايتهاي فايل يا دايرکتوري file1

----------


## saeedzx

*آموزش DirectX Input - بخش 1,2,3
**گرفتن اطلاعات ورودی از  کيبرد - ۱

مقدمه* 

Direct Input 8 همانطور که از نامش مشخص  است به شما اجازه می دهد که بتوانيد برنامه هايي بنويسيد که توسط هر نوع دستگاه  ورودی کنترل شود . 
Direct Input 8 دارای چندين مزيت نسبت به استفاده از  کنترلهای ورودی خود ويژوال بيسيک دارد – کنترلهايي مثل Form_KeyUp, Form_KeyDown,  Form_MouseMove - و همچنين قابليت کنترل بيشتری نسبت به توابع استاندارد Win32 از  قبيل GetCursorPos, GetKeyState دارد .
Direct Input 8 سريعتر ، کاراتر و  قدرتمند تر بوده و برای ساخت بازيها طراحی شده بنابراين باعث کندی برنامه ها نخواهد  شد .

*چگونگی کار با Direct Input 8 برای گرفتن ورودی از کيبرد * 

دو روش برای استفاده از کيبرد در DirectX8 وجود دارد : روش polling و  روش event-based که هر دو دارای مزايا و معايبی هستند .
بطور کلی در اغلب  طراحيها از روش event-based استفاده می شود زيرا کار با آن راحت تر اسن . در اين  روش هر پيغام فرستاده شده ازطرف دستگاه ورودی log می شود و برنامه نيازی به هيچگونه  پردازشی بمنظور منتظر ماندن برای يک پيغام از طرف ورودی ندارد ، بنابر اين کاراتر  است . در روش polling کنترل کمی دقيقتر و راحتر است .
اگر در مورد برنامه نويسی  بر مبنای polling و بر مبنای event اطلاعات کافی نداريد می توانيد از منابع موجود  در سايتهايي چون Gamasutra و GameDev استفاده کنيد .

*روش Polling* 

مراحل اين روش عبارتند  از :

1 – تعريفات Declerations : يک فرم ايجاد کرده و يک TextBox به نام  txtOutput با خصوصيات Multiline ، Locked و Vertical Scroll Bar در آن قرار دهيد .  کدهای زير را در بخش کدنويسی اين فرم بنويسيد :
 Private Const UsePollingMethod As  Boolean = True
Private Const UseEventMethod As Boolean = False
‘نکته مهم  اينست که تنها يکی از دو ثابت فوق بايستی True باشد .
Private bRunning As  Boolean
‘اين متغير برای polling استفاده می شود 
Private DX As  DirectX8
Private DI As DirectInput8
‘تعريف شی اصلی DirectX و شی  DirectInput
Private DIDevice As DirectInputDevice8
Private DIState As  DIKEYBOARDSTATE
‘اين دو شی برای دسترسی به دستگاه ورودی ( کيبرد ) استفاده می  شوند 
Private KeyState(0 To 255) As Boolean
‘آرايه ای برای تشخيص فشرده شدن  کليد
Private Const BufferSize As Long = 10
‘ سايز بافر نگهدارنده event ها  . در روش event-based اين مقدار برابر يک و در روش polling برابر 10 تا 20 است (  بسته به سرعت حلقه بازی )
Private Declare Sub Sleep Lib "kernel32" (ByVal  dwMilliseconds As Long)x
‘ تابع Sleep برای متوقف کردن حلقه polling در صورت  بالا بودن نرخ ورودی

2- مقدار دهی اوليه  Initialisation : اين بخش سه مرحله دارد :
در مرحله اول اشيا و Device ها ساخته  می شوند .
در مرحله دوم تنظيمات مربوط به Device انجام می شود .
در مرحله سوم  به Device می گوئيم که می خواهيم شروع به استفاده از آن کنيم .

در Form_Load  کدهای زير را بنويسيد :
 Me.Show
Dim I As Long
Dim DevProp  As DIPROPLONG
Dim DevInfo As DirectInputDeviceInstance8
Dim pBuffer(0 To  BufferSize) As DIDEVICEOBJECTDATA
If UsePollingMethod And UseEventMethod  Then
MsgBox "You must select only one of the constants before  running"x
Unload Me
End
End If

If UsePollingMethod Then  txtOutput.Text = "Using Polling Method" & vbCrLf
If UseEventMethod Then  txtOutput.Text = "Using Event Based Method" & vbCrLf

‘مقداردهی اوليه  روش انتخاب شده
Set DX = New DirectX8
Set DI = DX.DirectInputCreate
Set  DIDevice =  DI.CreateDevice("GUID_SysKeyboard")x

DIDevice.SetCommonDataFormat  DIFORMAT_KEYBOARD
DIDevice.SetCooperativeLevel frmMain.hWnd, DISCL_BACKGROUND  Or ISCL_NONEXCLUSIVE

‘برپاسازی بافر
DevProp.lHow =  DIPH_DEVICE
DevProp.lData = BufferSize
DIDevice.SetProperty  DIPROP_BUFFERSIZE, DevProp

‘ به دايرکت ايکس می گوئيم که می خواهيم از  دستگاه ورودی استفاده کنيم 
DIDevice.Acquire

‘استخراج اطلاعاتی در مورد  دستگاه ورودی
Set DevInfo = DIDevice.GetDeviceInfo()x
txtOutput.Text =  txtOutput.Text & "Product Name: " & DevInfo.GetProductName &  vbCrLf
txtOutput.Text = txtOutput.Text & "Device Type: " &  DevInfo.GetDevType & vbCrLf
txtOutput.Text = txtOutput.Text & "GUID:  " & DevInfo.GetGuidInstance & vbCrLf


‘در صورتی که بخواهيم به  برنامه خاتمه بدهيم کدهای زير را می نويسيم
DIDevice.Unacquire
Set DIDevice  = Nothing
Set DI = Nothing
Set DX = Nothing
Unload  Me
End

3 – گرفتن ورودی از کيبرد : در اين بخش  فرض کنيد بخواهيم يک بازی را در يک حلقه Do-Loop شبيه سازی کنيم . در اين حلقه هر  بار فشرده شدن کليدهای کيبرد را چک می کنيم :
 If Not Err.Number Then bRunning =  True

Do While bRunning

‘دريافت اطلاعات شامل خواندن وضعيت کيبرد ،  خواندن اطلاعات بافر و سپس خطا
DIDevice.GetDeviceStateKeyboard  DIState
DIDevice.GetDeviceData pBuffer, DIGDD_DEFAULT
If Err.Number =  DI_BUFFEROVERFLOW Then
Msgbox(“BUFFER OVERFLOW (Compensating)...")x
GoTo  ENDOFLOOP:
End If
‘بررسی فشرده شدن کليدها
For I = 0 To 255
If  DIState.Key(I) = 128 And (Not KeyState(I) = True) Then
txtOutput.Text =  txtOutput.Text & "{ DOWN } " & KeyNames(CInt(I))&  vbCrLf
txtOutput.SelStart = Len(txtOutput.Text)x
KeyState(I) = True
End  If
Next I

‘بررسی رها شدن کليد
For I = 0 To BufferSize
If  KeyState(pBuffer(I).lOfs) = True And pBuffer(I).lData = 0  Then
KeyState(pBuffer(I).lOfs) = False
txtOutput.Text = txtOutput.Text  & "{ UP } " & KeyNames(CInt(pBuffer(I).lOfs)) &  vbCrLf
txtOutput.SelStart = Len(txtOutput.Text)x
End If
Next  I

Sleep (50)x
DoEvents
ENDOFLOOP:
Loop
در کد فوق يک تابع KeyName وجود دارد که نام کليد فشارداده شده را بر می  گرداند . بخشی از اين تابع را در زير می بينيد :

 Function KeyNames(iNum As Integer) As  String

Dim aKeys(0 To 255) As String

aKeys(1) =  "DIK_ESCAPE"
aKeys(2) = "DIK_1 On main keyboard"x
aKeys(3) = "DIK_2 On  main keyboard"x
aKeys(4) = "DIK_3 On main keyboard"x
aKeys(5) = "DIK_4 On  main keyboard"x
aKeys(6) = "DIK_5 On main keyboard"x
aKeys(7) = "DIK_6 On  main keyboard"x
aKeys(8) = "DIK_7 On main keyboard"x
aKeys(9) = "DIK_8 On  main keyboard"x
aKeys(10) = "DIK_9 On main keyboard"x
aKeys(11) = "DIK_0  On main keyboard"x
aKeys(12) = "DIK_MINUS On main keyboard"x
aKeys(13) =  "DIK_EQUALS On main keyboard"x
aKeys(14) = "DIK_BACK BACKSPACE"x
aKeys(15)  = "DIK_TAB"x
aKeys(16) = "DIK_Q"x
aKeys(17) = "DIK_W"x
aKeys(18) =  "DIK_E"x
aKeys(19) = "DIK_R"x
aKeys(20) = "DIK_T"x
.
.  
.
KeyNames = aKeys(iNum)x

End Function 
=======================
*موضوع : کنترل کيبرد با روش Event-Based  

*مقداردهی اوليه و مفاهيم اصلی در روش Event-Based مشابه روش  Polling است و تنها بايستی ساختار بخش جمع آوری داده و حلقه پردازشی را تغيير دهيم  . مراحل کار با روش Event-Based بصورت زير می باشد :

۱ - تعاريف و مقداردهی  اوليه : در بخش تعاريف دو تعريف جديد بصورت زير داريم :

Dim hEvent As Long
Implements  DirectXEvent8 
hEvent يک پارامتر هندل برای يک می باشد .
نکته : زمانی که  کليدی فشرده يا رها می شود ، DirectX اين امر با فراخوانی تابعی به اسم  DirectXEvent8_DXCallback به برنامه شما اطلاع می دهد . ( اين نوع توابع را Call  Back Function گويند ) . اين تابع به برنامه شما می گويد که يک رويداد اتفق افتاده  است و بايستی بافرها را چک کند .

تنها تغييری که در بخش مقداردهی اوليه نياز  است ، برپاسازی يک event می باشد :

If UseEventMethod Then
hEvent =  DX.CreateEvent(frmMain)x
DIDevice.SetEventNotification hEvent
End  If 
در انتهای برنامه نيز کد زير را برای از بين بردن event اضافه  کنيد :

If hEvent <> 0 Then  DX.DestroyEvent hEvent 

۲ - استفاده از event : برای اين بخش کدهايي را در داخل  تابع DirectXEvent8_DXCallback می نويسيم :

Private Sub  DirectXEvent8_DXCallback(ByVal eventid As Long)x
'متغيرهای موردنياز
Dim I  As Long
Dim pBuffer(0 To BufferSize) As DIDEVICEOBJECTDATA
If eventid =  hEvent Then
If DIDevice Is Nothing Then Exit Sub
'درصورت رخ دادن event  داده را از کيبرد می گيريم 
DIDevice.GetDeviceStateKeyboard  DIState
DIDevice.GetDeviceData pBuffer, DIGDD_DEFAULT
'چک کردن تمام کليدها  برای اينکه متوجه شويم چه اتفاقی افتاده است 
For I = 0 To 255
'عدد ۱۲۸ نشان  دهنده key_down event است .
If DIState.Key(I) = 128 Then
If  pBuffer(0).lData = 128 Then
txtOutput.Text = txtOutput.Text & "{ DOWN } "  & KeyNames(CInt(I)) & vbCrLf
End If
End If
'کد فوق برای بررسی  فشرده شدن يک کليد بود . کد زير رها شدن کليد را بررسی می کند 
If  (pBuffer(0).lData = 0 And pBuffer(0).lOfs = I) Then
txtOutput.Text =  txtOutput.Text & "{ UP }" & KeyNames(CInt(I)) & vbCrLf
End  If

txtOutput.SelStart = Len(txtOutput.Text)x
Next I
End If
End  Sub 
=====================
*موضوع :* کنترل ماوس با DirectX  Input

*مقدمه :* 

برای استفاده از ماوس در برنامه های مالتی  مديا و بازيها همانند کی برد می توانيم از امکانات دايرکت ايکس استفاده کنيم . روش  کنترل ماوس توسط DirectX Input بسيار ساده بوده و مشابه کنترل کيبرد می باشد  بنابراين درصورتی که دو درس گذشته را نخوانده اين پيشنهاد می کنم ابتدا آنها را  مطالعه کنيد .

*برپاسازی Device :* 

علاوه بر متغيرهايي که در  بخش کنترل کيبرد تعريف شد بايستی متغيرهای جديد زير را نيز در ابتدای برنامه تان  تعريف کنيد :

Private Const mSpeed As Single = 2  
Private Const BufferSize As Long = 10
Private mPosition As  Point 
mSpeed مقدار سرعت حرکت کرسر ماوس را مشخص می کند  .
BufferSize سايز بافر DI می باشد .
mPosition موقعيت جاری کرسر ماوس را  نشان می دهد .

در مرحله بعدی بايستی مقداردهي های اوليه لازم را انجام دهيد  :

Set DIDevice =  DI.CreateDevice("guid_SysMouse")x
Call  DIDevice.SetCommonDataFormat(DIFORMAT_MOUSE)x
Call  DIDevice.SetCooperativeLevel(frmMain.hWnd, DISCL_FOREGROUND Or  DISCL_EXCLUSIVE)x 
تفاوت عمده کدهای فوق با کدهای مقداردهی اوليه در بخش کی برد  آنست که cooperativelevel تغيير کرده است . در اينجا گفته شده که ما می خواهيم از  ماوس بصورت انحصاری در برنامه استفاده کنيم . اين حالت برای برنامه های window-base  مناسب نيست و بهترست از آن در بازيهايي که بصورت full screan هستند استفاده کنيد .  

*خواندن ورودی از ماوس :*

در اين بخش می توانيد هم از روش  polling و هم event-based استفاده کنيد . نکته مهمی که در اينجا وجود دارد آنست که  Direct Input فقط حرکت داده شدن ماوس و کليک شدن يک دکمه را به شما اطلاع می دهد و  برای تشخيص حالتهای double click و single click خودتان بايستی کد بنويسيد برای  مثال اگر فاصله زمانی بين دو کليک کمتر از ۴۰ ميلی ثانيه باشد آنگاه اين يک double  click بوده است . 
کد زير حرکت داده شدن ماوس و کليک يکی از سه دکمه آنرا اطلاع  می دهد :

Dim DevData(1 To BufferSize) As  DIDEVICEOBJECTDATA
Dim nEvents As Long
Dim I As Long
nEvents =  DIDevice.GetDeviceData(DevData, DIGDD_DEFAULT)x
For I = 1 To  nEvents
Select Case DevData(I).lOfs
Case DIMOFS_X
mPosition.x =  mPosition.x + (DevData(I).lData * mSpeed)x
If mPosition.x < 0 Then  mPosition.x = 0
If mPosition.x > frmMain.ScaleWidth Then mPosition.x =  frmMain.ScaleWidth
imgCursor.Top = mPosition.y
imgCursor.Left =  mPosition.x
lablel(1).Caption = "Mouse Coordinates: [" & mPosition.x  & ", " & mPosition.y & "]"x
Case DIMOFS_Y
mPosition.y =  mPosition.y + (DevData(I).lData * mSpeed)x
If mPosition.y < 0 Then  mPosition.y = 0
If mPosition.y > frmMain.ScaleHeight Then mPosition.y =  frmMain.ScaleHeight
imgCursor.Top = mPosition.y
imgCursor.Left =  mPosition.x
lablel(1).Caption = "Mouse Coordinates: [" & mPosition.x  & ", " & mPosition.y & "]"x
Case  DIMOFS_BUTTON0
label(2).Caption = "Button 0 State: " &  IIf(DevData(I).lData = 0, "Up", "Down")x
Case  DIMOFS_BUTTON1
label(3).Caption = "Button 1 State: " &  IIf(DevData(I).lData = 0, "Up", "Down")x
Case  DIMOFS_BUTTON2
label(4).Caption = "Button 2 State: " &  IIf(DevData(I).lData = 0, "Up", "Down")x
Case  DIMOFS_BUTTON3
label(5).Caption = "Button 3 State: " &  IIf(DevData(I).lData = 0, "Up", "Down")x
End Select
Next I 
برای استفاده از کد فوق در روش Polling ، بايستی آنرا در يک  حلقه Do while-Loop قرار دهيد . 
برای استفاده از کد فوق در روش Event-Based ،  بايستی آنرا درون روتين DirectXEvent8_DXCallback قرار دهيد  .

----------


## saeedzx

*Server-Side ActiveX  Dll Programming - بخش 1,2,3,4,5,6*
*مقدمه
*با قراردادن کدهای ASP درون component های  server side ، برنامه نويس نه تنها می تواند از قابليت های ويژوال بيسيک در نوشتن  کدهای خود استفاده کند بلکه سرعت load صفحات ASP وی نيز افزايش می يابد . همچنين  اين روش راهکاری برای کپسوله سازی و حفاظت از کدهای ASP می باشد .
در اين درس يک  نمونه اکتيويکس server-side را توسط ويژوال بيسيک ايجاد نموده و از آن در صفحات ASP  استفاده خواهيم کرد .

*اجزای Server-Side*
اکتيوکس های server-side  بر خلاف اکتيوکس های clict-side بر روی سرور وب اجرا می شوند و بنابراين بايستی وب  سرور مورد استفاده با اين تکنولوژی سازگار باشد . زمانيکه وب سرور دستوری را برای  پردازش يکسری اطلاعات درون يک صفحه ASP دريافت می کند دستوراتی که درون تگهای  <%%>قرار دارند بررسی می شوند . با استفاده از ويژوال بيسيک می توان يک اکتيوکس dll  ساخت که جايگزين اين کدهای ASP شود . در اينصورت تنها کافيست يک شی از کلاسهای  موجود در اين dll ساخته شود تا بتوان از قابليتهای آن استفاده نمود  .

*ايجاد ActiveX Dll در ويژوال بيسيک*
برای ساخت يک اکتيواکس  ويژوال بيسيک را اجرا کرده و توسط گزينه New Project پروژه ای از نوع ActiveX Dll  ايجاد کنيد . پس از اينکه شما روی آيکون ActiveX dll کليک کنيد ويژوال بيسيک پروژه  ای پيش فرض بهمراه ي: کلاس خالی برای شما ايجاد می کند . می توانيد هم نام پروژه و  هم نام کلاس را تغيير دهيد همچنين می توانيد کلاسهای ديگری به پروژه اضافه کنيد .  
حال برای اينکه بتوان دستورات ASP را استفاده نموده بايستی از منوی Project  وارد بخش References شده و مورد Microsoft Active Server Pages Object Library را  انتخاب کنيد . 

*استفاده از متدهای ASP در کلاس های ActiveX * 
بمنظور استفاده از متدهای ASP در کلاسهای ActiveX بايستی ابتدا روتينی به  اسم OnStartPage در داخل کلاس تعريف کنيد . ساختار اين روتين بصورت زير است  :
 Public Sub  OnStartPage(PassedScriptingContext As ScriptingContext)x

End  Sub
زمانيکه کاربر يک صفحه ASP را که شامل شی ای از  کلاس ما باشد فراخوانی کند IIS ، SciptingContext را به شی ما پاس می دهد .  ScriptingContext حاوی تمام متدها و خصوصيات ASP می باشد که برای استفاده در دسترس  هستند . حال بايستی در روتين OnStartPage تمام اشيای ASP که توسط ScriptingContext  در دسترس هستند را به اشيايي از همان نوع assign کنيم تا در صورت لزوم بتوانيم از  آنها استفاده نمائيم . بنابراين قبل از نوشتن روتين OnStartPage متغيرهای زير را  تعريف می کنيم :
 Private MyScriptingContext As  ScriptingContext
Private MyApplication As Application
Private MyRequest As  Request
Private MyResponse as Response
Private MyServer As  Server
Private MySession As Session
حال در روتين  OnStartPage بايستی اشيا فوق را مقداردهی کنيد :
 Public Sub  OnStartPage(PassedScriptingContext As ScriptingContext)x
Set  MyScriptingContext=PassedScriptingContext
Set  MyApplication=MyScriptingContext.Application
Set  MyRequest=MyScriptingContext.Request
Set  MyResponse=MyScriptingContext.Response
Set  MyServer=MyScriptingContext.Server
Set  MySession=MyScriptingContext.Session
End Sub

از تمام اشيا فوق مشابه نوشتن صفحات ASP می توانيم در متدهايي که برای کلاس  می نويسيم استفاده کنيم . برای مثال کد ASP زير را در نظر بگيريد :
 
<%
MyTempVar=Request.Form(“username”)x
Response.Write(“You Entered : “ & MyTempVar)x
%>
حال فرض کنيد می خواهيم همين دستورات را در يک متد از کلاس بنويسيم  :
 Public Sub MyMethod()x
Dim MyTempVar  As String
MyTempVar=MyRequest.Form(“username”)x
MyResponse.Write(“You  Entered : “ & MyTempVar)x
End Sub
نکته ديگری  که بايد در نظر داشت نوشتن روتينی است که در زمان پايان کار با شی فراخوانی می شود  . اين روتين OnEndPage نام دارد و در آن اشيايي که در روتين OnStartPage مقداردهی  کرده ايم را آزاد می کنيم :
 Public Sub OnEndPage()x
Set  MyScriptingContext=Nothing
Set MyApplication= Nothing
Set MyRequest=  Nothing
Set MyResponse= Nothing
Set MyServer= Nothing
Set MySession=  Nothing
End Sub
پس از نوشتن متدهای موردنظرتان  پروژه را ذخيره کنيد . حال برای کامپايل پروژه از منوی File مورد File/Make Dll را  انتخاب نمائيد تا پروژه کامپايل شده و فايل dll موردنظرتان ساخته شود . اين فايل را  در دايرکتوريي که صفحات ASP شما در آنجا قرار دارد کپی کنيد .
نکته ای که بايد  مورد توجه قرار داد اينست که در صورتيکه می خواهيد از اين dll در سيستم ديگری  استفاده کنيد ابتدا بايستی آنرا رجيستر کنيد . برای رجيستر کردن يک dll از برنامه  regsvr32.exe موجود در دايرکتوری سيستم ويندوز استفاده می شود :
 Regsvr32.exe  C:\InetPub\wwwroot\Example\Example.dll
*استفاده از  ActiveX Dll در صفحات ASP* 
برای استفاده از کلاس نوشته شده در فايل dll در  صفحات ASP ابتدا بايستی يک شی از آن کلاس ايجاد کنيم :
 
<%
Set ObjRefrence = Server.CreateObject(“ProjectName.ClassName”)x
%> 
پس از ساخت شی می توانيم از متدهای موجود در کلاس استفاده  کنيم
----------------------------------
*+COM چيست ؟
*روشی که برای دسترسی به Object  های ASP در درس گذشته بيان شد تا IIS 3.0 استفاده می شد . اين روش استفاده از  متدهای OnStart و OnEnd بود . البته گرچه هنوز اين روش از سوی IIS ورژن ۵ پشتيبانی  می شود اما دارای يک مشکل است :
اگر بخواهيد از يک کلاس در کلاس ديگری استفاده  کنيد نمی توانيد در کلاس مورد استفاده ، دو متد ذکر شده را قرار دهيد و بنابراين به  اشيای ASP دسترسی نخواهيد داشت .
راه حلی که برای اين مشکل ارائه شد تکنولوژی  +COM می باشد .
بطور خلاصه در اين تکنولوژی شیی به اسم ObjectContext وجود دارد  که از طريق آن می توانيد به اشيای ASP دسترسی داشته باشيد . 
برای استفاده از  تکنولوژی +COM ابتدا از منوی Project ، References را انتخاب کرده و مورد زير را  انتخاب کنيد :
COM+ Services Type Library
سپس در کلاسهای خود متغيرهای زير  را تعريف کنيد :

Dim Request As  ASPTypeLibrary.Request
Dim Response As ASPTypeLibrary.Response
Dim Server  As ASPTypeLibrary.Server
Dim Session As ASPTypeLibrary.Session
Dim  Application As ASPTypeLibrary.Application 
حال در متد Initialize هر کلاس بايستی شی ObjectContext را  تعريف کرده و مقداردهی کنيد . سپس متغيرهای بالا را با استفاده از اين شی مقداردهی  نمائيد :

Private Sub Class_Initialize()x
Dim  objCtx As ObjectContext
Set objCtx = GetObjectContext
Set Request =  objCtx.item("Request")x
Set Response = objCtx.item("Response")x
Set Server  = objCtx.item("Server")x
Set Session = objCtx.item("Session")x
Set  Application = objCtx.item("Application")x
End Sub 

+ موضوع درس بعد : دسترسی به Database در کلاسهای  اکتيوايکس Server-Side 

*پاسخ به سوالات شما :*
۱ - چه جوری دکمه ها  و ليست باکس ها در ويژوال بيسيک را شکل اکس پی کنيم؟اصلان می شه؟ 
پاسخ :  ؟؟؟؟
۲ - تويه vb چطوری ميشه فايله اجرايیdllهاشو نخاد و بدونه اونا اجرا بشه  ؟
پاسخ : برنامه های اجرايي ويژوال بيسيک برای اجرا شدن به يکسری فايلهای ديگه  نياز دارند مثلاً Vb Runtime Dll . برای اينکه به اين فايلها نيازی نباشد بايستی يک  برنامه نصب setup file برای پروژه تان بسازيد تا بتوان برنامه را روی هر کامپيوتری  نصب و اجرا کرد . ساده تري راه استفاده از ابزار Package & Deployment موجود در  ويژوال استديو است . ابزارهای حرفه ای تر عبارتند از : InstallShield ، InstallWise  ، Setup Factory و ...
۳ - اگه ممکنه يه توضيحی درباره ی دي کد کردن دی ال ال  mpr دهيد .
پاسخ : ؟؟؟؟
۴ - چطوری ميشه تو يه تکس باکس در ويژوال بيسيک فرمان  داد اينتر شود يعنی به خط بعدی رود؟ ( يعنی زمانی که مولتی لاين است‌)
پاسخ :  استفاده از کاراکتر vbCrLf 
۵ - من مي خوام با زبانهايي PHP و ASP برنامه  بنويسيم ولي تمامي اين زبانها Server_side هستند و من بايد روي سرور اين كار ها رو  انجام بدم من مي خوامم بدونم كه چه طوري مي تونم كامپيوتر خودمو وب سرور كنم البته  يه چيزهاي مي دونم كه بايد IIS رو نصب كنم ولي نه به طور كامل خواهش مي كنم كمكم  كنيد 
پاسخ : بايستی ويندوز ۲۰۰۰ يا XP نصب کرده و از IIS آنها استفاده کنيد .  البته در ويندوزز ۲۰۰۰ IIS بطور اتوماتيک نصب نمی شود و بايد آنرا خودتان اضافه  کنيد . برای اطلاعات بيشتر در مورد کار با IIS به کتاب ها و مراجع اينترنتی مراجعه  کنيد مراجعه کنيد .

---------------------------------
*خلاصه ای بر چگونگی کار با بانک های اطلاعاتی ( Database )  در وی بی :
*+ برای آشنايي کامل با چگونگی کار با بانک های اطلاعاتی در  ويژوال بيسيک و بطور کلی Database Programming به کتاب برنامه نويسی بانک های  اطلاعاتی در ويژوال بيسيک انتشارات نص رجوع کنيد .

قبل از اينکه چگونگی  نوشتن يک کلاس Database برای استفاده در ASP را آموزش دهم ، مقدمه ای بر چگونگی کار  با بانک های اطلاعاتی در وی بی را شروع می کنم .
برای کار با بانک های اطلاعاتی  در ويژوال بيسيک روشها و امکانات مختلفی وجود دارد که يکی از بهترين آنها استفاده  از تکنولوژی ( ADO ( ActiveX Data Object می باشد . بدون هيچ توضيحی در مورد ساختار  اين تکنولوژی و نيز ساير روشهای ديگر ، به سراغ روش استفاده از اين تکنولوژی می روم  :
- برای کار با ADODB ابتدا بايستی از Reference ها مورد Microsoft ActiveX  Data Object را انتخاب کرد .
- قدم بعد تعريف يک شی ADO Connection برای اتصال  به بانک اطلاعاتی است :

Dim cn As ADODB.Connection 
- سپس بايستی اين شی ADO Connection را ايجاد نمود  :

Set cn = New  ADODB.Connection 
- همچنين بايستی يک شی ADO Recordset برای گرفتن مجموعه ای از  رکوردهای بانک اطلاعاتی تعريف کرد :

Dim rs As ADODB.Recordset 
- حال بايستی اتصال به بانک اطلاعاتی را باز نمود . در اين  مرحله با توجه به نوع بانک اطلاعاتی و اتصالی که می خواهيم داشته باشيم عبارت اتصال  ممکن است متفاوت باشد . فرض کنيم عبارت اتصال را در يک متغير نوع String به اسم  ConnString قرار دهيم :
• در صورتی که بانک اطلاعاتی مقصد SQL Server باشد و  بخواهيم بطور مستقيم و بدون استفاده از واسط ODBC به آن متصل شويم :

ConnString=”Provider=SQLOLEDB.1;Password=yourpas  sowrd;Persist Security  Info=True;User ID=yourusername; Initial Catalog=yourDatabaseName;Data  Source=yourServerName” 
• در صورتی که بانک اطلاعاتی مقصد SQL Server باشد و بخواهيم  با استفاده از واسط ODBC به آن متصل شويم :

ConnString=”Provider=MSDASQL.1;Password=yourpass  owrd;Persist Security  Info=True;UserID=yourusername;DataSource=yourODBC_  DataSourceName;Mode=ReadWrite” 
• در صورتی که بانک اطلاعاتی مقصد Access باشد  :

ConnString=”  Provider=Microsoft.Jet.OLEDB.4.0;Data 
Source=yourDatabaseFilePath;Persist  Security Info=False” 

حال بايستی اين اتصال را باز نمود :

cn.Open(ConnString)x 

- قدم بعدی ايجاد شی ADO Recordset می باشد  :

Set rs = New ADODB.Recordset 

- سپس بايستی با توجه به کاری که می خواهيم با جداول آن  بانک اطلاعاتی انجام دهيم يک sql query را توسط شی Recordset به آن بفرستيم  :

rs.Open yourSQLquery,cn,OpenKeyset,  adLockOptimistic 
بعبارت ديگر نوع باز کردن Recordset متفاوت است و توسط query  مورد نظر مشخص می شود برای مثال برای انتخاب فيلدهای يک Table :
SELECT DISTINCT  yourfields from yourtable WHERE yourcondition
نکته : نوع قفل کردن مجموعه  رکورد می تواند adLockReadOnly نيز باشد .

- حال با استفاده از اين  Recordset می توان يکسری کار را روی رکوردهای موجود در جداول انجام داد برای مثال  :
۱ – حرکت به ابتدای مجموعه رکورد :

rs.MoveFirst 
۲ – حرکت در طول مجموعه رکورد :

Do
tmp =  rs.fields(0)x
.
.
.
rs.MoveNext
Loop Until (rs.EOF)x 
3 – بستن مجموعه رکورد و بستن اتصال به بانک اطلاعاتی  :

rs.Close
cn.Close 
4 – حذف رکورد جاری از مجموعه رکورد :

rs.delete 
5 - ايجاد رکورد جديد در مجموعه رکورد :

Dim fields(RecordsetFieldsCount) As  Variant
Dim values(RecordsetFieldsCount) As Variant
fields(0) = Field 1  Name
fields(1) = Field 2 Name
.
.
.
fields(n) = Field n  Name

values(0) = Field 1 Value
values(1) = Field 2  Value
.
.
.
values(n)= Field n Value

rs.AddNew fields,  values
rs.update 

-------------------------
*آشنايي با چند query برای کار با جداول بانک های  اطلاعاتی

*1- SELECT : برای انتخاب رکوردها از يک جدول استفاده می  شود . فرمت کلی اين دستور بصورت زير است :

SELECT _fieldnames_ FROM  _tablename_ WHERE _condition_ ORDER BY _fieldnames_ 
مثال : فرض کنيد يک جدول به اسم mytable داريم که دارای دو  فيلد به نامهای id از نوع integer و name از نوع string باشد :
– انتخاب تمامی  رکوردهای جدول :
query="Select * from mytable"x
- انتخاب فيلد name تمام  رکوردهای جدول :
query="Select name from mytable"x
- انتخاب رکوردهايي از  جدول که فيلد id آنها برابر 2 باشد :
query="Select * from mytable where  id=2"x
- انتخاب رکوردهايي از جدول که فيلد name آنها برابر a باشد  :
query="Select * from mytable where name=’a’"x
توجه داشته باشيد که چون  فيلد name از نوع string است در دستور فوق از ‘ برای مقدار فيلد name استفاده شده  است . 
- انتخاب رکوردهايي از جدول که فيلد id آنها برابر 2 و فيلد name آنها  برابر a باشد و بر حسب id مرتب شده باشند .
query="Select * from mytable where  id=2 and name=’a’ order by id"x
نکته : در صورتيکه بخواهيم از يک متغير برای  مقداردهی به يک فيلد در query استفاده کنيد با توجه به اينکه آن متغير از نوع  integer و يا string است بايد بصورت زير عمل کنيم :
Dim mId as integer
Dim  mName as string
mId=1
mName="a"x
query="Select * from mytable where  id=" & str(mId) & " and name=’" & mName & "’"x

2 – INSERT  : اين دستور برای قرار دادن يک رکورد در جدول استفاده می شود . فرمت کلی اين دستور  بصورت زير است :

INSERT INTO _tablename_  (_field1name_,_field2name_,…) VALUES  (_field1value_,_field2value_,…)x 
مثال :
query="Insert into mytable (id,name) values  (1,’a’)"x

3 – UPDATE : اين دستور برای تغيير مقادير يک رکورد از جدول  استفاده می شود . فرمت کلی اين دستور بصورت زير است :

UPDATE _tablename_ SET  _field1name_=_field1value_,  _field2name_=_field2value_,… 
مثال :

query="Update mytable set id=2 ,  name=’b’"x

4 – DELETE : اين دستور برای حذف يک يا چند رکورد از جدول  استفاده می شود . فرمت کلی اين دستور بصورت زير است :

DELETE FROM _tablename_ WHERE  _condition_ 
مثال :

query="Delete from mytable where  id=1"x

حال که با تکنولوژی ADODB و نيز query های مختلف برای کار با جداول  بانک های اطلاعاتی آشنا شديد می توانيم کلاسی برای کار با بانک های اطلاعاتی  بنويسيم و از آن در صفحات asp استفاده کنيم اما همانطور که در قسمت قبل ديديد برای  اتصال به يک بانک اطلاعاتی نياز به يکسری اطلاعات مثل نام سرور ، نام بانک اطلاعاتی  و ... داريم . چند روش برای دادن اين اطلاعات وجود دارد :
1 – در کلاسی که می  نويسيم اين مقادير را مشخص کنيم . اشکال اين روش اينست که از کلاس نوشته شده تنها  برای يک کاربرد خاص می توانيم استفاده کنيم و در صورتيکه سرور بانک اطلاعاتی و يا  نام بانک اطلاعاتی ويا username و password اتصال تغيير کند بايستی در کلاس نوشته  شده نيز تغييرات را اعمال کرده و مجدداً آنرا کامپايل کنيم .
2 – راه حل دوم  اينست که پارامترها را از طريق asp به متد اتصال موجود در کلاس بفرستيم برای مثال  :
Set  db=server.createobject(“dbclass.database)x
Db.connect(servername,databasename,username,passwo  rd)x
که  coonect متد اتصال به بانک اطلاعاتی در کلاس database می باشد .


3 – روش  سوم آنست که اين پارامترها را در يک فايل XML قراردهيم و در متد connect آنها را از  فايل بخوانيم . مزيت اين روش اينست که پارامترها هم به آسانی قابل تغيير بوده و هم  براحتی آنها می توان آنها را استخراج نمود .

برای اين منظور بايستی ابتدا يک  کلاس برای خواندن اطلاعات از فايل xml بنويسيم که موضوع درس بعد می باشد  .

نکته : در صورتيکه با فرمت فايلهای xml آشنا نيستيد پيشنهاد می کنم يک  مطالعه مقدماتی در اين زمينه انجام دهيد  .

----------------------
*نوشتن کلاس Database - بخش اول :

*پس از  مباحثی که در مورد شی ADODB و چگونگی استفاده از آن در وی بی و نيز استفاده از  فايلهای XML داشتيم اکنون می توانيم يک کلاس کامل و قدرتمند برای کار با بانکهای  اطلاعاتی در ASP بنويسيم .

مراحل کار بصورت زير می باشد :

۱ - ابتدا  يک پروژه از نوع ActiveX Dll ايجاد کنيد و نام آنرا DBase بگذاريد .

۲ - از  بخش References مواردی را که در مباحث قبلی گفته شد به پروژه اضافه کنيد .

۳  - متغير Cn را برای کلاس بصورت زير تعريف کنيد :


Private Cn As  ADODB.Connection 

۴ - ابتدا يک متد به اسم InitialConnection برای کلاس می  نويسيم . در اين متد ابتدا پارامترهای اتصال به بانک اطلاعاتی را مشابه آنچه در درس  قبل گفته شد از يک فايل XML به اسم config.xml می خوانيم و با استفاده از آنها  اتصال به بانک اطلاعاتی را باز می کنيم :

Public Sub  InitialConnection()x
Dim userName, Password, database_name,  server_name
Dim xmlf As NewXMLReader
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
Set Cn =  CreateObject("ADODB.Connection")x
Cn.ConnectionString =  "Provider=SQLOLEDB.1;Password=" & Password & ";Persist Security  Info=True;User ID=" & userName & ";Initial Catalog=" & database_name  & ";Data Source=" & server_name 
Cn.Mode = adModeReadWrite  
Cn.Open 
End Sub

لازم به ذکر است که XMLReader کلاس کار با فايلهای  XML است که در قسمت قبلی در مورد آن صحبت کرديم .

5 - برای بستن اتصال متد  زير را به کلاس اضافه کنيد :

Public Sub  EndConnection()x
Cn.Close
Set Cn = Nothing 
End Sub

6 - برای  اجرای query هايي که نتيجه آنها از نوع Boolean است ( مثل Insert و Delete ) متدی  به اسم ExecuteUpdate را به کلاس اضافه کنيد :

Public Function  ExecuteUpdate(ByVal squery As String) As Boolean
Dim myrs As New  Recordset
If Not (makesInjection(squery)) Then 
myrs.LockType =  adLockOptimistic 
Set myrs = Cn.Execute(squery) x
ExecuteUpdate = True  
Exit Function 
Else
ExecuteUpdate = False 
Exit Function 
End  If
End Function

6 - برای اجرای query هايي که نتيجه آنها از نوع  RecordSet است ( مثل Select ) متدی به اسم ExecuteQuery را به کلاس اضافه کنيد  :

Public Function ExecuteQuery(ByVal squery As String) As Recordset
If  Not (makesInjection(squery)) Then
Set ExecuteQuery =  Cn.Execute(squery)x
Exit Function
Else
Set ExecuteQuery =  Nothing
Exit Function 
End If
End Function

همانطور که می بينيد  در دو متد ExecuteUpdate و ExecuteQuery از تابعی به اسم makesInjection استفاده  شده است . اين تابع بررسی می کند که آيا در query ورودی SQL-Injection وجود دارد يا  نه . 

- اين تابع موضوع قسمت بعدی اين سلسله مباحث می باشد  .
------------------------------------------------
*نوشتن کلاس Database : بخش دوم*
*sql-injection چيست ؟ 
*
همانطور که می  دانيد در اغلب برنامه های کاربردی تحت وب از بانکهای اطلاعاتی استفاده می شود . اين  برنامه ها داده های ورودی کاربر را از طريق فرمهای html دريافت کرده و بر اساس آن  يک query توليد کرده و آنرا به بانک اطلاعاتی ارسال می کنند . در واقع ارتباط بين  برنامه تحت وب با بانک اطلاعاتی بر اساس توليد query از داده های کاربر برقرار می  شود . اکثر اين برنامه ها از زبان SQL برای اين ارتباط استفاده می کنند . اما نکته  ای که در اين بين وجود دارد اينست که توليد query بر اساس داده هايی که کاربر  مستقيماً در فيلدهای ورودی صفحه وب وارد کرده می تواند خطرناک باشد . بعبارت ديگر  اگر برنامه محتويات يک فيلد را که توسط کاربر وارد شده در جلوی يک دستور SQL  بچسباند و آنرا جهت اجرا روی بانک اطلاعاتی بفرستد در اينصورت يک هکر ماهر که با  زبان SQL آشنا باشد می تواند محتويات اين فيلدها را طوری با دستورات SQL پر کند و  چون ای داده ها مستقيماً برای توليد query استفاده می شود ممکنست آن query تبديل به  يک فرمان مخرب شده و پس از اجرا ، اهداف نفوذگر را برآورده نمايد  .
مثال : فرض کنيد دو فيلد به اسمهای username و  password در يک فرم وب قرار دارد که برای ورود به يک سايت استفاده می شود . همچنين  فرض کنيد از اطلاعات اين فيلدها بطور مستقيم يک query بصورت زير برای بانک اطلاعاتی  ارسال شود :
us=request.form("username")
psw=request.form("password")
query="SELECT  * FROM Users WHERE username='"&us&"' AND  password='"&psw&"'"
حال در صورتيکه هکر يک username صحيح ( مثلاً  xxx ) از سيستم را بداند و در فيلد username مقدار صحيح را وارد کرده و در فيلد  password عبارت زير را وارد کند :
1111111' or  username='xxx'
در اينصورت query بصورت زير در می آيد  :
SELECT * FROM Users WHERE username='xxx' AND  password='111111' or username='xxx'
در اينصورت هکر بدون دانستن يک password مجاز  می تواند به سيستم وارد شود .
اين امر بخاطر آنست که چون فيلدهای وارد شده توسط  کاربر بطور مستقيم در query قرار داده شده اند هکر توانسته کاراکتر ' را که در زبان  SQL يک کاراکتر کنترلی بوده و عملکرد خاصی دارد ( عمل خاتمه دادن به عبارت SQL ) را  در در query بگنجاند و سپس با دادن دستورات SQL مناسب کنترل را بدست بگيرد  .
اين سناريو می تواند بسيار خطرناکتر باشد زيرا  هکر می تواند از ساير دستورات SQL مثل INSERT و DELETE نيز استفاده کند  .
- در نگارش مطالب فوق از کتاب " نفوذگری در  شبکه و روشهای مقابله با آن " نوشته مهندس احسان ملکيان استفاده شده است . برای  آشنايی بيشتر با sql-injection و روشهای مقابله با آن به صفحات ۳۲۰ تا ۳۲۸ اين کتاب  مراجعه کنيد .
برای مقابله با اين حملات بايستی از داده های  ارسال شده توسط کاربر مستقيماً query توليد نکنيم بلکه ابتدا عدم وجود کاراکترهای  کنترلی مثل ' و " و ; و *و غيره را در آن بررسی کنيم . برنامه ابتدا بايد در query  وجود چنين کاراکترهايی را در مکانهای غيرمجاز بررسی کند . در بخش بعدی برنامه ای را  جهت بررسی query های SQL بمنظور مقابله با sql-injection ارائه خواهم داد  .
 ------------------------------
تابع بررسی وجود sql-injection که در قسمت قبل در آن صحبت  کرديم بصورت زير است :
Private Function makesInjection(ByVal query  As String) As Boolean
   Dim specialCharacters() As String
   Dim inQoute  As Boolean
   specialCharacters = "-- ;,"
   inQoute = False
   For i =  1 To Len(query)
      Char = Mid(query, i, 1)
      If Mid(query, i, 1) =  "'" And inQoute = False Then
         inQoute = True
         GoTo  EndFor
      End If
      If Mid(query, i, 1) = "'" And inQoute = True  Then
         inQoute = False
         GoTo EndFor
      End  If
      If inQoute = False Then
         For Index = 1 To  UBound(specialCharacters)
            schar =  specialCharacters(Index)
            cchar = Mid(query, i,  Len(schar))
            If schar = cchar Then
              Exit  For
            End If
         Next
         If Index <  UBound(specialCharacters) Then
            makesInjection =  True
            Exit Function
         End If
      End If

EndFor:
        Next
    If inQoute = True Then
       makesInjection = True
    Else
      makesInjection = False
    End  If
End Function ورودی اين تابع query شما و خروجی آن false ياtrue است  .
عملکرد تابع بصورت زير است :
اين تابع در طول رشته query شروع به حرکت می  کند و هر کاراکتر از آنرا بررسی می نمايد . در صورتيکه کاراکتر جاری ‘ باشد و داخل  ‘ ’ نباشيم  متغير مربوط به آن true شده و حلقه يکی بجلو می رود . اما در صورتيکه  کاراکتر جاری ‘ باشد و داخل ‘ ’ باشيم متغير مربوط به  آن false شده و حلقه يکی  بجلو می رود . سرانجام در صورتيکه داخل ‘ ’ نباشيم  بررسی می شود که اين کاراکتر  يکی از کاراکترهای غير مجاز ( کاراکترهای موجود در رشته specialCharacters ) نباشد  که اگر باشد تابع true بر می گرداند .
پس از اتمام حلقه متغير مربوط به ‘ بررسی  می شود که اگر true باشد در صورت injection وجود داسته و تابع نيز true بر می  گرداند .
-----------------------
*نکته ای در مورد شی Recordset  :
*
متد ExecuteQuery که در کلاس  Database نوشتيم يک رکوردست را بعنوان نتيجه انجام query ورودی روی بانک اطلاعاتی  شما برمی گرداند . 
همانطور که می دانيد توسط خصوصيت RecordCount می توان تعداد  رکوردهای نتيجه شده از يک query را که در رکوردست قرار دارند بدست آورد .
اما  مشکلی وجود دارد اينست که با روشی که ما در قسمتهای قبل برای اجرای query در اين  متد استفاده کرده بوديم ( myrs = Cn.Execute query ) نمی توان از خاصيت  Recordcount  رکوردست استفاده نمود زيرا هميشه ۱- برمی گرداند . بعبارت ديگر در  عبارت زير مقدار count هميشه ۱- خواهد بود :
myrs.execute(query)
count=myrs.RecordCount
برای حل اين مشکل بايستی رکوردست را با CursorType  مساوی adOpenStatic باز کرد . بعبارت ديگر بجای دستورات فوق از دستور زير استفاده  کنيد :
myrs.Open squery, Cn, adOpenStatic,  adLockOptimistic
count=myrs.RecordCount

----------


## saeedzx

اینم سورس که میتونی نام کامپیوتر رو عوض کنید

سورس Select_Folder 

سورس چرخش آیکون 

سورس چت در شبکه

----------


## saeedzx

سلام دوست گرامی  Abolfazl Hidden

اینم سورسی که سریال cpu بهتون می ده

RegOCX برای ریجستریکردن ocx 

100% کار میکنه 


دانلود

----------


## saeedzx

یک سورس حسابداری پیشرفته با بانک SQL 2000  که همراه با بانک فروش و خرید و همچنین حساب معین می باشد 

دانلود

پسورد :www.jadougar.ir

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

----------


## saeedzx

*ویژوال بیسیک 6 فارسی* فارسی ساز ویژوال بیسیک 6 بسیار زیبا 
کاملاً فارسی تٿضیحات 

ابتدا این سه فایل رو در مسیر "C:\Program Files\Microsoft Visual Studio\VB98\" کپی کنید بعد برنامه رو اجرا کنید البته این فایل ها ترجیحا برای ویندوز xp نوشته شده است

کارهایی که این فایل ها میکنند عبارتند از :
- 1 فارسی کردن ویژال بیسیک 6
- 2 قالب زشت ویژال بیسیک را به صورت Xp در می آورد
- 3 صفحه آغازین را که خودم طراحی کردم با صفحه اغازین وی بی عوض میکند

نکته مهم اول :
اول از فایل VB6IDE.DLL و VB6.exe موجود در پوشه خود VB یک کپی در جای دیگر برای پشتیبان در صورتت بروز خطا نگه دارید و اگر برنامه کارنکرد برشون گردانید سر جاشون البته من خودم تست کردم 100% جواب می دهد.
.
نکته مهم دٿم :
اگر میخواهید که VB بیشتر فارسی بشه میتونید فایل موجود در پوشه1.5 رو در محل نصب VB کپی کنید که من به شما همون فایل قبلی رو پیش نهاد میکنم و اگه این کار رو کردید و خواستید که به حالت قبل برگردید همین فایل VB6IDE.dll که در اینپوشه است رو به جای اون فایل کپی کنید تا به حالت قبل برگرده
.
نکته مهم سوم :
بچه ها یه وقت فکر نکنید منظٿر من از نوشتن نسخه تمام فارسی VB این کاربود. نــــــــــه من به دو شکل VB رو فارسی کردم که این روش اول بود و روش دوم به این صورتبودکه من طی 3.5 سال VB رو در خودش شـــــــــــــــبیه سازی کردم.
موفق باشید
دانلود

رمز عبور :www.jadougar.ir

----------


## saeedzx

بابت دیرکرد معزرت 

این سورس VB_Decompiler_Lite.rar که با اون میتونید به راحتی یک ocx را باز کنید و متد های استفاده شده را در یک فایل txt ببینید

با سلام خیلی  از برنامه نویسان محترم دونبال سورسی هستند که بتونن با اون ایمیل ارسال کنند 
این سورسی که امروز براتون گذاشتیم دارای تمام فایل های ارسال ایمیل میباشد از جمله فال Php ,smtpو... که فایل ایمیل شما رو ارسال میکنه 

>>> دانلود <<<

  امروزه خیلی از برنامه نویسان در تلاش هستند تا نرم افزار هایی را تولید کنند که هم در ویندوز XP و هم در ویندوز Vista سازگار باشد و چون برنامه نویسان از فایل های ocx زیاد استفاده میکنند باید آن فایل ها مطابق همان ویندوز باشد ما امروز نرم افزاری را برای شما به ارمغان آورده ایم که میتوانید با آن فایل های ocx را ریجستر کنید 

>>> دانلود <<<
رمز عبور :www.jadougar.ir

با سلام به دوستان گلم ببخشید که دیر شد این پست رو آپ کنم خب براتون یک سورس آوردم که واقعا هر کس دانلود نکنه سورس زیبایی رو از دست داده
سورس تنظیم کننده ویندوز xp که شامل تمام قسمت های تنظیمات کنترل پنل و ... می باشد

دانلود کنید

----------


## saeedzx

یک آموزش جالب *Auto Run  برنامه

*کدهای زیر رو در یک فایل به نام autorun.inf قرار بدید


> [autorun]
> OPEN=Project1.exe


حالا این فایل رو در یه درایوتون بزارید
بعد از دبل کلیک روی درایو میبینید که فایل Project1.exe اجرا میشه
Project1.exe میشه فایلی که شما میخواین اجرا بشه

----------


## saeedzx

سورس که برنامه رو روی start up می ذاره

----------


## bahram1030

دو سوال داشتم
1-اگه يك BTN نام نداشته باشد چه بايد كرد  مثل ما ميخواهيم كليد ثبت را كليك كنيم


<tr>
    <td class="titletd" height="100">
    </td>
    <td class="formfieldtd" style="text-align: left" valign="bottom">
        <p>
        <button type="submit" class="btn" style="width: 200; height: 22" onclick="setAction(method,'save');">
            <img border="0" src="/evocher/html/image/blt_01.gif" width="13" height="11"
                 align="absmiddle">
            ثبت
            . . .
        </button>
    </td>
</tr>

اين خط را با ويژوال چگونه كليك كنيم
<button type="submit" class="btn" style="width: 200; height: 22" onclick="setAction(method,'save');">
2-چگونه براي نرم افزار تعريف كنيم منتظر بماند تا ما فلان فيلد يا فلان btn را كليك كنيم


اگه بتونين جواب ما را بديد خيلي ممنون ميشيم

----------


## saeedzx

سلام دوستان

بعد از مدت ها اینم پست جدید در این قسمت که با ویژوال آبکون بسازید




 من یک مشکل پیدا کردم تو این پست هست توجه کنید !!!!

http://www.barnamenevis.org/sh...d.php?t=185363

----------


## iric80

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

----------


## fazelm

> برنامه ای که می خوام معرفی کنم یه برنامه کامل هستش که شامل ابزار بسیار زیادی واسه بدست آوردن اطلاعات سیستم خودتون یا کافی نت ها به کار میره.
> 
> برنامه فوق از دو بخش Tools و Spy-Ware تشکیل شده که با محیط بسیار ساده ای که در اختیار کاربر قرار میده کار کردن با برنامه رو بسیار آسان می کنه.
> 
>   Proccess Manager 
> 
> 
> 
> در این قسمت می تونید به اطلاعات کاملی در مورد پروسس ها  و برنامه های در حال اجرا دسترسی پیدا کنید و به وسیله امکاناتی که در اختیار دارید می تونید هر کدوم از پروسس ها رو کنترل کنید.
> ...


لینک خرابه

----------


## fazelm

> اینم سورس زیبایی که عدد رو به حرف تبدیل می کنه هم فارسی هم انگلیسی 
> 
> اینم یک سورسی که یکی از دوستان ولی نمی دونم کی جالب بود گذاشتم 
> سورسی که تمام امکانات یک کد تلفن داره
> 
> اینم 2 تا سورس حسابداری و انبار داری زیبا که کار دوستان گلمه 
> 
> اینم یک سورس ماشین حساب پیشرفته 
> 
> ...


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

----------


## westavapardaz6

سلام دوست عزیز چرا دیتابیس برنامه حسابداری را قرار نداد؟

----------


## saeedzx

با سلام 

دستور بار کد خان

Private Sub Form_Activate()
    Text1.SetFocus

   
End Sub

----------


## Programer85

سلام چقد شما بلدید ماشالا

----------

