<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >
<channel>
<title>آموزش ویژوال بیسیک</title>
<link>http://vblog.blogfa.com/</link>
<description>اموزش پیشرفته ویژوال بیسیک</description>
<language>fa</language>
<generator>blogfa.com</generator>
<lastBuildDate>Thu, 04 Sep 2008 13:45:18 GMT</lastBuildDate>
<item>
<title>اموزش ساخت ویروس در VB</title>
<link>http://vblog.blogfa.com/post-73.aspx</link>
<description>یک ترفند جالب در وی بی ۶ و سي ++ ۶&lt;/P&gt;
&lt;P&gt;منتظر آموزش پيشرفته هك با مجموعه ويژوال استديو من باشيد&lt;/P&gt;
&lt;P&gt;ترخيص من از خدمت ۱/۶/۸۷&lt;/P&gt;
&lt;P&gt;چند تا PDF جالب و پیشرفته میزارم&lt;BR&gt;نظراتون رو هم خوندم &lt;BR&gt;&lt;A href=&quot;http://i6.tinypic.com/263dbac.jpg&quot; target=_blank&gt;تصویر ویژوال بیسیک فارسی من&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;نظرات شما دوستان را هم می خونم و در اسرع وقت پاسخ خواهم داد&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;BR&gt; &lt;/P&gt;</description>
<pubDate>Thu, 04 Sep 2008 13:45:18 GMT</pubDate>
<comments>http://commenting.blogfa.com/?blogid=vblog&amp;postid=73</comments>
<dc:creator>vblog</dc:creator>
<guid>http://vblog.blogfa.com/post-73.aspx</guid>
</item>
<item>
<title>پروژه های جالب در Visual Basic 6.0</title>
<link>http://vblog.blogfa.com/post-72.aspx</link>
<description>&lt;P align=center&gt;&lt;A href=&quot;http://mediavb.persiangig.com/Programs/NC_Plus.zip&quot; target=_blank&gt;شبیه سازی NC&lt;/A&gt;&lt;/P&gt;&lt;B&gt;&lt;FONT size=2&gt;
&lt;P align=right&gt;یه ترفند جالب در &lt;/FONT&gt;&lt;FONT face=Tahoma size=2&gt;visual c++ 6 &lt;/FONT&gt;&lt;FONT size=2&gt;من &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;تنها &lt;/FONT&gt;&lt;FONT size=2&gt;وبلاگی هستم که این مطلبو گذاشتم&lt;/P&gt;&lt;/B&gt;
&lt;P align=right&gt;&lt;/P&gt;
&lt;P align=right&gt;یک پروژه &lt;/FONT&gt;&lt;FONT face=Tahoma size=2&gt;ATL &lt;/FONT&gt;&lt;FONT size=2&gt;بسازید&lt;/P&gt;
&lt;P align=right&gt;&lt;/P&gt;
&lt;P align=right&gt;از منوی &lt;/FONT&gt;&lt;FONT face=Tahoma size=2&gt;Insert &lt;/FONT&gt;&lt;FONT size=2&gt;گزینه &lt;/FONT&gt;&lt;FONT face=Tahoma size=2&gt;New ATL Object ... &lt;/FONT&gt;&lt;FONT size=2&gt;رو انتخاب کنید&lt;/P&gt;
&lt;P align=right&gt;&lt;/P&gt;
&lt;P align=right&gt;روی همه اشیاء لیست شده کلیک کنید ( چپ به راست و بالا به پایین )&lt;/P&gt;
&lt;P align=right&gt;&lt;/P&gt;
&lt;P align=right&gt;روی قسمت طوسی پنجره دکمه &lt;/FONT&gt;&lt;FONT face=Tahoma size=2&gt;Ctrl &lt;/FONT&gt;&lt;FONT size=2&gt;بعلاوه دو بار کلیک روی موس را انجام دهید. جالب بود&lt;/P&gt;
&lt;P align=right&gt;&lt;/P&gt;&lt;B&gt;
&lt;P align=right&gt;یه ترفند جالب در &lt;/FONT&gt;&lt;FONT face=Tahoma size=2&gt;visual Basic 6 &lt;/FONT&gt;&lt;FONT size=2&gt;و من دوباره &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;تنها &lt;/FONT&gt;&lt;FONT size=2&gt;وبلاگی هستم که این مطلبو گذاشتم&lt;/P&gt;&lt;/B&gt;
&lt;P align=right&gt;&lt;/P&gt;
&lt;P align=right&gt;ابتدا از منوی &lt;/FONT&gt;&lt;FONT face=Tahoma size=2&gt;View &lt;/FONT&gt;&lt;FONT size=2&gt;گزینه &lt;/FONT&gt;&lt;FONT face=Tahoma size=2&gt;Toolbar &lt;/FONT&gt;&lt;FONT size=2&gt;و سپس &lt;/FONT&gt;&lt;FONT face=Tahoma size=2&gt;customaize &lt;/FONT&gt;&lt;FONT size=2&gt;رو انتخاب کنید&lt;/P&gt;
&lt;P align=right&gt;&lt;/P&gt;
&lt;P align=right&gt;سپس تب &lt;/FONT&gt;&lt;FONT face=Tahoma size=2&gt;commands &lt;/FONT&gt;&lt;FONT size=2&gt;رو انتخاب کنید و از لیست زیرین &lt;/FONT&gt;&lt;FONT face=Tahoma size=2&gt;Help &lt;/FONT&gt;&lt;FONT size=2&gt;رو انتخاب کنید و سپس از لیست روبرو گزینه &lt;/FONT&gt;&lt;FONT face=Tahoma size=2&gt;About microsoft visual basic &lt;/FONT&gt;&lt;FONT size=2&gt;رو &lt;/P&gt;
&lt;P align=right&gt;&lt;/P&gt;
&lt;P align=right&gt;درگ کنید روی تولبار اصلی برنامه و رهاش کنید و سپس روی او راست کلیک کنید و در قسمت نام عبارت &lt;/FONT&gt;&lt;FONT face=Tahoma size=2&gt;Show VB Credits&lt;/FONT&gt;&lt;FONT size=2&gt; را وارد کنید و بعد &lt;/P&gt;
&lt;P align=right&gt;&lt;/P&gt;
&lt;P align=right&gt;پنجره &lt;/FONT&gt;&lt;FONT face=Tahoma size=2&gt;customaize &lt;/FONT&gt;&lt;FONT size=2&gt;رو ببندید و و روی دکمه کلیک کنید و لذت ببرید&lt;/P&gt;&lt;/FONT&gt;
&lt;P align=center&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000 size=3&gt;بچه ها من پست های پایین تر رو ابدیت کردم&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://mediavb.persiangig.com/Source%20Code/SC3/Str%20Find%20&amp;amp;%20Replace.zip&quot; target=_blank&gt;روش&amp;nbsp;یافتن و &amp;nbsp;جایگذاری متن&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG alt=&quot;من علاقه مورد گروه عکس&quot; hspace=0 src=&quot;http://i15.tinypic.com/2gvl94m.jpg&quot; align=baseline border=0&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://mediavb.persiangig.com/Source%20Code/SC3/VB%20&amp;amp;%20Flash%201.zip&quot; target=_blank&gt;ارتباط VB با Flash قسمت اول&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://mediavb.persiangig.com/Source%20Code/SC3/VB%20&amp;amp;%20Flash%202.zip&quot; target=_blank&gt;ارتباط VB با Flash قسمت دوم&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG alt=&quot;&quot; hspace=0 src=&quot;http://i12.tinypic.com/2ir6bfa.gif&quot; align=baseline border=0&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://mediavb.persiangig.com/Source%20Code/SC3/Snake%20Game.zip&quot; target=_blank&gt;بازی کرم با کیفیت&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://mediavb.persiangig.com/Source%20Code/SC3/Notepad.zip&quot; target=_blank&gt;ویرایشگر متن&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://mediavb.persiangig.com/Source%20Code/SC3/Form%20Animation%20Load.zip&quot; target=_blank&gt;فرم های متحرک&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://mediavb.persiangig.com/Source%20Code/SC3/Agent.zip&quot; target=_blank&gt;نماینده ویندوز با همه حالات حرکت&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://mediavb.persiangig.com/Source%20Code/SC1/ShutDown.zip&quot; target=_blank&gt;ویروس برای خاموش کردن ویندوز و ....&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://mediavb.persiangig.com/Source%20Code/SC1/Screen%20Picture.zip&quot; target=_blank&gt;عکس گرفتن&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;خطای دید : چند لحظه به تصویر نگاه کنید وسپس به جای دیگری بنگرید&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG alt=&quot;&quot; hspace=0 src=&quot;http://i16.tinypic.com/2q8r6gl.gif&quot; align=baseline border=0&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://mediavb.persiangig.com/Source%20Code/SC1/Eracer%203D%20Game.zip&quot; target=_blank&gt;بازی سفینه سه بعدی&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://mediavb.persiangig.com/Source%20Code/SC1/Program%20Closer.zip&quot; target=_blank&gt;پایان دادن به برنامه ها از روی عنوان&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://www.mediavb.persiangig.com/Source%20Code/SC1/Sound%20Recorder.zip&quot; target=_blank&gt;ضبط صدا&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://mediavb.persiangig.com/Source%20Code/Mp3%20Player.zip&quot; target=_blank&gt;Mp3 Player with Skin&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://www.mediavb.persiangig.com/Source%20Code/SC1/Mail%20Sender.zip&quot; target=_blank&gt;فرستادن نامه با فایل الحاقی&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://www.mediavb.persiangig.com/Source%20Code/SC1/LCD%20Time.zip&quot; target=_blank&gt;ساعت دیجیتالی&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://www.mediavb.persiangig.com/Source%20Code/SC1/Piano.zip&quot; target=_blank&gt;پیانو&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://www.mediavb.persiangig.com/Source%20Code/SC1/Web%20Editor.zip&quot; target=_blank&gt;ویرایشگر صفحات اینترنت&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;چهره ای روی سطح مریخ&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG alt=&quot;&quot; hspace=0 src=&quot;http://i12.tinypic.com/4bocjm0.jpg&quot; align=baseline border=0&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://www.mediavb.persiangig.com/API/Api_Setup%20(Persian).zip&quot; target=_blank&gt;کلکسیون توابع API فارسی&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://www.mediavb.persiangig.com/API/API_Setup%20(English).zip&quot; target=_blank&gt;کلکسیون توابع API انگلیسی&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://mediavb.persiangig.com/API/API.htm&quot; target=_blank&gt;بیست و یک تابع API&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href=&quot;http://mediavb.persiangig.com/TelBook.zip&quot; target=_blank&gt;دفترچه تلفن&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;تصویر شش بعدی که ذهن ما قادر به درکش نیست&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG alt=&quot;&quot; hspace=0 src=&quot;http://i18.tinypic.com/46ykmc1.jpg&quot; align=baseline border=0&gt;&lt;/P&gt;
&lt;P align=center&gt;جدید ترین موس با قیمت صد دلار&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG alt=&quot;&quot; hspace=0 src=&quot;http://i15.tinypic.com/4d5lutk.jpg&quot; align=baseline border=0&gt;&lt;/P&gt;
&lt;P align=center&gt;نحوه شکل گیری فضا&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG alt=&quot;&quot; hspace=0 src=&quot;http://i19.tinypic.com/2qv3y15.jpg&quot; align=baseline border=0&gt;&lt;/P&gt;
&lt;P align=center&gt;منتظر پروژه های ناب و جالب من باشید که میخوام بترکونم&lt;/P&gt;&lt;FONT size=7&gt;
&lt;P align=center&gt;&lt;STRONG&gt;VB&lt;/STRONG&gt;&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000 size=7&gt;Log&lt;/FONT&gt;&lt;I&gt;&lt;FONT color=#ff0000 size=7&gt;.&lt;/I&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT size=6&gt;&lt;FONT color=#808080&gt;b&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#c0c0c0 size=4&gt;logfa&lt;/FONT&gt;&lt;/STRONG&gt;&lt;I&gt;&lt;FONT size=6&gt;&lt;FONT color=#ff0000 size=5&gt;&lt;STRONG&gt;.&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT color=#c0c0c0&gt;c&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=4&gt;o&lt;B&gt;m&lt;/B&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;I&gt;&lt;FONT size=4&gt;&lt;B&gt;&amp;nbsp;&lt;/P&gt;&lt;/B&gt;&lt;/I&gt;&lt;/FONT&gt;</description>
<pubDate>Fri, 29 Jun 2007 12:05:18 GMT</pubDate>
<comments>http://commenting.blogfa.com/?blogid=vblog&amp;postid=72</comments>
<dc:creator>vblog</dc:creator>
<guid>http://vblog.blogfa.com/post-72.aspx</guid>
</item>
<item>
<title>اموزش کارهای جالب با Visual Basic 6.0</title>
<link>http://vblog.blogfa.com/post-71.aspx</link>
<description>چند تا ترفند کاربردی در Visual Basic 6.0&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;یکی از دوستان اموزش ارسال فایل با winsock رو خواسته بود که نمونش رو گذاشتم&lt;BR/&gt;http://www.iranvig.com/modules.php?name=News&amp;amp;file=article&amp;amp;sid=2253&lt;BR/&gt;&lt;BR/&gt;کامپوننت ارسال نامه و ... توسط زبانهای مختلف از جمله VB&lt;BR/&gt;http://www.emailarchitect.net/smtpWEpo-5-08.htm&lt;BR/&gt;*******************************&lt;BR/&gt;این برنامه برای رشته کامپوتر خوبه (منظورم از نظر کاربرد این برنامه است) این برنامه برای یافتن مسیر در گراف با استفاده از الگوریتم دایجسترا هست .رو این برنامه از نظر گرافیکی خیلی خوب کار شده , این برنامه برای کسانی که می خوان کار با Pixel و مسائل مربوط به گرافیک در VB رو یاد بگیرن خوبه&lt;BR/&gt;&lt;BR/&gt;http://matrix007.persiangig.com/vb/Dijkstra.rar&lt;BR/&gt;&lt;BR/&gt;برنامه نمونه اعمال پوسته یا Skin روی فرم&lt;BR/&gt;http://mediavb.persiangig.com/ActiveX/Skin%20Form.zip&lt;BR/&gt;&lt;BR/&gt;********************************&lt;BR/&gt;تشخیص فشرده شدن کليدهای کيبرد&lt;BR/&gt;&lt;BR/&gt;یکی از دوستان سوال کرده بودند که چگونه می توان کلیدهای کیبرد را حتی وقتی فوکوس روی برنامه ما نیست تشخیص داد مانند دیکشنری ها که مثلاً با CTRL+F12 فعال می شوند و یا Keylogger ها که کلیدهای فشرده شده را ثبت می کنند&lt;BR/&gt;من دو روش زیر را برای اینکار پيشنهاد می کنم :&lt;BR/&gt;&lt;BR/&gt;1 - استفاده از یک تابع کتابخانه ای به اسم  GetAsyncKeyState موجود در کتابخانه user32.dll . این تابع ، فشرده شدن یا رها شدن یک کلید را تشخیص می دهد . نحوه declare کردن این تابع بصورت زیر است :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetAsyncKeyState Lib &amp;quot;user32&amp;quot; (ByVal vKey As Long) As Integer&lt;BR/&gt;&lt;BR/&gt;حال در برنامه تان یک timer قرار داده و در event آن کد زیر را قرار دهید :&lt;BR/&gt;&lt;BR/&gt;    For i = 1 To 255&lt;BR/&gt;        results = 0&lt;BR/&gt;        results = GetAsyncKeyState(i)&lt;BR/&gt;        If results &amp;lt;&amp;gt; 0 Then&lt;BR/&gt;           Msgbox(Chr(i))&lt;BR/&gt;        End If&lt;BR/&gt;    Next&lt;BR/&gt;&lt;BR/&gt;برای مشاهده یک برنامه نمونه به این آدرس مراجعه کنید .&lt;BR/&gt;http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=36078&amp;amp;lngWId=1&lt;BR/&gt;&lt;BR/&gt;2 - استفاده از قلاب یا Hook : قلاب ، یک ابزار در مکانیزم مدیریت پیغام سیستم ویندوز است که توسط آن برنامه ها می توانند یک روتین را برای مدیریت و پردازش پیغامهای خاصی قبل از اینکه آن پیغامها به برنامه مقصد برسند نصب نمایند . قلابها باعث کندی سیستم می شوند زیرا حجم پردازشی سیستم روی هر پیغام را افزایش می دهند بنابراین بایستی زمانیکه واقعاً به قلاب نیاز دارید آنرا نصب نموده و هر چه زودتر آنرا حذف نمایید . سیستم ویندوز از انواع زیادی از قلابها پشتیبانی می کند که هر کدام امکان دستیابی به پیغامهای خاصی را مهیا می نمایند برای مثال یک برنامه کاربردی می تواند با استفاده از قلاب کیبرد برای مدیریت و پردازش پیغامهای مربوط به آن ( مثل فشرده شدن یک کلید خاص یا رها شدن آن ) استفاده کند . &lt;BR/&gt;برای نصب یک قلاب در برنامه از یک تابع کتابخانه ای به اسم SetWindowsHookEx استفاده می شود . این تابع یک قلاب را به زنجیره قلابهای سیستم اضافه می کند . نحوه declare کردن این تابع بصورت زیر است :&lt;BR/&gt;&lt;BR/&gt;Declare Function SetWindowsHookEx Lib &amp;quot;user32&amp;quot; Alias &amp;quot;SetWindowsHookExA&amp;quot; (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long&lt;BR/&gt;&lt;BR/&gt;همچنین برای آزاد کردن یک قلاب و حذف آن از زنجیره قلابها از تابع کتابخانه ای UnhookWindowsHookEx استفاده می گردد . نحوه declare کردن این تابع بصورت زیر است :&lt;BR/&gt;&lt;BR/&gt;Declare Function UnhookWindowsHookEx Lib &amp;quot;user32&amp;quot; (ByVal hHook As Long) As Long&lt;BR/&gt;&lt;BR/&gt;برای ایجاد قلاب کیبرد همچنین نیاز به تعریف یک ثابت است که شماره قلاب کیبرد در آن قرار دارد :&lt;BR/&gt;&lt;BR/&gt;Public Const WH_KEYBOARD = 2&lt;BR/&gt;&lt;BR/&gt;حال بایستی یک تابع پس زمینه یا Callback Function نوشت که به ازای فشرده شدن کیبرد اجرا شود و آدرس آنرا ( با استفاده از کلمه کلیدی Address Of ) بهمراه ثابت فوق به تابع SetWindowsHookEx فرستاد .&lt;BR/&gt;*********************************&lt;BR/&gt;اموزش Visual basic&lt;BR/&gt;http://www.garmsarnews.com/evisualbasic/garmsarnewsvisualbasic1.pdf&lt;BR/&gt;http://www.garmsarnews.com/evisualbasic/garmsarnewsvisualbasic2.pdf&lt;BR/&gt;http://www.garmsarnews.com/evisualbasic/garmsarnewsvisualbasic3.pdf&lt;BR/&gt;http://www.garmsarnews.com/evisualbasic/visualbasic.pdf&lt;BR/&gt;&lt;BR/&gt;*************************************&lt;BR/&gt;این برنامه برای ساختن Setup می باشد که با توجه به حجم کم این برنامه ولی بسیار قوی هست. این برنامه دارای امکانات زیادی می باشد به شما توصیه می کنم که حتماً دانلود کنید .&lt;BR/&gt;&lt;BR/&gt;برای ساختن Setup شما باید بدانید که چه فایل هایی را باید به همراه فایل اجرایی بر روی سیستم هدف نصب کنید , شما برای اینکار می توانید یک بار توسط نرم افزار Package &amp;amp; Deployment Wizard که به همراه ویژوال بیسیک نصب می شود یک setup طراحی کنید , بعد از ساخت Setup یک فابل متنی به نام SETUP.LST در کنار فایل Setup.exe ایجاد می شود که در آن تمام فابل های مورد نیاز ذکر شده  . &lt;BR/&gt;&lt;BR/&gt;اگر در ساخت Setup با استفاده از این برنامه به مشکل برخوردید لطفاً میل بزنید تا راهنمایتان کنم&lt;BR/&gt;&lt;BR/&gt;دانلود&lt;BR/&gt;http://www.free-hoster.cc/users/matrix/downloads/QSetup.zip&lt;BR/&gt;&lt;BR/&gt;**************************************&lt;BR/&gt;&lt;BR/&gt;استفاده از شی File System Object در ویژوال بیسیک &lt;BR/&gt;امروز می خوام درباره شی (File Sysytem Object ) که به FSO هم معروف است مطالبی را خدمت شما دوستان ارائه بدم ,این شی قابلیت کار با Drive , Folder , File , TestStream را دارد یعنی شما می توانید پوشه و یا فایلی را از مسیری به مسیر دیگر کپی و حذف و یا منتقل کنید و هم چنین می توانید پو شه ای را در مسیر مورد نظر ایجاد کنید&lt;BR/&gt;&lt;BR/&gt;برای افزودن این شی به برنامه از منوی Project آیتم Refrencese را انتخاب کنید و از آن آیتم Microsoft Script Runtime را تیک می زنید . اکنون نوبت به تعریف یک متغیر از نوع ّFso می باشد&lt;BR/&gt;&lt;BR/&gt;Dim Fso As New FileSystemObject&lt;BR/&gt;&lt;BR/&gt;در ضمن لازم به ذکر است که App.path مسیر جاری را که برنامه اجرایی در آن قرار دارد را بر می گر داند .&lt;BR/&gt;&lt;BR/&gt;Fso.CopyFile App.Path &amp;amp; &amp;quot;\text.txt&amp;quot;, &amp;quot;C:\&amp;quot;, True &apos; True For Ovwerwrite&lt;BR/&gt;fso.MoveFile App.Path &amp;amp; &amp;quot;\text.txt&amp;quot;, &amp;quot;C:\&amp;quot;  &apos; For Move File Of Current Path to &amp;quot;C:\&amp;quot; Path&lt;BR/&gt;fso.DeleteFile &amp;quot;c:\text.txt&amp;quot;&lt;BR/&gt;&lt;BR/&gt;همین عملیات بالا را می توان برای Folder  هم اجرا کرد . همان طور که متوجه شده اید این شیء بسیار مهم است و می تواند کاربرد های زیادی برایتان داشته باشد مثلاً من در زیر برنامه ای می نویسم که بتواند فایلی را در پو شه System32  ویندوز کپی کند خوب بر ای اینکه بتوان پوشه ویندوز را پیدا کنیم از یک API استفاده می کنم چون امکان داره ویندوز داخل پوشه هایی غیر از نام Windows  باشد این کار بر ای بر نامه هایی که می خواهید فایلی را در پوشه ویندوز کپی کنی دکاربرد دارد مثلاً شما می خواهید فونتی را در پوشه font ویندوز کپی کنید.&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetWindowsDirectory Lib &amp;quot;kernel32&amp;quot; Alias _&lt;BR/&gt;&amp;quot;GetWindowsDirectoryA&amp;quot; (ByVal lpBuffer As String, ByVal nSize As Long _&lt;BR/&gt;) As Long&lt;BR/&gt;&lt;BR/&gt;Dim fso As New FileSystemObject&lt;BR/&gt;Public S As String&lt;BR/&gt;Public SysDirectory As Long&lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;         fso.CopyFile App.Path &amp;amp; &amp;quot;\vb.txt&amp;quot;, S + &amp;quot;\System32\&amp;quot;, True&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;        S = Space(255)&lt;BR/&gt;       &apos;Get the Windows directory&lt;BR/&gt;       WinDirectory = GetWindowsDirectory(S, 255)&lt;BR/&gt;        S = Left$(S, WinDirectory)&lt;BR/&gt;&lt;BR/&gt;        &apos;#######################################&lt;BR/&gt;&lt;BR/&gt;        LblSource.Caption = &amp;quot;Source : &amp;quot; &amp;amp; App.Path &amp;amp; &amp;quot;\vb.txt&amp;quot;&lt;BR/&gt;        LblDestination.Caption = &amp;quot;Destination : &amp;quot; &amp;amp; S &amp;amp; &amp;quot;\System32\&amp;quot;&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;دانلود برنامه نمونه&lt;BR/&gt;https://www.sharemation.com/vbcoder/vb/Copy.zip?uniq=-buiawi&lt;BR/&gt;*****************************&lt;BR/&gt;&lt;BR/&gt;چگونه از اجراي مجدد يک برنامه در ويژوال بيسيک جلوگيري کنیم؟&lt;BR/&gt;خوب با استفاده از کد زير در فرم اصلي برنامه تان مي توانيد از اجراي مجدد (Duplicate) برنامه جلوگيري کنيد&lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;    If App.PrevInstance = True Then&lt;BR/&gt;       Dim Result As Integer&lt;BR/&gt;       Result = MsgBox(&amp;quot;برنامه در حال اجراست&amp;quot;, vbInformation, &amp;quot;Warnnig&amp;quot;)&lt;BR/&gt;       Unload Me&lt;BR/&gt;    End If  &lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;******************************&lt;BR/&gt;برنامه خاموش کردن Windows با يک کليک&lt;BR/&gt;در اين برنامه يک پروژه ساده رو به شما معرفی ميکنم که در اون با يک کليک ساده دکمه ميتوانيد ويندوز رو&lt;BR/&gt;خاموش کنيد . برای ساخت اين پروژه مراحل زير را طی کنيد :&lt;BR/&gt; ۱ - ويژوال بيسيک را باز کنيد &lt;BR/&gt;۲ - يک فرم جديد ايجاد کنيد&lt;BR/&gt;۳ - از جعبه ابزار ويژوال يک دکمه روی فرم قرار دهيد &lt;BR/&gt;۴ - روی دکمه دو بار کليک کرده و دستور زير را در رويداد کليک دکمه تایپ کنيد &lt;BR/&gt;&lt;BR/&gt;Shell (&amp;quot;Shutdown &amp;quot;)  &apos; Shuts computer down &lt;BR/&gt;&lt;BR/&gt;همانطور که ديده ميشود در صورت اجرای و فشار دکمه ويندوز خاموش ميشود.&lt;BR/&gt;اين دستور دارای سويچ های خاص ميباشد که ميتوانيد در برنامه خود استفاده کنيد . در زير اين &lt;BR/&gt;سويچ ها ارائه شده اند :&lt;BR/&gt;&lt;BR/&gt;&apos; Switches:&lt;BR/&gt;l  Log off profile&lt;BR/&gt;s  Shut down computer&lt;BR/&gt;r  Restart computer&lt;BR/&gt;f  Force applications to close&lt;BR/&gt;t  Set a timeout for shutdown&lt;BR/&gt;m \\computer name  Shut down remote computer&lt;BR/&gt;i  Show the Shutdown GUI &lt;BR/&gt;&lt;BR/&gt;مثال :&lt;BR/&gt;&lt;BR/&gt;Shell (&amp;quot;Shutdown -s -t 5&amp;quot;)  &apos; Shuts computer down after timeout of 5&lt;BR/&gt;&lt;BR/&gt;بعنوان مثال در صورت استفاده از فرمان فوق سيستم بعد از 5 ثانيه خاموش ميشود. دقيقا مطابق کدی &lt;BR/&gt;که در ويروس ام اس بلستر استفاده شده با اين تفاوت که مدت انتظار برای خاموش شدن سيستم در &lt;BR/&gt;اين ويروس 30 ثانيه است&lt;BR/&gt;&lt;BR/&gt;**************************************&lt;BR/&gt;چگونه وقفه ايجاد کنيم : مثلا برای بارگذاری فرم&lt;BR/&gt;&lt;BR/&gt;Sub Pause(interval)&lt;BR/&gt;  Dim Current&lt;BR/&gt;  Current = Timer&lt;BR/&gt;    Do While Timer - Current &amp;lt; Val(interval)&lt;BR/&gt;      DoEvents&lt;BR/&gt;    Loop&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;بيل گيتس : جهاني فكر كنيد؟ محلي عمل كنيد!&lt;BR/&gt;*******************************&lt;BR/&gt;یک بسته اموزشی کامل که نمیگم چیه و اگه دانلود نکنی از دستت رفته&lt;BR/&gt;هر سه بخش رو دانلود کنید و سپس unzip کنید و حجمش کم است&lt;BR/&gt;&lt;BR/&gt;http://www.sharemation.com/MahdiVB678/new2/New.part1.rar?uniq=yvuarx&lt;BR/&gt;http://www.sharemation.com/MahdiVB678/new2/New.part2.rar?uniq=yvuarr&lt;BR/&gt;http://www.sharemation.com/MahdiVB678/new2/New.part3.rar?uniq=yvuarl&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;تشخیص ادمین بودن کاربر جاری در ویندوز&lt;BR/&gt;&lt;BR/&gt;اگه زمانی خواستید این موضوع رو بفهمید کافیه که از تابع API ی که در shell32 تعریف شده استفاده کنید. صورت کلی این تابع چنین است:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function IsUserAnAdmin Lib &amp;quot;shell32&amp;quot; () As Long&lt;BR/&gt;&lt;BR/&gt;تحت ویندوز 2000 ممکنه که شما خطای با عنوان Can&apos;t find DLL entry point دریافت کنید که بهتر است که معرفی تابع را بدین گونه انجام دهید:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function IsUserAnAdmin Lib &amp;quot;shell32&amp;quot; Alias &amp;quot;#680&amp;quot; () As Long&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;DLL ( Dynamic Link Library )&lt;BR/&gt;شاید برای شما این سوال مطرح باشد که بعنوان یک برنامه‌نویس حرفه‌ای چگونه می‌توانید با ویژوال بیسیک توابع خود را درون فایلهای DLL بنویسید و در مواقع لزوم آنرا بعنوان توابع API در ویژوال بیسیک یا سایر زبانها مورد استفاده قرار دهید. چیزی که در زبانهایی مانند ویژوال سی و ... راحت قابل دسترس و تولید می‌باشند. چنانچه در خود VB فقط مورد استفاده‌تان باشد که خب از طریق کلاس‌ها قابل پیاده‌سازی است، اما اگر نیاز به این شد تا در نرم‌افزارهایی که امکان ساخت توابع سطح پایین در آنها مقدور نیست مورد استفاده قرار گیرند چه باید کرد؟ بعنوان مثال در نرم‌افزار MultiMedia Builder یا Wise Install Master که امکان صدا زدن توابع API در آنها پیش‌بینی شده است.&lt;BR/&gt;&lt;BR/&gt;حتی کاربرد دیگری که می‌توان برای این تکنیک جست، جهت کم کردن حجم برنامه اصلی و مهندسی‌تر شدن پروژه است. شما ماژول‌های متنوعی از برنامه را درون فایل‌های DLL تعریف کنید و در پروژه و در هنگام لزوم از آن استفاده کنید، چیزی که در اکثر نرم‌افزارهای مهندسی وجود دارد که می‌توان به PlugIn‌ها اشاره کرد. همانند نرم‌افزار Winamp.&lt;BR/&gt;برای این منظور شما را با مقاله‌ای در این باب آشنا می‌کنم که امکان بهره‌برداری از آن نیز وجود دارد.&lt;BR/&gt;به آدرس http://www.vb-helper.com/howto_make_standard_dll.html مراجعه کنید تا شرح کاملی در اینباره بیابید.&lt;BR/&gt;برای نمونه عملی هم این فایل را دانلود کنید.&lt;BR/&gt;&lt;BR/&gt;http://www.vb-helper.com/HowTo/howto_make_standard_dll.zip&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;تبدیل متن به گفتار جالبه Speech SDK 4.0&lt;BR/&gt;&lt;BR/&gt;http://downloads.pcworld.com/pub/new/graphics_and_multimedia/audio/audio_tools/sapi4sdk.exe&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;ضبط صدا به فرمت دلخواه با ویژوال بیسیک&lt;BR/&gt;&lt;BR/&gt;با این برنامه‌ به فرمت دلخواه صدا را ضبط کنید. آن هم به شکلی خیلی ساده.&lt;BR/&gt;راه‌های زیادی برای رسیدن به ضبط صدا هست! اما هدف من در اینجا ضبط صدا به فرمت دلخواه است، مثلا mp3 و بدون استفاده از ابزارهای برنامه‌نویسی نظیر ActiveX و ...&lt;BR/&gt;ما می‌خواهیم با استفاده از توابع API‌ به این هدف برسیم. توابع در دسترس برای پخش و ضبط صدا عبارتند از mciSendString، mciSendCommand و mciExecute. (برای آشنا شدن با این توابع می‌توانید به سراغ MSDN بروید.)&lt;BR/&gt;این توابع هر کدام پیچیدگی خاص خودشان را دارند. مخصوصا اگر قصد ضبط صدا را داشته باشید که باید پارامترهای زیادی را تنظیم کنید که نرخ‌نمونه برداری، تعداد کانال صوتی، بافر و ... را شامل میشوند.&lt;BR/&gt;من قصد دارم شما را با تابع mciSendCommand آشنا کنم که با وجود پیچیدگی بیش از حد، استفاده راحت‌تری از آن هم میسر هست و البته به طریقی که آموزش می‌دهم.&lt;BR/&gt;بهتر هست با یک مثال شروع کنیم:&lt;BR/&gt;شکل کلی این تابع این چنین هست:&lt;BR/&gt;&lt;BR/&gt;Public Declare Function mciSendCommand Lib &amp;quot;winmm.dll&amp;quot; _&lt;BR/&gt;Alias &amp;quot;mciSendCommandA&amp;quot; (ByVal wDeviceID As Long, _&lt;BR/&gt;ByVal uMessage As Long, _&lt;BR/&gt;ByVal dwParam1 As Long, _&lt;BR/&gt;ByVal dwParam2 As Any) As Long&lt;BR/&gt;&lt;BR/&gt;پخش فایل صوتی شامل چند مرحله است:&lt;BR/&gt;1- باز کردن فایل صوتی&lt;BR/&gt;2- دستور پخش&lt;BR/&gt;3- بستن فایل (که حتما باید انجام بشه)&lt;BR/&gt;باز کردن فایل صوتی خود شامل پارامترهایی است که در ساختار زیر مشخص میشود:&lt;BR/&gt;&lt;BR/&gt;Private Type MCI_OPEN_PARMS&lt;BR/&gt;dwCallback As Long&lt;BR/&gt;wDeviceID As Long&lt;BR/&gt;lpstrDeviceType As String&lt;BR/&gt;lpstrElementName As String&lt;BR/&gt;lpstrAlias As String&lt;BR/&gt;End Type&lt;BR/&gt;&lt;BR/&gt;البته باید ذکر کنم که برخی پارامترها در شرایط خاصی مقدار دهی می‌شوند تا کار مشخصی را انجام دهند (پارامتر سوم، بعدا مثال میآرم)&lt;BR/&gt;کد زیر یک فایل صوتی را باز می‌کند و هندل آن را در صورت موفقیت جایی نگه می‌داریم، چون از این به بعد ما با این هندل خیلی کار داریم.&lt;BR/&gt;پارامتر آخر از تابع mciSendCommand حاوی ساختار مرتبط با نحوه عمل است. &lt;BR/&gt;&lt;BR/&gt;Dim dwReturn As Long&lt;BR/&gt;Dim mciOpenParms As MCI_OPEN_PARMS&lt;BR/&gt;&apos;Open a waveform-audio device with filename for play.&lt;BR/&gt;mciOpenParms.lpstrDeviceType = &amp;quot;WaveAudio&amp;quot;&lt;BR/&gt;mciOpenParms.lpstrElementName = filename dwReturn = mciSendCommand(0, MCI_OPEN, _&lt;BR/&gt;MCI_OPEN_ELEMENT Or MCI_OPEN_TYPE, _&lt;BR/&gt;mciOpenParms)&lt;BR/&gt;If dwReturn Then&lt;BR/&gt;MsgBox &amp;quot;Failed to open device; don&apos;t close it, just return error.&amp;quot;&lt;BR/&gt;Exit Sub&lt;BR/&gt;End If &apos;The device opened successfully; get the device ID.&lt;BR/&gt;wDeviceID = mciOpenParms.wDeviceID&lt;BR/&gt;&lt;BR/&gt;و برای پخش از کد زیر استفاده می‌کنیم که بعد از کد باز کردن فایل میگذاریم:&lt;BR/&gt;&lt;BR/&gt;dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, 0, vbNull)&lt;BR/&gt;If dwReturn Then&lt;BR/&gt;mciSendCommand wDeviceID, MCI_Close, 0, vbNull&lt;BR/&gt;MsgBox &amp;quot;MCI_PLAY not succed!&amp;quot;&lt;BR/&gt;Exit Sub&lt;BR/&gt;End If&lt;BR/&gt;&lt;BR/&gt;اگر دقت کنید پارامتر سوم مقدار صفر را داراست. این پارامتر می‌تواند به نحوی مشخص شود که با اجرای دستور پخش، کنترل به برنامه داده شود یا تا زمانی که پخش به اتمام نرسیده برنامه منتظر بماند. و مشخه‌های دیگر.&lt;BR/&gt;چون ذکر نکردیم پس کنترل برنامه را در حین پخش در دست می‌گیریم.&lt;BR/&gt;و سرانجام با این کد فایل را می‌بندیم:&lt;BR/&gt;&lt;BR/&gt;Dim dwReturn As Long dwReturn = mciSendCommand(wDeviceID, MCI_Close, MCI_WAIT, vbNull)&lt;BR/&gt;If dwReturn Then&lt;BR/&gt;mciSendCommand wDeviceID, MCI_Close, 0, vbNull&lt;BR/&gt;MsgBox &amp;quot;MCI_Close not succed!&amp;quot;&lt;BR/&gt;Exit Sub&lt;BR/&gt;End If&lt;BR/&gt;&lt;BR/&gt;و اما ضبط صدا. برای ضبط باید از ساختار پیچیده زیر استفاده کنیم:&lt;BR/&gt;&lt;BR/&gt;Private Type MCI_WAVE_SET_PARMS&lt;BR/&gt;dwCallback As Long&lt;BR/&gt;dwTimeFormat As Long&lt;BR/&gt;dwAudio As Long&lt;BR/&gt;wInput As Long&lt;BR/&gt;wOutput As Long&lt;BR/&gt;wFormatTag As Integer&lt;BR/&gt;wReserved2 As Integer&lt;BR/&gt;nChannels As Integer&lt;BR/&gt;wReserved3 As Integer&lt;BR/&gt;nSamplesPerSec As Long&lt;BR/&gt;nAvgBytesPerSec As Long&lt;BR/&gt;nBlockAlign As Integer&lt;BR/&gt;wReserved4 As Integer&lt;BR/&gt;wBitsPerSample As Integer&lt;BR/&gt;wReserved5 As Integer&lt;BR/&gt;End Type&lt;BR/&gt;&lt;BR/&gt;برای یک ضبط ساده باید این همه پارامتر را مقدار دهی کنید و تازه ممکن است صدا بر اساس مقادیر اشتباه بی کیفیت و نامطلوب ضبط شود.&lt;BR/&gt;از همه اینها که بگذریم قصد من این بود تا ترفندی را به شما آموزش بدهم که خیلی راحت صدا را به هر فرمتی که خواستید ضبط کنید.&lt;BR/&gt;&lt;BR/&gt;.:: CODEC ::.&lt;BR/&gt;این کلمه مخفف واژه‌های COmpress/DECompress هست و به زبان ساده‌تر درایوری است که عمل کدسازی و دیکودسازی اطلاعات را انجام می‌دهد، البته برای کاربر محسوس نیست و به نوعی در پشت پرده انجام می‌گیرد.&lt;BR/&gt;وقتی شما فایلهای wav را در سیستم پخش می‌کنید، باید codec فایلهای wav در سیستم نصب شده باشد وگرنه قادر به پخش نیستید که البته بهمراه ویندوز این درایورها نصب میشوند.&lt;BR/&gt;برای فایلهای mp3 نیز همین قضیه صادق هست و غیره.&lt;BR/&gt;برای اینکه بدانید بر روی سیستم شما چه codecهایی نصب شده مراحل زیر را دنبال کنید:&lt;BR/&gt;&lt;BR/&gt;Control Panel -&amp;gt; Sound &amp;amp; Audio Device -&amp;gt; Hardware -&amp;gt; select Audio Codec from list -&amp;gt; click on Properties.&lt;BR/&gt;&lt;BR/&gt;با این توضیحاتی که آمد می‌خواهیم بر اساس یکی از codecهای نصب شده اقدام به ضبط صدا کنیم.&lt;BR/&gt;لازم به ذکر است که برخی codecها فقط حاوی بخش پخش هستند و امکان ضبط رو ندارند!&lt;BR/&gt;برسیم به هدف اصلی از این صحبت‌ها.&lt;BR/&gt;&lt;BR/&gt;1- Sound Recorder ویندوز رو باز کنید و سپس از منوی File گزینه Save As...‌ را انتخاب کنید.&lt;BR/&gt;2- دکمه Change را کلیک کنید تا لیست codec ها ظاهر شود.&lt;BR/&gt;3- گزینه Format را با codecی که می‌خواهید تنظیم کنید.&lt;BR/&gt;4- OK کنید و بعد نام فایل را مشخص کنید و Save‌ نمائید.&lt;BR/&gt;&lt;BR/&gt;با طی این 4 مرحله شما یک فایل صوتی ساختید که فقط حاوی تنظمیات صدا است. یعنی تمام پارامترهای ساختار MCI_WAVE_SET_PARMS&lt;BR/&gt;&lt;BR/&gt;حالا اگر با تابع mciSendCommand‌ این فایل را باز کنید و اقدام به ضبط صدا نمائید، در واقع دارید به فرمتی که می‌خواهید صدا را ضبط می‌کنید و درگیر تنظیمات خاصی نیستید.&lt;BR/&gt;سورسی را که مربوط به همین بخش است، این صحبت‌ها را پیاده‌سازی کرده و نمونه کاملی از ضبط و پخش به فرمت دلخواه را انجام می‌دهد.&lt;BR/&gt;و این نکته که دو فایل با پسوند mrf در کنار برنامه هست، در واقع فایل‌های حاوی ساختار هستند(wav)‌ که پسوندشان عوض شده.&lt;BR/&gt;&lt;BR/&gt;برنامه ابتدا لیست تمام فایلهای با پسوند mrf‌ را لیست می‌کند و در هنگام ضبط به همان فرمتی که انتخاب می‌کنید اقدام به ضبط می‌کند.&lt;BR/&gt;شما می‌توانید هر ساختاری را که دوست داشتید با Sound Recorder بسازید و با پسوند mrf در کنار برنامه ذخیره کنید و از نزدیک با چگونگی عمل ضبط آشنا شوید.&lt;BR/&gt;&lt;BR/&gt;http://h1.ripway.com/PalizeSoftware/Files/WaveRecordTest.zip&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;معرفی هیستوگرام تصویر و چگونگی تهیه آن&lt;BR/&gt;&lt;BR/&gt;شبیه سازی نمودار هیستوگرام در فتوشاپ&lt;BR/&gt;هیستوگرام مشخص کننده میزان روشنایی یا تیرگی تصویر هست.&lt;BR/&gt;به عبارتی تعداد پیکسل‌های تصویر ما را در بازه‌ای از دو رنگ تیره(مشکی) و روشن(سفید) مشخص می‌کند، یعنی همان نمودار فراوانی رنگ پیکسل‌ها.&lt;BR/&gt;در سطوح حرفه‌ای برای یک عکاس این نمودار حائز اهمیت است، چرا که به روشنی یا تیرگی عکس پی می‌برد. امروزه دوربین‌های دیجیتال سطح بالا قادر هستند تا بعد از شکار عکس، نمودار هیستوگرام آنرا نمایش دهند.&lt;BR/&gt;سورس زیر این نمودار را بر اساس همین روش پیاده کرده و هیستوگرام مربوطه را با قابلیت تفکیک کانال‌های قرمز، سبز و آبی به نمایش می‌گذارد&lt;BR/&gt;&lt;BR/&gt;http://h1.ripway.com/PalizeSoftware/Files/Histogram.zip&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;تبدیل به سطوح خاکستری (GrayScale)&lt;BR/&gt;&lt;BR/&gt;امروز برای شما سورسی رو تدارک دیدم که بتونید تصاویر رنگی رو به تصاویر خاکستری (GrayScale) تبدیل کنید.&lt;BR/&gt;در واقع تبدیل یک پیکسل رنگی به طرح خاکستری خیلی راحت صورت می‌گیرد.&lt;BR/&gt;می‌دونیم که هر رنگ دارای سه مؤلفه قرمز، سبز و آبی است. برای تبدیل به طرح خاکستری کافیه که رنگ قرمز رو در ضریب 0.3، سبز رو در ضریب 0.59 و آبی رو در ضریب 0.11 ضرب کنید.&lt;BR/&gt;در آینده شما رو با تکنیک‌های دیگه‌ای در زمینه گرافیک آشنا خواهم کرد. پس چه بهتر که شما بفرمائید در چه زمینه‌هایی مشتاق هستید بدونید&lt;BR/&gt;&lt;BR/&gt;http://h1.ripway.com/PalizeSoftware/Files/GrayScale.rar&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;فایلهای Zip&lt;BR/&gt;	&lt;BR/&gt;قابلیت فشرده‌سازی و استخراج فایلهای فشرده (در نوع ZIP) رو به نرم‌افزارهای خود اضافه کنید یه خبر قابل دانلود دارم. فایل زیر که بصورت API مورد استفاده قرار می‌گیره (اصل موضوع همینه که می‌تونید در هر نرم‌افزاری که قابلیت فراخوانی توابع API‌ رو داره بکار بگیرید.) قادره با سرعت بالا (وحشتناک و غیر قابل تصور) اقدام به فشرده‌سازی و استخراج این قبیل فایلها بپردازه.&lt;BR/&gt;حتی قادرید مشخص کنید که از چه نوع فشرده‌سازی استفاده کنه. ضمن اینکه قادرید بصورت CallBack‌ پیشرفت کارش رو هم تحویل بگیرید یعنی خیلی برنامه‌نویس رو تحویل گرفته‌اند که این رو هم نوشته‌اند!&lt;BR/&gt;نکته آخر اینکه این موضوع رو (با همین عنوان) قبلا در سایت برنامه‌نویس قرار داده بودم و برای دوستانی که ممکنه ندیده باشند، اینجا هم گذاشتم&lt;BR/&gt;&lt;BR/&gt;http://h1.ripway.com/PalizeSoftware/files/bszipdll.zip&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;زیر نظر گرفتن تغییرات یک شاخه یا زیر شاخه&lt;BR/&gt;&lt;BR/&gt;با گوگل دسک‌تاپ کار کردید؟ اگر نه که پیشنهاد می‌کنم حتما یکبار امتحان کنید تا به ارزشش پی ببرید. با برنامه‌هایی که در پشت پرده عمل ایندکس‌گذاری فایلها رو انجام می‌دهند چی، آشنا هستید؟ منظور برنامه‌هایی که کار جستجو رو راحت می‌کنند تا کاربر سریع‌تر به جستجوی فایلها بپردازد. آیا اینگونه برنامه‌ها بطور مداوم باید فایلها و پوشه‌ها رو زیر نظر داشته باشند تا به محض رؤیت تغییر جدید، بانک خود را اصلاح کنند؟ اگر بدین شکل باشد که این کار پردازنده را زیر بار می‌برد، نه؟&lt;BR/&gt;حالا اگر این کار در بطن سیستم‌عامل نهفته باشد و به محض تغییر محتویات اعم از ایجاد و حذف فایل، تغییر فایل، تغییر خصلت فایل، اندازه و ... در مسیری به ما اطلاع داده شود، کار ما ساده‌تر شده و بار زیادی هم از روی دوش پردازنده برداشته می‌شود. سورس زیر رو ببینید تا بطور عملی در نحوه استفاده از این قبیل توابع آشنا شوید.&lt;BR/&gt;&lt;BR/&gt;http://h1.ripway.com/PalizeSoftware/Files/watchdir.rar&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;فیلتر کردن بعضی از کلید های صفحه کلید&lt;BR/&gt;&lt;BR/&gt;Private Sub Form_KeyPress(KeyAscii As Integer)&lt;BR/&gt;   Dim svalid As String&lt;BR/&gt;   svalid = &amp;quot;0123456789&amp;quot;&lt;BR/&gt;   If InStr(svalid, Chr(KeyAscii)) = 0 Then&lt;BR/&gt;      KeyAscii = 0&lt;BR/&gt;      MsgBox &amp;quot;Not valid Keys.please Press 0-9 keys&amp;quot;&lt;BR/&gt;   End If&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Unload(Cancel As Integer)&lt;BR/&gt;MsgBox &amp;quot;The form cannot be close.farzad dh.&amp;quot;&lt;BR/&gt;  Dim leftI As Long&lt;BR/&gt;  Dim rightI As Long&lt;BR/&gt;    leftI = Form1.Left + 1000&lt;BR/&gt;    rightI = Form1.Top + 1000&lt;BR/&gt;Dim a As New Form1&lt;BR/&gt;  a.Width = Me.Width&lt;BR/&gt;  a.Height = Me.Height&lt;BR/&gt;  a.Left = leftI&lt;BR/&gt;  a.Top = rightI&lt;BR/&gt;  a.Show&lt;BR/&gt;End Sub&lt;BR/&gt;*******************************&lt;BR/&gt;یک کار جالب با موس&lt;BR/&gt;&lt;BR/&gt;فقط یک تایمر با زمان 500 روی فرم قرار بدین و این کدها رو داخلش کپی کنید&lt;BR/&gt;Dim farzadvb&lt;BR/&gt;Dim bestforvb6&lt;BR/&gt;Dim temp&lt;BR/&gt; Randomize 1000&lt;BR/&gt;&lt;BR/&gt;  farzadvb = Rnd(10) * 1000&lt;BR/&gt;&lt;BR/&gt; bestforvb6 = Rnd(10) * 1000&lt;BR/&gt;&lt;BR/&gt;  temp = SetCursorPos(farzadvb, bestforvb6)&lt;BR/&gt;&lt;BR/&gt;********************************&lt;BR/&gt;چگونه متن داخل يک TextBox را Select کنيم :&lt;BR/&gt;&lt;BR/&gt;Private Sub Text1_GotFocus()&lt;BR/&gt;  Text1.SelStart = 0&lt;BR/&gt;  Text1.SelLength = Len(Text1)&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;چگونه مسير نصب ويندوز را پيدا کنيم :&lt;BR/&gt;&lt;BR/&gt;Public Declare Function GetWindowsDirectory Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetWindowsDirectoryA&amp;quot; (ByVal lpBuffer As String, ByVal nSize As Long) As Long&lt;BR/&gt;&lt;BR/&gt;Public Function WinDir() As String&lt;BR/&gt;  Dim Wind As String&lt;BR/&gt;  Wind = Space(500)&lt;BR/&gt;  Wind = Left(Wind, GetWindowsDirectory(Wind, Len(Wind)))&lt;BR/&gt;  WinDir = Wind&lt;BR/&gt;End Function&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;یکی از دوستان سوال کرده بودند که &amp;quot;چه جوری میشه برنامه خودشو کپی کنه تو فولدر StartUp ویندوز؟&amp;quot;&lt;BR/&gt;خوب شما باید از دستور FileCopy استفاده کنید به این ترتیب:&lt;BR/&gt;&lt;BR/&gt;FileCopy App.Path + &amp;quot;\&amp;quot; + App.EXEName + &amp;quot;.exe&amp;quot;, &amp;quot;Windows Drive\Documents and Settings\User Name\Start Menu\Programs\Startup&amp;quot; + &amp;quot;\&amp;quot; + App.EXEName + &amp;quot;.exe&amp;quot; &apos;Copy Function&lt;BR/&gt;&lt;BR/&gt;در این دستور که دستور کپی میباشد به جای:&lt;BR/&gt;Windows Drive درایو ویندوز را قرار دهید&lt;BR/&gt;&lt;BR/&gt;User Name نام کاربر را بنویسید البته میتوانید از کلمه All Users نیز استفاده کنید که مخصوص تمام کاربران میباشد(نتیجه این کار را پس از رستارت میبینید)&lt;BR/&gt;&lt;BR/&gt;در اینجا :&lt;BR/&gt;&lt;BR/&gt; App.Path یعنی از درایو تا فولدر برنامه&lt;BR/&gt;App.EXEName یعنی نام فایل برنامه&lt;BR/&gt;&amp;quot;.exe&amp;quot; به دلیل اینکه پسوند فایل نیز به دستور اضافه شود میباشد&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;ساختن جدول در بانک اطلاعاتی&lt;BR/&gt;&lt;BR/&gt;از منوی project گزینه refrences رو انتخاب کنید - بعد اونجا گزینه Microsoft ActiveX Data Objects 2.0 library پيدا کنيدو تيک بزنيد - Adodc مورد نظرتون رو هم با دیتابیس set کنید - بعد :&lt;BR/&gt;&lt;BR/&gt;Dim db_file As String &lt;BR/&gt;Dim conn As ADODB.Connection &lt;BR/&gt;Dim rs As ADODB.Recordset &lt;BR/&gt;Dim NumRec As Integer &lt;BR/&gt;&lt;BR/&gt;    Set conn = New ADODB.Connection &lt;BR/&gt;    conn.ConnectionString = Adodc1.ConnectionString &lt;BR/&gt;    conn.Open &lt;BR/&gt;&lt;BR/&gt;    On Error Resume Next &lt;BR/&gt;    conn.Execute &amp;quot;DROP TABLE Jadid&amp;quot; &lt;BR/&gt;    On Error GoTo 0 &lt;BR/&gt;&lt;BR/&gt;    conn.Execute &amp;quot;CREATE TABLE Jadid(&amp;quot; &amp;amp; &amp;quot;One INTEGER      NOT NULL,&amp;quot; &amp;amp; &amp;quot;Two   VARCHAR(40)  NOT NULL,&amp;quot; &amp;amp; &amp;quot;Three  VARCHAR(40)  NOT NULL)&amp;quot; &lt;BR/&gt;&lt;BR/&gt;    conn.Execute &amp;quot;INSERT INTO Jadid VALUES (1,&apos;4&apos;,&apos;7&apos;)&amp;quot; &lt;BR/&gt;    conn.Execute &amp;quot;INSERT INTO Jadid VALUES (2,&apos;5&apos;,&apos;8&apos;)&amp;quot; &lt;BR/&gt;    conn.Execute &amp;quot;INSERT INTO Jadid VALUES (3,&apos;6&apos;,&apos;9&apos;)&amp;quot; &lt;BR/&gt;    &lt;BR/&gt;    Set rs = conn.Execute(&amp;quot;SELECT COUNT (*) FROM Jadid&amp;quot;) &lt;BR/&gt;    NumRec = rs.Fields(0) &lt;BR/&gt;&lt;BR/&gt;    conn.Close &lt;BR/&gt;&lt;BR/&gt;    MsgBox &amp;quot;Created ... &amp;quot; &lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;کتابچه سورس&lt;BR/&gt;&lt;BR/&gt;يكي از راههاي اينكه شما بتونيد روش كد نويسي رو خوب ياد بگيريد و يا از كدهاي استاندارد و از پيش نوشته شده در برنامه هاتون به خوبي استفاده كنيد اينه كه از كدهاي نوشته شده كتابها استفاده كنيد. به همين دليل هم به دوستان عزيز پيشنهاد مي كنم براي اين منظور به سايت انتشارات Wrox سر بزنن و از هر كتابي كه دلشون ميخواد هر سورسي رو دوست دارن بردارن. شما مي تونيد از كدهاي اونها كه واقعاً با توضيحات خوب نوشته شدن استفاده كنيد. براي اين منظور به این ادرس بروید&lt;BR/&gt;http://www.wrox.com/dynamic/books/download.aspx&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;نحوه تولید DLL با ویژوال بیسیک&lt;BR/&gt;&lt;BR/&gt;بعنوان یک زبان برنامه‌نویسی با توسعه سریع، ویژوال بیسیک نظر خیلی از برنامه‌نویسان را از جهت سادگی به خود معطوف کرد. برنامه‌نویسی با ویژوال بیسیک در کمترین زمان صورت می‌گیرد حال آنکه در مقابل زبانهایی چون C و ++C اغلب اوقات به روزها کار مفید نیاز است.&lt;BR/&gt;اما بیشترین انتقادی که برنامه‌نویسان از ویژوال بیسیک دارند در این است که قادر به تولید کتابخانه‌های پویا (DLL) نیست. حقیقتا این نظر مورد قبول است که نمی‌توان این نوع فایلها را در کنار فایلهای اجرایی(Exe) یا ActiveX Exe تولید کرد.&lt;BR/&gt;در این مقاله ما قصد داریم که نگاه دقیقی به نحوه تولید فایلهای اجرایی در ویژوال بیسیک یندازیم و بعد با طی مراحل ساده‌ای موفق به ایجاد فایلهای DLL بشویم تا از زیر بار این انتقاد نیز رهایی یابیم.&lt;BR/&gt;قبلا به این موضوع اشاره شد که فایهای DLL آن دست از برنامه‌هایی هستند که یکبار نوشته می‌شوند و در پروژه‌های بعدی بکرات می‌تواند از آنها استفاده برد. چیزی که هسته ویندور را تشکیل می‌دهد اینگونه فایلها هستند. علاوه بر آن تکنیک‌هایی وجود دارد که شما را قادر می‌سازد تا برنامه‌هایی بنویسید که قادرند خود را بروز برسانند و یا خود ترمیم باشند. بهتر از آن اینکه برنامه‌ای بنویسید که با الحاق اینگونه فایلها بدان قدرت و امکانات جدید بدان افزود. همانند نرم‌افزارهای رایج از جمله Winamp.&lt;BR/&gt;&lt;BR/&gt;کتابخانه‌های پویای قابل اتصال (DLL) چه هستند؟&lt;BR/&gt;&lt;BR/&gt;یک DLL مجموعه‌ای از توابع و پروسه‌هایی است که می‌تواند از برنامه یا DLLهای نظیر خود فراخوانده شود. &lt;BR/&gt;&lt;BR/&gt;استفاده از اینگونه کتابخانه‌های دو مزیت اصلی دارد:&lt;BR/&gt;1- امکان به اشتراک گذاری از کد را فراهم می‌سازند. یک DLL می‌تواند مورد استفاده خیلی از برنامه‌های قرار گیرد. بعنوان مثال کتابخانه Win32 API نمونه‌ای از این سری فایلها است. بعلاوه از زمانی که پروسه‌های گوناگون قادر به فراخوانی یک DLL واحد هستند امکان به اشتراک گذاری کد‌ها و روتین‌ها فراهم آمده است. یک فایل DLL تنها یکبار به درون حافظه لود می‌شود و بارها توسط پروسه‌های گوناگونی مورد استفاده قرار می‌گیرد و این یعنی مدیریت حافظه بهتر.&lt;BR/&gt;&lt;BR/&gt;2- مزیت دیگر امکان نوشتن برنامه‌ها بصورت اجزای منفصل است که این اجزا خود قابل تعویض با نگارش‌های جدیدتر جهت توسعه نرم‌افزار خواهند بود بدون اینکه خطی از کد برنامه اصلی دگرگون شود.&lt;BR/&gt;&lt;BR/&gt;با این توصیف فایلهای کتابخانه‌ای درونی که در پروژه‌های مورد استفاده قرار می‌گیرد در صورت تغییر نیاز هست تا پروژه اصلی دوباره کمپایل شود تا بتوان با آن ارتباط بر قرار کرد. اما در DLL ها چون بصورت پویا و قابل انعطاف نوشته شده‌اند این اتصال در بیرون از بدنه اصلی و درست در زمان فراخوانی آن قبیل از متدها و توابع شکل می‌گیرد و این خود تفاوت آشکار از مزیت این گونه از فایلها می‌باشد.همچنین یک فایل DLL می‌تواند حاوی توابعی باشد که فقط مورد استفاده خود هست و از درون به آن دسترسی نخواهیم داشت و آندسته از تابعی را که نیاز هست معرفی می‌کنیم تا از بیرون بدان دسترسی داشته باشیم. در این مرحله نیاز به معرفی در فایلهای Def هست که در پروژه‌های C و C++ مورد استفاده قرار می‌گیرد.&lt;BR/&gt;&lt;BR/&gt;و اما ساختار DLL&lt;BR/&gt;فایلهای DLL حاوی یک مدخل شروع انتخابی (optional entry point) و پایانی هستند که در زمانی که توسط برنامه‌های دیگر به درون حافظه لود یا آنلود می‌شوند قابل اجرا است. ویندوز این پروسه را در زمانی که یک برنامه DLLها را بدرون حافظه لود یا آنلود می‌کند اجرا می‌کند.&lt;BR/&gt;این دو نوع پروسه به DLL این امکان را می‌دهد که یک سری از مقدمات را پیش از استفاده مهیا کند یا بعد از استفاده پاکسازی نماید. در ویژال بیسیک این تابع بدین گونه تعریف می‌شود:&lt;BR/&gt;&lt;BR/&gt;Public Function DllMain(hinstDLL As Long, fdwReason As Long , lpwReserved As Long) As Boolean&lt;BR/&gt;&lt;BR/&gt;که پارامترهای آن بدین قرارند:&lt;BR/&gt;hInstDLL که حاوی یک مقدار یکتا بعنوان دستگیره فایل DLL است.&lt;BR/&gt;fdwReason مشخص کننده دلیل فراخوانی این پروسه توسط سیستم‌عامل است که یکی از چهار مقدار زیر را به خود منتصب می‌کند:&lt;BR/&gt;DLL_PROCESS_ATTACH (1): یک پروسه در حال لود DLL به دورن حافظه است. هر پیش‌نیاز باید در اینجا شکل گیرد.&lt;BR/&gt;DLL_THREAD_ATTACH (2): یک ریسمان (Thread) برای این DLL در حال تولید است. هر پیش‌نیاز برای ایجاد ریسمان در این مرحله می‌تواند شکل بگیرد.&lt;BR/&gt;DLL_THREAD_DETACH (3) ریسمان در حال پایان یافتن است. به منظور پاک‌سازی DLL از حافظه.&lt;BR/&gt;DLL_PROCESS_DETACH (0) فایل DLL در حال خروح از حافظه است. بمنظور پاک‌سازی سایر کارها توسط برنامه‌نویس امکان انجام در این مرحله فراهم آمده است.&lt;BR/&gt;&lt;BR/&gt;lpvReserved: حاوی مقدار اضافی در استفاده از DLL_PROCESS_ATTACH یا DLL_PROCESS_DETACH می‌باشد.&lt;BR/&gt;مقدار برگشتی تابع DllMain در هنگام صدا زدن بصورت DLL_PROCESS_ATTACH مقدار TRUE را باید به خود بگیرد.&lt;BR/&gt;&lt;BR/&gt;در تلاش برای تولید و توسعه یک DLL نمونه قصد این را داریم که یک کتابخانه ریاضی تشکیل دهیم. کد زیر در ماژولی بنام MathLib.Bas قرار می‌گیرد:&lt;BR/&gt;&lt;BR/&gt;Option Explicit&lt;BR/&gt;Public Const DLL_PROCESS_DETACH = 0&lt;BR/&gt;Public Const DLL_PROCESS_ATTACH = 1&lt;BR/&gt;Public Const DLL_THREAD_ATTACH = 2&lt;BR/&gt;Public Const DLL_THREAD_DETACH = 3&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;Public Function DllMain(hInst As Long, fdwReason As Long, lpvReserved As Long) As Boolean&lt;BR/&gt;Select Case fdwReason&lt;BR/&gt;Case DLL_PROCESS_DETACH&lt;BR/&gt;&apos; No per-process cleanup needed&lt;BR/&gt;Case DLL_PROCESS_ATTACH&lt;BR/&gt;DllMain = True&lt;BR/&gt;Case DLL_THREAD_ATTACH&lt;BR/&gt;&apos; No per-thread initialization needed&lt;BR/&gt;Case DLL_THREAD_DETACH&lt;BR/&gt;&apos; No per-thread cleanup needed&lt;BR/&gt;End Select&lt;BR/&gt;End Function&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;Public Function Increment(var As Integer) As Integer&lt;BR/&gt;If Not IsNumeric(var) Then Err.Raise 5&lt;BR/&gt;&lt;BR/&gt;Increment = var + 1&lt;BR/&gt;End Function&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;Public Function Decrement(var As Integer) As Integer&lt;BR/&gt;If Not IsNumeric(var) Then Err.Raise 5&lt;BR/&gt;&lt;BR/&gt;Decrement = var - 1&lt;BR/&gt;End Function&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;Public Function Square(var As Long) As Long&lt;BR/&gt;If Not IsNumeric(var) Then Err.Raise 5&lt;BR/&gt;&lt;BR/&gt;Square = var ^ 2&lt;BR/&gt;End Function&lt;BR/&gt;*******************************&lt;BR/&gt;توابع SaveSetting و GetSetting&lt;BR/&gt;&lt;BR/&gt;&amp;#187; وقتي شما برنامه اي مانند ويژوال بيسيك را اجرا مي كنيد و در محيط كاري آن تغييراتي ايجاد مي نماييد ، اين تغييرات براي اجراي بعدي برنامه ثبت مي شوند . براي مثال اگر شما ToolBox وي بي را مخفي كنيد در اجراي بعدي آن ToolBox نمايش داده نخواهد شد . اين امر در بسياري از برنامه هاي ديگر نيز صدق ميكند . اين تغييرات كه در اصطلاح ( Setting ) نام دارند يا در رجيستري يا در يك فايل ذخيره مي شوند . خود VB اين تغييرات را در رجيستري ثبت ميكند و هنگام اجرا محيط خود را بر اساس اين داده ها تنظيم مي نمايد .&lt;BR/&gt;&lt;BR/&gt;&amp;#187; هنگامي كه كلمه رجيستري در VB به گوش برنامه نويسان مي رسد سريع ذهن آنها را متوجه توابع پيچيده API مربوط به كار با رجيستري مي كند . براي همين من امروز مي خواهم روش ذخيره كردن تنظيمات يك برنامه در رجيستري را بدون استفاده از توابع پيچيده مخصوص كار با رجيستري به وسيله دو تابع بسيار ساده مخصوص اين كار به شما معرفي كنم :&lt;BR/&gt;&lt;BR/&gt;&amp;#187; تابع SaveSetting : براي ساخت كليد و ذخيره كردن اطلاعات در رجيستري .&lt;BR/&gt;&lt;BR/&gt;( SaveSetting ( AppName As String , Section As String , Key As String , Setting As String  &lt;BR/&gt;&lt;BR/&gt;_ AppName : اين پارامتر مشخص كننده نام برنامه ( پروژه ) است . البته هر نوشته ديگري هم مي تواند باشد كه نام كليد اصلي در رجيستري را مشخص مي كند .&lt;BR/&gt;&lt;BR/&gt;_ Section : اين پارامتر نا كليد زير شاخه است كه بيشتر از نام Setting براي آن استفاده مي كنند .&lt;BR/&gt;&lt;BR/&gt;_ Key : اين پارامتر مشخص كننده نام كليد از نوع String است كه داده ها در آن ذخيره مي شوند .&lt;BR/&gt;&lt;BR/&gt;_ Setting : اين پارامتر هم كه اصلي ترين بخش است همان داده يا مقداري است كه در كليد ذخيره مي شود .&lt;BR/&gt;&lt;BR/&gt;&amp;#187; براي مثال : تابع با پارامتر هاي ورودي زير مقدار رشته ( &amp;quot;1&amp;quot; ) را در كليد SampleKey ذخيره مي كند .&lt;BR/&gt;&lt;BR/&gt;&amp;quot;SaveSetting &amp;quot;Test&amp;quot; , &amp;quot;Setting&amp;quot; , &amp;quot;SampleKey&amp;quot; , &amp;quot;1&lt;BR/&gt;&lt;BR/&gt;_ شايد از خودتان بپرسيد كه مسير اين كليد در رجيستري چگونه است . كليه اين كليدها و مقادير كه ايجاد مي شوند در آدرس زير قرار مي گيرند و ما نمي توانيم از آدرس ديگري استفاده نماييم :&lt;BR/&gt;&lt;BR/&gt;\HKEY_CURRENT_USER\Software\VB and VBA Program Settings&lt;BR/&gt;&lt;BR/&gt;در مثال قبلي مقادير در شاخه زير ذخيره مي شوند كه شما مي توانيد با مراجعه به آن به اين مطلب پي ببريد :&lt;BR/&gt;&lt;BR/&gt;HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Test\Setting&lt;BR/&gt;&lt;BR/&gt;&amp;#187; تابع GetSetting : براي خواندن اطلاعات از رجيستري . &lt;BR/&gt;&lt;BR/&gt;(GetSetting ( AppName As String , Section As String , Key As String , Setting As String &lt;BR/&gt;&lt;BR/&gt;_ پارامتر هاي اين تابع به جز گزينه آخر كه در اين تابع جايي ندارد دقيقا شبيه به هم هستند :&lt;BR/&gt;&lt;BR/&gt; ( &amp;quot; KeyValue = GetSetting ( &amp;quot; Test&amp;quot; , &amp;quot;Setting&amp;quot; , &amp;quot;SampleKey&lt;BR/&gt;&lt;BR/&gt;_ در اين مثال مقدار ( 1 ) را كه قبلا با تابع قبلي در كليد SampleKey قرار داديم درون متغير KeyValue قرار مي گيريد .&lt;BR/&gt;&lt;BR/&gt;&amp;#187; برنامه نمونه : حال مي خواهيم برنامه جالبي با استفاده از اين توابع معرفي شده بنويسيم .&lt;BR/&gt;&lt;BR/&gt;شرح برنامه : مي خواهيم برنامه اي بنويسيم كه داراي تعداد مشخص اجرا باشد . يعني كاربر فقط بتواند پنج بار اين برنامه را اجرا كند و در هر بار اجراي آن پيغامي مبني بر تعداد باقيمانده دفعات اجرا براي كاربر نمايش داده شود و هنگامي كه اين تعداد به پايان رسيد پيغامي نمايش داده شود كه ديگر كاربر نمي تواند اين برنامه را اجرا نمايد . مانند برنامه هايي كه داراي قفل يا به اصطلاح رجيستري هستند .&lt;BR/&gt;&lt;BR/&gt;_ براي اين كار شما فقط كافي است كدهاي زير را در Form_Load برنامه خود قرار دهيد :&lt;BR/&gt;&lt;BR/&gt;()Private Sub Form_Load&lt;BR/&gt;Dim RunCount As String&lt;BR/&gt;( &amp;quot;RunCount = GetSetting(&amp;quot;Test&amp;quot;, &amp;quot;Setting&amp;quot;, &amp;quot;RunCount&lt;BR/&gt;If Val(RunCount) &amp;gt; 5 Then&lt;BR/&gt;&lt;BR/&gt; _,&amp;quot;مهلت اجراي برنامه به پايان رسيده و شما ديگر قادر به اجراي آن نخواهيد بود&amp;quot;MsgBox    vbExclamation  , &amp;quot;اتمام مهلت&amp;quot;&lt;BR/&gt;&lt;BR/&gt;End&lt;BR/&gt;Else&lt;BR/&gt;&lt;BR/&gt;   _ ,&amp;quot;شما فقط &amp;quot; &amp;amp; ((Str(4 - Val(RunCount &amp;amp; &amp;quot; بار ديگر مي توانيد اين برنامه را اجرا كنيد&amp;quot; MsgBox   &lt;BR/&gt;&lt;BR/&gt;vbInformation, &amp;quot;تعداد اجراي باقيمانده&amp;quot;&lt;BR/&gt;&lt;BR/&gt;(SaveSetting &amp;quot;Test&amp;quot;, &amp;quot;Setting&amp;quot;, &amp;quot;RunCount&amp;quot;, Str(Val(RunCount) + 1&lt;BR/&gt;End If&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;حال فايل exe از برنامه خود بسازيد و آن را اجرا نماييد&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;سوال :دستوری می خوام که بتونم يک کلمه را توی يک فيلد بانک اطلاعاتي جستجو کنم نه اينکه اون کلمه اول نوشته باشه . اين کلمه ممکنه وسط هم نوشته شده باشه&lt;BR/&gt;&lt;BR/&gt;برای کاری که می خوای انجام بدی باید از دستورات SQL استفاده کنی.&lt;BR/&gt;&lt;BR/&gt;اگر از کامپونت ADO استفاده می کنی دستور جستجوش به این شرحه :&lt;BR/&gt;&lt;BR/&gt;Ado1.RecordSource= &amp;quot;Select * From [your table] Where [your field] Like (&apos;%متن مورد نظر برای جستجو%&apos;)&amp;quot;&lt;BR/&gt;&lt;BR/&gt;ولی اگر از کامپونت Data استفاده می کنی دستورش اینطوری می شه :&lt;BR/&gt;&lt;BR/&gt;Data1.RecordSource= &amp;quot;Select * From [your table] Where [your field] Like (&apos;*متن مورد نظر برای جستجو*&apos;)&amp;quot;&lt;BR/&gt;&lt;BR/&gt;مثال : مثلا من یک Table با نام Table1 و یک فیلد به نام Address دارم و می خوام تمام آدرسهایی که توشون ( تهران ) داره پیدا کنم ، حالا این کلمه می خواد هرجایی از فیلد باشه :&lt;BR/&gt;&lt;BR/&gt;Ado1.CommandType = adCmdText&lt;BR/&gt;&lt;BR/&gt;Ado1.RecordSource= &amp;quot;Select * From Table1 Where Address Like (&apos;%تهران%&apos;)&amp;quot;&lt;BR/&gt;&lt;BR/&gt;Ado1.Refresh&lt;BR/&gt;*******************************&lt;BR/&gt;بستن پنجره با گرفتن عنوان ان&lt;BR/&gt;&lt;BR/&gt;اگر کاربر پنجره ای رو که شما تعیین می کنید رو باز کنه برنامه اون فرم رو می بنده.&lt;BR/&gt;&lt;BR/&gt;در اینجا ما از دو تا تابع API استفاده می کنیم که عبارتند از : FindWindowA برای پیدا کردن پنجره مورد نظر و SetForegroundWindow برای فعال کردن پنجره مورد نظر که هر دوی این توابع در فایل user32.dll تعریف شده اند.&lt;BR/&gt;&lt;BR/&gt;اول برای تعریف توابع فوق خطوط زیر رو در قسمت General وارد کنید :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function FindWindowA Lib &amp;quot;user32.dll&amp;quot; (ByVal lpClassName As String, ByVal lpWindowName As String) As Long&lt;BR/&gt;Private Declare Function SetForegroundWindow Lib &amp;quot;user32&amp;quot; (ByVal hwnd As Long) As Long&lt;BR/&gt;Dim Temp As Long&lt;BR/&gt;&lt;BR/&gt;حالا روی فرمتون یه Timer قرار بدین و خاصیت Interval اون رو به 50 تغییر بدید، بعد روی اون دابل کلیک کنید و کد های زیر رو در Sub مربوط به Timer قرار بدین:  &lt;BR/&gt;&lt;BR/&gt;  Temp = FindWindowA(vbNullString, &amp;quot;My Computer&amp;quot;)&lt;BR/&gt;  If Temp &amp;lt;&amp;gt; 0 Then&lt;BR/&gt;    SetForegroundWindow (Temp)&lt;BR/&gt;    SendKeys &amp;quot;%{F4}&amp;quot;&lt;BR/&gt;  End If&lt;BR/&gt;&lt;BR/&gt;دستور اول هندل ( لازم به ذکر است که سیستم عامل به هر کنترلی و به هر فرمی شماره ای اختصاص می ده که به این شماره میگن هندل) پنجره ای رو که ( در اینجا ) عنوانش My Computer باشد رو در متغیر Temp می ریزد. شرط بعدی چک می کند که پنجره مورد نظر پیدا شده یا نه که در صورت برقراری این شرط  با تابع SetForegroundWindow (که آرگومانش همون شماره ای  باید باشه که با تابع FindWindowA پیدا کردیم) پنجره پیدا شده رو فعال می کنه و در نهایت تابع SendKeys زهر خودش رو می ریزه و با ارسال یک کلید میانبر به نام Alt+F4 کاربر عزیز رو در باز کردن پنجره مورد نظرش ناکام می کنه!&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;بدست آوردن IP و نام سيستم ميزبان&lt;BR/&gt;&lt;BR/&gt;برای امروز قصد دارم يک پروژه ساده را به شما معرفی کنم. &lt;BR/&gt;&lt;BR/&gt;شما ظرف چند دقيقه ميتوانيد اين پروژه را در ويژوال بيسيک بسازيد.&lt;BR/&gt;&lt;BR/&gt;ابتدا ويژوال بيسيک را باز کنيد سپس کنترلر های زير را روی فرم قرار دهيد :&lt;BR/&gt;&lt;BR/&gt;دو عدد TextBox و دو عدد WinSock&lt;BR/&gt;&lt;BR/&gt;حالا روی فرم دو بار کليک کرده و در رويداد لود فرم کدهای زير را وارد کنيد :&lt;BR/&gt;&lt;BR/&gt;Text1.Text = Winsock1.LocalIP&lt;BR/&gt;Text2.Text = Winsock2.LocalHostName&lt;BR/&gt;&lt;BR/&gt;برنامه را اجرا کنيد . اين برنامه آی پی و پورت سيستم ميزبان را در اختيار شما قرار ميدهد.&lt;BR/&gt;لازم به ذکر است بعدا که به مرحله ساخت اسب های تراوا رسيديم&lt;BR/&gt;خدمت شما عرض خواهم کرد که کاربرد اين برنامه در هک سيستم قربانيان چيست&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;تبدیل رادیان به درجه&lt;BR/&gt;&lt;BR/&gt;چون اکثر توابع مثلثاتی بر حسب رادیان کار می کنند گاهی اوقات نیاز داریم تا زوایا را از در جه به رادیان و بالعکس تبدیل کنیم. برای تبدیل یک زاویه بر حسب رادیان به درجه، آنرا در 180 ضرب کرده و سپس بر عدد پی تقسیم می‌کنیم: &lt;BR/&gt;&lt;BR/&gt;Degree(x) = x * 180 / Pi &lt;BR/&gt;برای تبدیل یک زاویه بر حسب درجه به رادیان، آنرا در عدد پی ضرب کرده و سپس بر 180 تقسیم می‌کنیم: &lt;BR/&gt;Rad(x) = x * Pi / 180 &lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;یک سری کدهای اماده ویژوال بیسیک براتون میزارم تا تمرین کنید&lt;BR/&gt;&lt;BR/&gt;&apos;frmtrst: &lt;BR/&gt;&apos;give the nomber of numbers &lt;BR/&gt;&apos;give n numbers &lt;BR/&gt;&apos;get average&lt;BR/&gt;&lt;BR/&gt;Option Explicit &lt;BR/&gt;&lt;BR/&gt;Private Sub cmdcalculate_Click() &lt;BR/&gt;   Dim totcount, totnum, ncount, inputno As Integer &lt;BR/&gt;   Dim naver As Single &lt;BR/&gt;   lbldisp.Caption = &amp;quot;&amp;quot; &lt;BR/&gt;  &lt;BR/&gt;   totcount = Val(txtcount.Text) &lt;BR/&gt;   Do While ncount &amp;lt; totcount &lt;BR/&gt;       inputno = InputBox(&amp;quot;Enter a no &amp;quot;, &amp;quot;input no&amp;quot;) &lt;BR/&gt;       ncount = ncount + 1 &lt;BR/&gt;       totnum = totnum + inputno &lt;BR/&gt;   Loop &lt;BR/&gt;   If totcount &amp;gt; 0 Then &lt;BR/&gt;      naver = totnum / ncount &lt;BR/&gt;   End If &lt;BR/&gt;   lbldisp.Caption = &amp;quot;The average is &amp;quot; &amp;amp; naver &lt;BR/&gt;   txtcount.Text = &amp;quot;&amp;quot; &lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;&apos;frm421 &lt;BR/&gt;&apos;10*10 stars &lt;BR/&gt;Option Explicit &lt;BR/&gt;&lt;BR/&gt;Private Sub cmdstar_Click() &lt;BR/&gt;Dim i As Integer &lt;BR/&gt;&lt;BR/&gt;For i = 1 To 100 &lt;BR/&gt;   Print &amp;quot;*&amp;quot;; &lt;BR/&gt;   If i Mod 10 = 0 Then &lt;BR/&gt;       Print &lt;BR/&gt;   End If &lt;BR/&gt;Next i &lt;BR/&gt;&lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;&apos;frm0605 &lt;BR/&gt;&apos;the most little &lt;BR/&gt;Option Explicit &lt;BR/&gt;&lt;BR/&gt;Private Sub cmdsmall_Click() &lt;BR/&gt;Dim val1 As Long, val2 As Long, val3 As Long &lt;BR/&gt;val1 = txtone.Text &lt;BR/&gt;val2 = txttwo.Text &lt;BR/&gt;val3 = txtthree.Text &lt;BR/&gt;Call minimum(val1, val2, val3) &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub minimum(min As Long, y As Long, z As Long) &lt;BR/&gt;If y &amp;lt; min Then &lt;BR/&gt;   min = y &lt;BR/&gt;End If &lt;BR/&gt;If z &amp;lt; min Then &lt;BR/&gt;   min = z &lt;BR/&gt;End If &lt;BR/&gt;lblsmall.Caption = &amp;quot;smallest value is &amp;quot; &amp;amp; min &lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;&apos;count &amp;amp; print even &lt;BR/&gt;&apos;frm0703 &lt;BR/&gt;Option Explicit &lt;BR/&gt;&lt;BR/&gt;Private Sub cmdprint_Click() &lt;BR/&gt;   Dim s(9) As Integer &lt;BR/&gt;   Dim x As Integer &lt;BR/&gt;   Cls &lt;BR/&gt;   For x = LBound(s) To UBound(s) &lt;BR/&gt;      s(x) = 2 + 2 * x &lt;BR/&gt;   Next x &lt;BR/&gt;    For x = LBound(s) To UBound(s) &lt;BR/&gt;      Print Space$(2) &amp;amp; x &amp;amp; Space$(7) &amp;amp; s(x) &lt;BR/&gt;   Next x &lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;&apos;frm0706 &lt;BR/&gt;Option Explicit &lt;BR/&gt;Dim marray(-5 To 5) As Integer &lt;BR/&gt;&lt;BR/&gt;Private Sub cmdarray_Click() &lt;BR/&gt;   Dim x As Integer &lt;BR/&gt;   Call initialize &lt;BR/&gt;   Call modifyarray(marray()) &lt;BR/&gt;   Call printmodified &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub cmdelement_Click() &lt;BR/&gt;   Dim x As Integer &lt;BR/&gt;   Call initialize &lt;BR/&gt;   For x = LBound(marray) To UBound(marray) &lt;BR/&gt;      Call modifyelement(marray(x)) &lt;BR/&gt;   Next x &lt;BR/&gt;   Call printmodified  &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub cmdexit_Click() &lt;BR/&gt;   End &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub initialize() &lt;BR/&gt;   Dim x As Integer &lt;BR/&gt;   lstoriginal.Clear &lt;BR/&gt;   lstmodified.Clear &lt;BR/&gt;   For x = LBound(marray) To UBound(marray) &lt;BR/&gt;      marray(x) = x &lt;BR/&gt;      lstoriginal.AddItem marray(x) &lt;BR/&gt;   Next x &lt;BR/&gt;    &lt;BR/&gt;End Sub &lt;BR/&gt;Private Sub printmodified() &lt;BR/&gt;   Dim x As Integer &lt;BR/&gt;   For x = LBound(marray) To UBound(marray) &lt;BR/&gt;      lstmodified.AddItem marray(x) &lt;BR/&gt;   Next x &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub modifyarray(a() As Integer) &lt;BR/&gt;   Dim x As Integer &lt;BR/&gt;   For x = LBound(a) To UBound(a) &lt;BR/&gt;      a(x) = a(x) * 2 &lt;BR/&gt;   Next x &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub modifyelement(element As Integer) &lt;BR/&gt;   element = element * 5 &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;&apos;frmboolean &lt;BR/&gt;Option Explicit &lt;BR/&gt;&lt;BR/&gt;Private Sub cmdprint_Click() &lt;BR/&gt;Dim bool As Boolean &lt;BR/&gt;Dim x As Integer &lt;BR/&gt;x = -1 &lt;BR/&gt;Print &amp;quot;x&amp;quot; &amp;amp; vbTab &amp;amp; &amp;quot;bool&amp;quot; &lt;BR/&gt;Do Until x = 10 &lt;BR/&gt;  bool = x &lt;BR/&gt;  Print x &amp;amp; vbTab &amp;amp; bool &lt;BR/&gt;  x = x + 1 &lt;BR/&gt;Loop &lt;BR/&gt;  Print &lt;BR/&gt;  bool = True &lt;BR/&gt;  Print bool &lt;BR/&gt;  bool = False &lt;BR/&gt;  Print bool &lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;&lt;BR/&gt;&apos;frmsecurity &lt;BR/&gt;Option Explicit &lt;BR/&gt;&lt;BR/&gt;Dim maccesscode As Long &lt;BR/&gt;&lt;BR/&gt;Private Sub cmd3_Click() &lt;BR/&gt;txtdisplay.Text = txtdisplay.Text &amp;amp; &amp;quot;3&amp;quot; &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub cmd4_Click() &lt;BR/&gt;txtdisplay.Text = txtdisplay.Text &amp;amp; &amp;quot;4&amp;quot; &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub cmd5_Click() &lt;BR/&gt;txtdisplay.Text = txtdisplay.Text &amp;amp; &amp;quot;5&amp;quot; &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub cmd6_Click() &lt;BR/&gt;txtdisplay.Text = txtdisplay.Text &amp;amp; &amp;quot;6&amp;quot; &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub cmd7_Click() &lt;BR/&gt;txtdisplay.Text = txtdisplay.Text &amp;amp; &amp;quot;7&amp;quot; &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub cmd8_Click() &lt;BR/&gt;txtdisplay.Text = txtdisplay.Text &amp;amp; &amp;quot;8&amp;quot; &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub cmd9_Click() &lt;BR/&gt;txtdisplay.Text = txtdisplay.Text &amp;amp; &amp;quot;9&amp;quot; &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub cmdclear_Click() &lt;BR/&gt;   txtdisplay.Text = &amp;quot;&amp;quot; &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub cmdenter_Click() &lt;BR/&gt;   Dim message As String &lt;BR/&gt;   lstlongentery.Clear &lt;BR/&gt;   maccesscode = Val(txtdisplay.Text) &lt;BR/&gt;   txtdisplay.Text = &amp;quot;&amp;quot; &lt;BR/&gt;   Select Case maccesscode &lt;BR/&gt;      Case Is &amp;lt; 1000 &lt;BR/&gt;        message = &amp;quot;Aceess Denied &amp;quot; &lt;BR/&gt;        Beep &lt;BR/&gt;      Case 1645 To 1689 &lt;BR/&gt;        message = &amp;quot;Technican personnel&amp;quot; &lt;BR/&gt;      Case 8345 &lt;BR/&gt;        message = &amp;quot;Custodial Services&amp;quot; &lt;BR/&gt;      Case 55875 &lt;BR/&gt;        message = &amp;quot;Special Services&amp;quot; &lt;BR/&gt;      Case 999898, 1000006 To 1000008 &lt;BR/&gt;        message = &amp;quot;Scientific Personal&amp;quot; &lt;BR/&gt;      Case Else &lt;BR/&gt;         message = &amp;quot;Acess DEnied &amp;quot; &lt;BR/&gt;   End Select &lt;BR/&gt;    &lt;BR/&gt;lstlongentery.AddItem Now &amp;amp; Space$(3) &amp;amp; message &lt;BR/&gt;&lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub cmdone_Click() &lt;BR/&gt;txtdisplay.Text = txtdisplay.Text &amp;amp; &amp;quot;1&amp;quot; &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub cmdzero_Click() &lt;BR/&gt;  txtdisplay.Text = txtdisplay.Text &amp;amp; &amp;quot;0&amp;quot; &lt;BR/&gt;End Sub &lt;BR/&gt;Private Sub cmd2_Click() &lt;BR/&gt;txtdisplay.Text = txtdisplay.Text &amp;amp; &amp;quot;2&amp;quot; &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;&apos;frmfig0614 &lt;BR/&gt;Option Explicit &lt;BR/&gt;&lt;BR/&gt;Private Sub cmddivide_Click() &lt;BR/&gt;   Dim numerator As Integer, denominator As Integer &lt;BR/&gt;   Dim result As String &lt;BR/&gt;   numerator = txtnum.Text &lt;BR/&gt;   denominator = txtden.Text &lt;BR/&gt;   result = divide(numerator, denominator) &lt;BR/&gt;   If result = &amp;quot;&amp;quot; Then &lt;BR/&gt;    lblthree.Caption = &amp;quot;divide by zero&amp;quot; &lt;BR/&gt;   Else &lt;BR/&gt;    lblthree.Caption = result &lt;BR/&gt;   End If &lt;BR/&gt;    &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Function divide(n As Integer, d As Integer) As String &lt;BR/&gt;If d = 0 Then &lt;BR/&gt;   Exit Function &lt;BR/&gt;   Print &amp;quot;after exit function &amp;quot; &lt;BR/&gt;Else &lt;BR/&gt;   divide = &amp;quot;division yields &amp;quot; &amp;amp; n / d &lt;BR/&gt;End If &lt;BR/&gt;&lt;BR/&gt;End Function&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;&lt;BR/&gt;&apos;frmfig0310 &lt;BR/&gt;Option Explicit &lt;BR/&gt;Dim sum As Integer &lt;BR/&gt;Private Sub cmdadd_Click() &lt;BR/&gt;  sum = sum + txtinput.Text &lt;BR/&gt;  txtinput.Text = &amp;quot;&amp;quot; &lt;BR/&gt;  txtsum.Text = sum &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub cmdexit_Click() &lt;BR/&gt;   End &lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;&apos;frmdraw &lt;BR/&gt;Option Explicit &lt;BR/&gt;&lt;BR/&gt;Private Sub cmddraw_Click() &lt;BR/&gt;Dim side As Integer, row As Integer, column As Integer &lt;BR/&gt;side = txtinput.Text &lt;BR/&gt;Cls &lt;BR/&gt;If side &amp;lt;= 12 Then &lt;BR/&gt;   If side &amp;gt; 0 Then &lt;BR/&gt;       row = 1 &lt;BR/&gt;While row &amp;lt;= side &lt;BR/&gt;  column = 1 &lt;BR/&gt; While column &amp;lt;= side &lt;BR/&gt;  If row = 1 Or row = side Or column = 1 Or column = side Then &lt;BR/&gt;  &lt;BR/&gt;      Print &amp;quot;$&amp;quot;; &lt;BR/&gt;   Else &lt;BR/&gt;      Print &amp;quot;&amp;amp;&amp;quot;; &lt;BR/&gt;   End If &lt;BR/&gt;   column = column + 1 &lt;BR/&gt; Wend &lt;BR/&gt; Print &lt;BR/&gt; row = row + 1 &lt;BR/&gt; Wend &lt;BR/&gt;  &lt;BR/&gt; Else &lt;BR/&gt;   Print &amp;quot;side too small &amp;quot; &lt;BR/&gt;   Beep &lt;BR/&gt; End If &lt;BR/&gt;   Else &lt;BR/&gt;   Print &amp;quot;side too large &amp;quot; &lt;BR/&gt;   Beep &lt;BR/&gt;  End If &lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;&apos;frmdisplay &lt;BR/&gt;Option Explicit &lt;BR/&gt;&lt;BR/&gt;Private Sub cmdprint_Click() &lt;BR/&gt;Dim counter As Integer &lt;BR/&gt;txtinput.SetFocus &lt;BR/&gt;counter = 0 &lt;BR/&gt;counter = Val(txtinput.Text) &lt;BR/&gt;lbldisplay.Caption = &amp;quot;&amp;quot; &lt;BR/&gt;&apos;txtinput.SetFocus &lt;BR/&gt;Do While counter &amp;gt; 0 &lt;BR/&gt;    lbldisplay.Caption = lbldisplay.Caption &amp;amp; &amp;quot;#&amp;quot; &lt;BR/&gt;    counter = counter - 1 &lt;BR/&gt; Loop &lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;*******************************&lt;BR/&gt;&apos;frmcompund &lt;BR/&gt;Option Explicit &lt;BR/&gt;&lt;BR/&gt;Private Sub cmdcal_Click() &lt;BR/&gt;  Dim years As Integer &lt;BR/&gt;  Dim interestrate As Double &lt;BR/&gt;  Dim amount As Currency &lt;BR/&gt;  Dim principal As Currency &lt;BR/&gt;  lstdisplay.Clear &lt;BR/&gt;  years = 10 &lt;BR/&gt;  principal = txtamount.Text &lt;BR/&gt;  interestrate = txtinterest.Text / 100 &lt;BR/&gt;  lstdisplay.AddItem &amp;quot;year &amp;quot; &amp;amp; vbTab &amp;amp; &amp;quot;amount on deposit&amp;quot; &lt;BR/&gt;  For years = 1 To 10 &lt;BR/&gt;       amount = principal * (1 + interestrate) ^ years &lt;BR/&gt;       lstdisplay.AddItem Format$(years, &amp;quot;@@@@&amp;quot;) &amp;amp; vbTab &amp;amp; Format$(Format$(amount, &amp;quot;currency&amp;quot;), _ &lt;BR/&gt;       String$(17, &amp;quot;@&amp;quot;)) &lt;BR/&gt;        &lt;BR/&gt;  Next years &lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub cmdexit_Click() &lt;BR/&gt;  End &lt;BR/&gt;End Sub</description>
<pubDate>Mon, 26 Feb 2007 11:38:18 GMT</pubDate>
<comments>http://commenting.blogfa.com/?blogid=vblog&amp;postid=71</comments>
<dc:creator>vblog</dc:creator>
<guid>http://vblog.blogfa.com/post-71.aspx</guid>
</item>
<item>
<title>اموزش کارهای جالب با Visual Basic 6.0</title>
<link>http://vblog.blogfa.com/post-70.aspx</link>
<description>یک جلوه گرافيكي فوق العاده جالب با عکس &lt;/P&gt;
&lt;P align=center&gt;&lt;IMG alt=&quot;&quot; hspace=0 src=&quot;http://i13.tinypic.com/48gdkjq.jpg&quot; align=baseline border=0&gt;&lt;/P&gt;
&lt;P align=right&gt;&lt;BR&gt;با اين برنامه مي تونين دو تا تصوير رو روي هم بندازيد و حركت بدين&lt;BR&gt;تصاويرتون بايد JPG باشه و بزرگ نباشه.دستورات زير رو در قسمت General فرم بنويسيد&lt;BR&gt;&lt;BR&gt;Dim Image1 As IPictureDisp&lt;BR&gt;Dim Image2 As IPictureDisp&lt;BR&gt;&lt;BR&gt;Private Type Location&lt;BR&gt;X As Integer&lt;BR&gt;Y As Integer&lt;BR&gt;End Type&lt;BR&gt;&lt;BR&gt;Dim Image1Move As Integer&lt;BR&gt;Dim Image2MoveX As Integer&lt;BR&gt;Dim Image2MoveY As Integer&lt;BR&gt;Dim Image1Local As Location&lt;BR&gt;Dim Image2Local As Location&lt;BR&gt;Const Operation = vbSrcAnd&lt;BR&gt;&lt;BR&gt;دو تا عكس رو در مسير برنامه كپي كنيد اسمشون هم 1 و 2 باشه&lt;BR&gt;&lt;BR&gt;كد زير برای Form_Load هست&lt;BR&gt;&lt;BR&gt;(&quot;Set Image1 = LoadPicture(App.Path &amp;amp; &quot;\Image1.jpg&lt;BR&gt;(&quot;Set Image2 = LoadPicture(App.Path &amp;amp; &quot;\Image2.jpg&lt;BR&gt;With me&lt;BR&gt;.Show&lt;BR&gt;Refresh.&lt;BR&gt;.AutoRedraw = True&lt;BR&gt;.ScaleMode = vbPixels&lt;BR&gt;End With&lt;BR&gt;&lt;BR&gt;Image1Move = 1&lt;BR&gt;Image2MoveX = 3&lt;BR&gt;Image2MoveY = 3&lt;BR&gt;&lt;BR&gt;Do&lt;BR&gt;me.PaintPicture Image1, Image1Local.X, Image1Local.Y&lt;BR&gt;me.PaintPicture Image1, Image1Local.X + me.ScaleWidth, Image1Local.Y&lt;BR&gt;me.PaintPicture Image1, Image1Local.X, Image1Local.Y + me.ScaleHeight&lt;BR&gt;me.PaintPicture Image1, Image1Local.X + me.ScaleWidth, Image1Local.Y + me.ScaleHeight&lt;BR&gt;&lt;BR&gt;me.PaintPicture Image2, Image2Local.X, Image2Local.Y, , , , , , , Operation&lt;BR&gt;me.PaintPicture Image2, Image2Local.X + me.ScaleWidth, Image2Local.Y, , , , , , , Operation&lt;BR&gt;me.PaintPicture Image2, Image2Local.X, Image2Local.Y + me.ScaleHeight, , , , , , , Operation&lt;BR&gt;me.PaintPicture Image2, Image2Local.X + me.ScaleWidth, Image2Local.Y + me.ScaleHeight, , , , , , , Operation&lt;BR&gt;&lt;BR&gt;With Image1Local&lt;BR&gt;.X = .X - Image1Move&lt;BR&gt;.Y = .Y - Image1Move&lt;BR&gt;&lt;BR&gt;If .X &amp;lt; -me.ScaleWidth Then .X = 0&lt;BR&gt;If .Y &amp;lt; -me.ScaleHeight Then .Y = 0&lt;BR&gt;End With&lt;BR&gt;&lt;BR&gt;With Image2Local&lt;BR&gt;.X = .X - Image2MoveX&lt;BR&gt;.Y = .Y - Image2MoveY&lt;BR&gt;&lt;BR&gt;If .X &amp;lt; -me.ScaleWidth Then .X = 0&lt;BR&gt;If .Y &amp;lt; -me.ScaleHeight Then .Y = 0&lt;BR&gt;&lt;BR&gt;If .X + me.ScaleWidth &amp;gt; me.ScaleWidth Then .X = -me.ScaleWidth&lt;BR&gt;If .Y + me.ScaleHeight &amp;gt; me.ScaleHeight Then .Y = -me.ScaleWidth&lt;BR&gt;End With&lt;BR&gt;&lt;BR&gt;DoEvents&lt;BR&gt;Loop&lt;BR&gt;&lt;BR&gt;براي اينكه دستورات بالا داخل يک حلقه بي پايان قرار مي گيره بايد در رويداد كليك فرم بنويسيد&lt;BR&gt;End&lt;BR&gt;&lt;BR&gt;فرم رو زياد بزرگ نكنيد سعي كنيد تصويرها هم اندازه باشند و فرم هم اندازه تصوير ها&lt;BR&gt;براي اينكه در حركت عكس ها تنوع ايجاد كنيم در رويداد MouseMove فرم دستور زير رو بنويسيد&lt;BR&gt;&lt;BR&gt;Image2MoveX = Int(me.ScaleWidth \ 2 - X) \ 10&lt;BR&gt;Image2MoveY = Int(me.ScaleWidth \ 2 - Y) \ 10&lt;BR&gt;&lt;BR&gt;موفق باشید&lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;تا حالا دیدین کسی قلب خودش رو جلوی دیگران در بیاره&lt;BR&gt;اما دیوید بلین جادوگر بزرگ امریکایی این کار رو کرد&lt;BR&gt;http://www.ljava2.persiangig.com/audio/blaine.asf&lt;BR&gt;&lt;BR&gt;برنامه اي كه با آن مي توان فايل اجرايي را باز كرد و سورسش را ديد&lt;BR&gt;http://www.hot.ee/microtools4u/Versions/SourceEditor.zip&lt;BR&gt;کرکش&lt;BR&gt;http://ar.yahoo.com/*http://64.233.98.43/e-Lunatic/15.08.Source.Editor.v2.26.zip&lt;BR&gt;&lt;BR&gt;يك فرم MDI پيشرفته&lt;BR&gt;http://www.pscode.com/vb/scripts/ShowZip.asp?lngWId=1&amp;amp;lngCodeId=57502&amp;amp;strZipAccessCode=tp%2F%5B575020912&lt;BR&gt;&lt;BR&gt;یک برنامه جالب برای بزرگ نمایی روی Desktop&lt;BR&gt;http://download.mehrzad.net/Default.aspx?ID=2&lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;برگرفته از وبلاگ دوست عزیزم ناصر به نشانی http://www.nasservb.blogfa.com/&lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;&lt;BR&gt;مخفي كردن منوي Start&lt;BR&gt;براي مخفي كردن منوي Start به يك تابع از كتابخانه user32.dll احتياج داريد&lt;BR&gt;&lt;BR&gt;Option Explicit&lt;BR&gt;&lt;BR&gt;Dim hwnd1 As Long&lt;BR&gt;Private Declare Function SetWindowPos Lib &quot;user32&quot; (ByVal hwnd As Long, _&lt;BR&gt;ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, _&lt;BR&gt;ByVal cy As Long, ByVal wFlags As Long) As Long&lt;BR&gt;Private Declare Function FindWindow Lib &quot;user32&quot; Alias &quot;FindWindowA&quot; _&lt;BR&gt;(ByVal lpClassName As String, ByVal lpWindowName As String) As Long&lt;BR&gt;&lt;BR&gt;Const SWP_HIDEWINDOW = &amp;amp;H80&lt;BR&gt;Const SWP_SHOWWINDOW = &amp;amp;H40&lt;BR&gt;&lt;BR&gt;حالا بايد دو تا دكمه براي مخفي و آشكار كردن منوي Startبه فرم اضافه كنيد&lt;BR&gt;&lt;BR&gt;كد مخفي كردن Start&lt;BR&gt;Hwnd1=FindWindow(&quot;Shell_traywnd&quot;,&quot;&quot;)&lt;BR&gt;call SetWindowPos(Hwnd1,0,0,0,0,0,SWP_HIDEWINDOW)&lt;BR&gt;&lt;BR&gt;كد ظاهر كردن Start&lt;BR&gt;call SetWindowPos(Hwnd1,0,0,0,0,0,SWP_SHOWWINDOW)&lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;آيكون يك برنامه رو از كالبدش كشيد بيرون و به صورت فايل آيكون ذخيره كرد&lt;BR&gt;اين آموزش از سري آموزشي كتابخانه قدرتمند Shell هست &lt;BR&gt;يك ماژول به پروژه اضافه كنيد و كد زير را داخلش كپي كنيد&lt;BR&gt;&lt;BR&gt;Public Const MAX_PATH = 260&lt;BR&gt;Public Const SHGFI_DISPLAYNAME = &amp;amp;H200&lt;BR&gt;Public Const SHGFI_EXETYPE = &amp;amp;H2000&lt;BR&gt;Public Const SHGFI_SYSICONINDEX = &amp;amp;H4000 &apos; System icon index&lt;BR&gt;Public Const SHGFI_LARGEICON = &amp;amp;H0 &apos; Large icon&lt;BR&gt;Public Const SHGFI_SMALLICON = &amp;amp;H1 &apos; Small icon&lt;BR&gt;Public Const ILD_TRANSPARENT = &amp;amp;H1 &apos; Display transparent&lt;BR&gt;Public Const SHGFI_SHELLICONSIZE = &amp;amp;H4&lt;BR&gt;Public Const SHGFI_TYPENAME = &amp;amp;H400&lt;BR&gt;Public Const BASIC_SHGFI_FLAGS = SHGFI_TYPENAME _&lt;BR&gt;Or SHGFI_SHELLICONSIZE Or SHGFI_SYSICONINDEX _&lt;BR&gt;Or SHGFI_DISPLAYNAME Or SHGFI_EXETYPE&lt;BR&gt;&lt;BR&gt;Public Type SHFILEINFO&lt;BR&gt;hIcon As Long&lt;BR&gt;iIcon As Long&lt;BR&gt;dwAttributes As Long&lt;BR&gt;szDisplayName As String * MAX_PATH&lt;BR&gt;szTypeName As String * 80&lt;BR&gt;End Type&lt;BR&gt;&lt;BR&gt;Public Declare Function SHGetFileInfo Lib &quot;shell32.dll&quot; Alias &quot;SHGetFileInfoA&quot; _&lt;BR&gt;(ByVal pszPath As String, _ &lt;BR&gt;ByVal dwFileAttributes As Long, _ &lt;BR&gt;psfi As SHFILEINFO, _&lt;BR&gt;ByVal cbSizeFileInfo As Long, _&lt;BR&gt;ByVal uFlags As Long) As Long&lt;BR&gt;&lt;BR&gt;Public Declare Function ImageList_Draw Lib &quot;comctl32.dll&quot; _&lt;BR&gt;(ByVal himl&amp;amp;, ByVal i&amp;amp;, ByVal hDCDest&amp;amp; _ &lt;BR&gt;,ByVal x&amp;amp;, ByVal y&amp;amp;, ByVal flags&amp;amp;) As Long&lt;BR&gt;Public shinfo As SHFILEINFO&lt;BR&gt;&lt;BR&gt;يه دكمه به برنامه اضافه كنيد و يك texbox و با دو تا picbox و دو تا برچسب&lt;BR&gt;و اینکه نام picbox ها رو image1 و image2 قرار بدهید&lt;BR&gt;آدرس فايل اجرايي را داخل texbox بنويسيد و در كد كليك دكمه كد زير را بنويسيد&lt;BR&gt;&lt;BR&gt;Dim hImgSmall As Long &lt;BR&gt;Dim hImgLarge As Long&lt;BR&gt;Dim FileName As String &lt;BR&gt;Dim r As Long&lt;BR&gt;&lt;BR&gt;FileName$ = Text1.Text&lt;BR&gt;hImgSmall&amp;amp; = SHGetFileInfo(FileName$, 0&amp;amp;, shinfo, Len(shinfo), BASIC_SHGFI_FLAGS Or SHGFI_SMALLICON)&lt;BR&gt;hImgLarge&amp;amp; = SHGetFileInfo(FileName$, 0&amp;amp;, shinfo, Len(shinfo), BASIC_SHGFI_FLAGS Or SHGFI_LARGEICON)&lt;BR&gt;Label1.Caption = Left$(shinfo.szDisplayName, InStr(shinfo.szDisplayName, Chr$(0)) - 1)&lt;BR&gt;Label2.Caption = Left$(shinfo.szTypeName, InStr(shinfo.szTypeName, Chr$(0)) - 1)&lt;BR&gt;&lt;BR&gt;image1.Picture = LoadPicture()&lt;BR&gt;image2.Picture = LoadPicture()&lt;BR&gt;&lt;BR&gt;r&amp;amp; = ImageList_Draw(hImgSmall&amp;amp;, shinfo.iIcon, image1.hDC, 0, 0, ILD_TRANSPARENT)&lt;BR&gt;r&amp;amp; = ImageList_Draw(hImgLarge&amp;amp;, shinfo.iIcon, image2.hDC, 0, 0, ILD_TRANSPARENT)&lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;چطور مي شه دكمه بستن پنجره در گوشه فرم رو غير فعال كرد&lt;BR&gt;شايد غير فعال كرد دكمه هاي تمام صفحه و كمينه رو بلد باشين ولي &lt;BR&gt;ديگه فرم خاصيت غير فعال كردن دكمه close رو نداره مگه كنترل بوكس فرم رو&lt;BR&gt;برداريم يا اصلآ فرم رو از نوع بدون منوي بالا وتيتر انتخاب كنيم&lt;BR&gt;ولي با اين كد مي تونين با داشتن تمام كنترل ها فقط دكمه كلوز رو غير فعال كنين&lt;BR&gt;تابع زير رو تعريف كنيد&lt;BR&gt;&lt;BR&gt;Public Const SC_CLOSE = &amp;amp;HF060&lt;BR&gt;Public Const MF_BYCOMMAND = &amp;amp;H0&lt;BR&gt;Public Declare Function GetSystemMenu Lib &quot;user32&quot; _&lt;BR&gt;(ByVal hwnd As Long, ByVal bRevert As Long) As Long&lt;BR&gt;Public Declare Function DeleteMenu Lib &quot;user32&quot; _ &lt;BR&gt;(ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long&lt;BR&gt;Declare Function DrawMenuBar Lib &quot;user32&quot; (ByVal hwnd As Long) As Long&lt;BR&gt;&lt;BR&gt;Public Sub DisableXbutton(ByVal frmHwnd As Long)&lt;BR&gt;Dim hMenu As Long&lt;BR&gt;hMenu = GetSystemMenu(frmHwnd, 0&amp;amp;)&lt;BR&gt;If hMenu Then&lt;BR&gt;Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)&lt;BR&gt;DrawMenuBar (frmHwnd)&lt;BR&gt;End If&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;حالا كد زير رو داخل Form_Load بنويسيد&lt;BR&gt;&lt;BR&gt;DisableXbutton (Me.hwnd)&lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;اين تابع مي تونه كليد هاي CRTL_ALT_Delete رو غير فعال كنه &lt;BR&gt;&lt;BR&gt;البته حتما بايد سريع به حالت قبل برگردونيد چون موندن اين حالت زياد جالب نيست&lt;BR&gt;&lt;BR&gt;Private Declare Function SystemParametersInfo Lib &quot;user32&quot; Alias &quot;SystemParametersInfoA&quot; _&lt;BR&gt;(ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long&lt;BR&gt;&lt;BR&gt;Private Const SPI_SCREENSAVERRUNNING = 97&lt;BR&gt;&lt;BR&gt;حالا دو تا كامند به فرم اضافه كنيد به اسم هاي Desabled و Enabled&lt;BR&gt;&lt;BR&gt;كد دكمه غير فعال كردن&lt;BR&gt;&lt;BR&gt;Private Sub Disabled_Click()&lt;BR&gt;Dim Ret As Long&lt;BR&gt;Dim pOld As Boolean&lt;BR&gt;Ret = SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, pOld, 0)&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;كد فعال سازي اين كليد ها بهتر است اين كدها را در Unload فرم نيز فراخواني كنيد &lt;BR&gt;&lt;BR&gt;Private Sub EnableD_Click()&lt;BR&gt;Dim Ret As Long&lt;BR&gt;Dim pOld As Boolean&lt;BR&gt;Ret = SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, pOld, 0)&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;اين كد رو هم توي پروژه ديگه تست كنيد - تاریخ فارسي&lt;BR&gt;&lt;BR&gt;MsgBox WeekdayName(Weekday(Date), False, vbSunday) &amp;amp; &quot;, &quot; &amp;amp; VBA.MonthName(VBA.Month(Date)) &amp;amp; &quot; &quot; &amp;amp; Day(Date) &amp;amp; &quot;, &quot; &amp;amp; VBA.Year(Date), vbOKOnly + vbInformation, &quot;The date&quot;&lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;با اين تابع مي تونيد آيكون هاي روي دسكتاپ رو مخفي و ظاهر كنيد&lt;BR&gt;&lt;BR&gt;اول فراخواني توابع &lt;BR&gt;&lt;BR&gt;Option Explicit&lt;BR&gt;Private Declare Function FindWindowEx Lib &quot;user32&quot; Alias &quot;FindWindowExA&quot; (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long&lt;BR&gt;Private Declare Function ShowWindow Lib &quot;user32&quot; (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long&lt;BR&gt;&lt;BR&gt;بعد سه تا كامند براي ظاهر كردن آيكون ها مخفي كردن آنها و خروج از فرم بنويسيد&lt;BR&gt;&lt;BR&gt;كد هر كدام اينطور است&lt;BR&gt;&lt;BR&gt;Private Sub cmdDHide_Click()&lt;BR&gt;Dim hWnd As Long&lt;BR&gt;hWnd = FindWindowEx(0&amp;amp;, 0&amp;amp;, &quot;Progman&quot;, vbNullString)&lt;BR&gt;ShowWindow hWnd, 0&lt;BR&gt;End Sub&apos;--------------------------------&lt;BR&gt;Private Sub cmdDShow_Click()&lt;BR&gt;Dim hWnd As Long&lt;BR&gt;hWnd = FindWindowEx(0&amp;amp;, 0&amp;amp;, &quot;Progman&quot;, vbNullString)&lt;BR&gt;ShowWindow hWnd, 5&lt;BR&gt;End Sub&apos;---------------------------------&lt;BR&gt;Private Sub cmdExit_Click()&lt;BR&gt;Me.Hide&lt;BR&gt;End&lt;BR&gt;End Sub&apos;-------------------------------------&lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;برگرفته شده از وبلاگ دوست عزیزم ناصر به نشانی http://www.nasservb.blogfa.com/ &lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;اموزش یک کار جالب با فرم ها&lt;BR&gt;تنها با دو خط كد ميتونيد جلوه اي رو بوجود بياريد كه فكرشم نمي كرديد. يك فرم رو توي يك فرم ديگه جابديد. استفاده هاي زيادي ميشه ازش كرد. مثلا ساخت نوار ابزارهايي مثل اوني كه فتوشاپ داره. راجع بهش فكر كنيد&lt;BR&gt;اين هم كدش&lt;BR&gt;&lt;BR&gt;Private Declare Function SetParent Lib &quot;user32&quot; ( _&lt;BR&gt;ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long&lt;BR&gt;&lt;BR&gt;Private Sub Form_Load()&lt;BR&gt;SetParent Form2.hWnd, hWnd&lt;BR&gt;Form2.Show&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;چطور مي توان كادر Brows Folder ويندوز رو ظا هر كرد&lt;BR&gt;اين كادر استفاده ي بسيار زيادي در برنامه هاي كاربردي داره.وموقعي استفاده مي شه كه كار بر بايد يك پوشه رو (مثلآ براي نصب برنامه )انتخاب كنه&lt;BR&gt;يك ماژول ايجاد كنيد و كد هاي زبر رابنويسيد&lt;BR&gt;&lt;BR&gt;&apos;------Typing New data For BrowsForm---------------------&lt;BR&gt;Public Type BrowseInfo&lt;BR&gt;hWndOwner As Long&lt;BR&gt;pIDLRoot As Long&lt;BR&gt;pszDisplayName As Long&lt;BR&gt;lpszTitle As Long&lt;BR&gt;ulFlags As Long&lt;BR&gt;lpfnCallback As Long&lt;BR&gt;lParam As Long&lt;BR&gt;iImage As Long&lt;BR&gt;End Type&lt;BR&gt;&lt;BR&gt;&apos;---------------Conset For BrowsForm--------------------&lt;BR&gt;Public Const BIF_RETURNONLYFSDIRS = 1&lt;BR&gt;Public Const BIF_DONTGOBELOWDOMAIN = 2&lt;BR&gt;Public Const MAX_PATH = 260&lt;BR&gt;&lt;BR&gt;&apos;-----------------------Declareing API------------------------------------------&lt;BR&gt;Declare Function SHBrowseForFolder Lib &quot;shell32&quot; (lpbi As BrowseInfo) As Long&lt;BR&gt;&lt;BR&gt;حال در جايي كه مي خواهيد كادر ظاهر شود كد زير رابنويسيد&lt;BR&gt;&lt;BR&gt;Dim lpIDList As Long&lt;BR&gt;Dim sBuffer As String&lt;BR&gt;Dim szTitle As String&lt;BR&gt;Dim tBrowseInfo As BrowseInfo&lt;BR&gt;szTitle = &quot;Select Folder... &quot;&lt;BR&gt;With tBrowseInfo&lt;BR&gt;.hWndOwner = Me.hwnd&lt;BR&gt;.lpszTitle = lstrcat(szTitle, &quot;&quot;)&lt;BR&gt;.ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN&lt;BR&gt;End With&lt;BR&gt;lpIDList = SHBrowseForFolder(tBrowseInfo)&lt;BR&gt;If (lpIDList) Then&lt;BR&gt;sBuffer = Space(MAX_PATH)&lt;BR&gt;SHGetPathFromIDList lpIDList, sBuffer&lt;BR&gt;sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)&lt;BR&gt;msgbox( sBuffer)&lt;BR&gt;End If&lt;BR&gt;&lt;BR&gt;در پايان خط م اقبل آخر با يك پيغام مسير انتخاب شده كاربر اعلام مي شود كه شما عزيزان مي توانيد آنرا به دلخواه تغيير دهيد&lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;چطور مي توان كادر خصوصيات Propertis مربوط به يك فايل را ظاهر كرد&lt;BR&gt;&lt;BR&gt;كادر خصوصيات اكثرآ در نوشتن يك كاد آرشيو يا ليست فايل كاربرد دارد كه شما روي نام فايل راست كليك مي كنيد و اين گزينه را معمولآ در انتهاي ليست انتخاب مي كنيد واين كادر ظاهر ميشود نوشتن چنين كد هايي باعث حرفه شدن برنامه ي شما مي گردد&lt;BR&gt;&lt;BR&gt;به ماژولمان كد هاي زير را اضافه كنيد&lt;BR&gt;&lt;BR&gt;&apos;------Typing New data For Propertis File---------------------&lt;BR&gt;Type SHELLEXECUTEINFO&lt;BR&gt;cbSize As Long&lt;BR&gt;fMask As Long&lt;BR&gt;hwnd As Long&lt;BR&gt;lpVerb As String&lt;BR&gt;lpFile As String&lt;BR&gt;lpParameters As String&lt;BR&gt;lpDirectory As String&lt;BR&gt;nShow As Long&lt;BR&gt;hInstApp As Long&lt;BR&gt;lpIDList As Long&lt;BR&gt;lpClass As String&lt;BR&gt;hkeyClass As Long&lt;BR&gt;dwHotKey As Long&lt;BR&gt;hIcon As Long&lt;BR&gt;hProcess As Long&lt;BR&gt;End Type&lt;BR&gt;&apos;---------------Conset For Propertis Dialog-------------------&lt;BR&gt;Public Const SEE_MASK_INVOKEIDLIST = &amp;amp;HC&lt;BR&gt;Public Const SEE_MASK_NOCLOSEPROCESS = &amp;amp;H40&lt;BR&gt;Public Const SEE_MASK_FLAG_NO_UI = &amp;amp;H400&lt;BR&gt;Public Const ATTR_NORMAL = 0&lt;BR&gt;Public Const ATTR_READONLY = 1&lt;BR&gt;Public Const ATTR_HIDDEN = 2&lt;BR&gt;Public Const ATTR_SYSTEM = 4&lt;BR&gt;Public Const ATTR_VOLUME = 8&lt;BR&gt;Public Const ATTR_DIRECTORY = 16&lt;BR&gt;Public Const ATTR_ARCHIVE = 32&lt;BR&gt;&apos;-----------------------Declareing API------------------------------------------&lt;BR&gt;Declare Function ShellExecuteEX Lib &quot;shell32.dll&quot; Alias _&lt;BR&gt;&quot;ShellExecuteEx&quot; (SEI As SHELLEXECUTEINFO) As Long&lt;BR&gt;&lt;BR&gt;&apos;-----------------------------------------------------------------------------------------&lt;BR&gt;&lt;BR&gt;Public Function ShowFileProperties(filename As String, OwnerhWnd As Long) As Long&lt;BR&gt;Dim SEI As SHELLEXECUTEINFO&lt;BR&gt;With SEI&lt;BR&gt;.cbSize = Len(SEI)&lt;BR&gt;.fMask = SEE_MASK_NOCLOSEPROCESS Or SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI&lt;BR&gt;.hwnd = OwnerhWnd&lt;BR&gt;.lpVerb = &quot;properties&quot;&lt;BR&gt;.lpFile = filename&lt;BR&gt;.lpParameters = vbNullChar&lt;BR&gt;.lpDirectory = vbNullChar&lt;BR&gt;.nShow = 0&lt;BR&gt;.hInstApp = 0&lt;BR&gt;.lpIDList = 0&lt;BR&gt;End With&lt;BR&gt;ShellExecuteEX SEI&lt;BR&gt;ShowFileProperties = SEI.hInstApp&lt;BR&gt;End Function&lt;BR&gt;&lt;BR&gt;حالا هر فايلي را كه مي خواهيد خصوصيياتش نمايش داد شود به اين تابع به صورت زير ارسال كنيد-پاس دهيد&lt;BR&gt;&lt;BR&gt;ShowFileProperties(FileName,Me.hwnd)&lt;BR&gt;&lt;/P&gt;
&lt;P align=center&gt;آموزش های اینده : مترجم (کامپایلر ) و برنامه اف تی پی&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG alt=&quot;&quot; hspace=0 src=&quot;http://i15.tinypic.com/4dnra1f.jpg&quot; align=baseline border=0&gt;&lt;/P&gt;
&lt;P align=right&gt;&lt;BR&gt;*****************************&lt;BR&gt;چطور ميتوان سطل آشغال ويندوز رو خالي كرد&lt;BR&gt;&lt;BR&gt;اگه بخوايد يك برنامه تقويت ويندوز بنويسيد به گزينه خالي كردن سطل آشغال ويندوز نياز خواهيد داشت&lt;BR&gt;سري قبل اين اموزش رو در مورد كنترل سي پي يو (تاكس منيگر)ويندوز نوشتم &lt;BR&gt;براي اين كار بايد از تابعي موجود در كتابخانه قدرتمند شل كه در آرشيو اموزشهاي زيادي راجع به اين كتابخانه هست استفاده كنيد&lt;BR&gt;&lt;BR&gt;شيوه ي تعريف كتابخانه&lt;BR&gt;&lt;BR&gt;Private Declare Function SHEmptyRecycleBin Lib &quot;shell32.dll&quot; Alias &quot;SHEmptyRecycleBinA&quot; (ByVal hWnd As Long, ByVal pszRootPath As String, ByVal dwFlags As Long) As Long&lt;BR&gt;Const SHERB_NOPROGRESSUI = &amp;amp;H2&lt;BR&gt;&lt;BR&gt;شيوه ي استفاده&lt;BR&gt;&lt;BR&gt;Private Sub Command1_Click()&lt;BR&gt;Dim retvaL&lt;BR&gt;retvaL = SHEmptyRecycleBin(Form1.hWnd, &quot;&quot;, SHERB_NOPROGRESSUI)&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;کنترل CPU خیلی جالبه&lt;BR&gt;&lt;BR&gt;يک فرم ايجاد كنيد و يه هفت تا ليبل بزارين روش با يه تايمر و يه HScroll&lt;BR&gt;خاصيت Max مربوط به اسكرول رو روي 100 بزارين&lt;BR&gt;خاصيت Interval تايمر رو روي 50 بزارين&lt;BR&gt;&lt;BR&gt;اين كدها رو اولين خط فرم بنويسيد&lt;BR&gt;&lt;BR&gt;&apos;----------Type New Data For Memory------------------&lt;BR&gt;Private Type MEMORYSTATUS&lt;BR&gt;dwlength As Long&lt;BR&gt;dwMemoryLoad As Long&lt;BR&gt;dwTotalPhys As Long&lt;BR&gt;dwAvailPhys As Long&lt;BR&gt;dwTotalPageFile As Long&lt;BR&gt;dwAvailPageFile As Long&lt;BR&gt;dwTotalVirtual As Long&lt;BR&gt;dwAvailVirtual As Long&lt;BR&gt;End Type &apos;------------------Declear API Of Kernal Windows Librery-------------&lt;BR&gt;Private Declare Sub GlobalMemoryStatus Lib &quot;KERNEL32&quot; (lpBuffer As MEMORYSTATUS)&lt;BR&gt;Dim Mem As MEMORYSTATUS&lt;BR&gt;&lt;BR&gt;روي تايمر دابل كليك كنيد و كد زير را بنويسيد&lt;BR&gt;&lt;BR&gt;GlobalMemoryStatus Mem&lt;BR&gt;Me.Caption = Mem.dwMemoryLoad &amp;amp; &quot;% used&quot;&lt;BR&gt;Label1.Caption = &quot;Memory used: &quot; &amp;amp; Mem.dwMemoryLoad &amp;amp; &quot;%&quot;&lt;BR&gt;Label2.Caption = &quot;Total Physical Memory: &quot; &amp;amp; Mem.dwTotalPhys&lt;BR&gt;Label3.Caption = &quot;Available Physical Memory: &quot; &amp;amp; Mem.dwAvailPhys&lt;BR&gt;Label4.Caption = &quot;Page File Bytes: &quot; &amp;amp; Mem.dwTotalPageFile&lt;BR&gt;Label5.Caption = &quot;Available bytes of Page File: &quot; &amp;amp; Mem.dwAvailPageFile&lt;BR&gt;Label6.Caption = &quot;Total Virtual bytes: &quot; &amp;amp; Mem.dwTotalVirtual&lt;BR&gt;Label7.Caption = &quot;Available Virtual Bytes: &quot; &amp;amp; Mem.dwAvailVirtual&lt;BR&gt;HScroll1.Value = Mem.dwMemoryLoad&lt;BR&gt;&lt;BR&gt;با كداي بالا مي تونين كاركرد CPU و RAM رو مشاهده كنيد مثل خود ويندوز&lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;WindowsMediaPlayer&lt;BR&gt;&lt;BR&gt;کنترل WindowsMediaPlayer که توسط کتابخانه قدرتمندي پشتيباني مي شود را مي توان در انواع ويندوز استفاده کرد &lt;BR&gt;&lt;BR&gt;نحوه ي استفاده از کنترل. از منوي Components\WindowsMediaPlayer گزينه WindowsMediaPlayer را انتخاب کنید&lt;BR&gt;&lt;BR&gt;قبل از اينکه آن کادر را ببنديد MicrosoftCommonDialog را هم انتخاب کنید&lt;BR&gt;&lt;BR&gt;یک دکمه قرار دهید و کد زیر را درونش وارد کنید&lt;BR&gt;&lt;BR&gt;CommonDialog1.ShowOpen&lt;BR&gt;WindowsMediaPlayer1.URL=CommDialog1.FileName&lt;BR&gt;&lt;BR&gt;مشاهده مي کنيد که کادر فايل باز شده و فايل انتخاب شده پخش مي شود&lt;BR&gt;&lt;BR&gt;private sub Play_Click()&lt;BR&gt;WindowsMediaPlayer1.Controls.Play()&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;&apos;------------------------&lt;BR&gt;Prrivate Sub Stop_Click()&lt;BR&gt;WindowsMediaPlayer1.Controls.Stop()&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;&apos;------------------------&lt;BR&gt;Private Sub Pause_Click()&lt;BR&gt;WindowsMediaPlayer1.Pause()&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;یک تایمر به فرم اضافه کنید و یک HScroll1 و یک Lable&lt;BR&gt;تايمر را به 50 تنظيم کنيد.روي تايمر دوبار کليک کنيد وکد زير را وارد کنید&lt;BR&gt;&lt;BR&gt;Private sub Timer1_Timer()&lt;BR&gt;Label1.Caption=WindowsMediaPlayer1.Controls.CurrentPositionString&lt;BR&gt;HScroll1.max=WindowsMediaPlayer1.Controls.CurrentItem&lt;BR&gt;HScrol1.Value=WindowsMediaPlayer1.Controls.CurrentPosition&lt;BR&gt;End Sub&lt;BR&gt;*****************************&lt;BR&gt;اين هم تمام توابع موجود در فايل GDI32.Dll اين دستورات رو تو يه ماژول كپي كنيد&lt;BR&gt;http://www.sharemation.com/MahdiVB678/new2/GDI32%20function.rar?uniq=yvs4wt&lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;فرمت فایل MP3&lt;BR&gt;&lt;BR&gt;مبحث امروز كه ارتباط داره به خواندن اطلاعات اساسي فايل MP3.متغيير هاي زير رو تو اول كد تعريف كنيد &lt;BR&gt;&lt;BR&gt;Dim HasTag As Boolean&lt;BR&gt;Dim Tagg As String * 3&lt;BR&gt;Dim Songname As String * 30&lt;BR&gt;Dim Artist As String * 30&lt;BR&gt;Dim Album As String * 30&lt;BR&gt;Dim Year As String * 4&lt;BR&gt;Dim Comment As String * 30&lt;BR&gt;Dim Genre As String * 1&lt;BR&gt;&lt;BR&gt;البته كد بالا تست شده است مورد كاملش اينهاست ولي نمي دونم جواب بده يانه خودتون امتحان كنيد اگه شد بهم بگيد -فعلآ استفاده نكنيد &lt;BR&gt;&lt;BR&gt;Private Type MP3Tag&lt;BR&gt;FullName As String &apos; Filename and filepath of MP3 file&lt;BR&gt;FileName As String &apos; Name of MP3 file&lt;BR&gt;Path As String &apos; Path of MP3 file&lt;BR&gt;title As String * 30&lt;BR&gt;artist As String * 30&lt;BR&gt;album As String * 30&lt;BR&gt;Year As String * 4&lt;BR&gt;Comment As String * 30&lt;BR&gt;Genre As String * 20&lt;BR&gt;TagPresent As Boolean&lt;BR&gt;MPEGVersion As String * 3 &apos; Version 1.0, 2.0 or 3.0&lt;BR&gt;Layer As String * 1 &apos; Layer 1, 2 or 3&lt;BR&gt;Protection As Boolean &apos; 0=CRC is present, 1=Not Protected&lt;BR&gt;BitRate As String * 3 &apos; Recording bitrate&lt;BR&gt;SampleRate As String * 5 &apos; Sampling Frequency&lt;BR&gt;Padding As Integer &apos; 0=Frame is not padded, 1=(32bits for Layer 1, 8bits for Layer 2/3)&lt;BR&gt;PrivateBit As Integer &apos; Not used. Do what you want with it&lt;BR&gt;ChannelMode As String * 12 &apos; 00=Stereo, 01=Joint Stereo, 10=Dual Channel Stereo, 11=Mono&lt;BR&gt;ModeExtension As String * 2 &apos; Used only for Joint Stereo&lt;BR&gt;Copyright As Boolean &apos; Is file copyrighted?&lt;BR&gt;Original As Boolean &apos; Is file on original media?&lt;BR&gt;Emphasis As String * 8 &apos; Emphasis setting (usually none (00))&lt;BR&gt;FrameLength As Integer &apos; Calculated from BitRate, SampleRate and Padding&lt;BR&gt;TotalFrames As Long &apos; Filelength/Framelength&lt;BR&gt;PlayTime As Single &apos; Calculated from TotalFrames, SampleRate and Stereo?&lt;BR&gt;ValidHeader As Boolean &apos; True=Valid Header found, False=Not an MP3 file&lt;BR&gt;End Type&lt;BR&gt;&lt;BR&gt;بعد يك پروسيجر به اين صورت تعريف مي كنيم تاهر وقت بهش يك نام فايل پاس داديم متغيير هامون پر بشه از اطلاعت فايل&lt;BR&gt;&lt;BR&gt;Private Sub GetTag(Filename)&lt;BR&gt;Open Filename For Binary As #1&lt;BR&gt;Get #1, FileLen(Filename) - 127, Tagg&lt;BR&gt;If Not Tagg = &quot;TAG&quot; Then&lt;BR&gt;Close #1&lt;BR&gt;HasTag = False&lt;BR&gt;Songname = &quot;No Tag Found&quot;&lt;BR&gt;Artist = &quot;No Tag Found&quot;&lt;BR&gt;Album = &quot;No Tag Found&quot;&lt;BR&gt;Year = &quot;None&quot;&lt;BR&gt;Comment = &quot;No Tag Found&quot;&lt;BR&gt;Genre = &quot;0&quot;&lt;BR&gt;Exit Sub&lt;BR&gt;End If&lt;BR&gt;HasTag = True&lt;BR&gt;Get #1, , Songname&lt;BR&gt;Get #1, , Artist&lt;BR&gt;Get #1, , Album&lt;BR&gt;Get #1, , Year&lt;BR&gt;Get #1, , Comment&lt;BR&gt;Get #1, , Genre&lt;BR&gt;Close #1&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;حالا به اين صورت ميشه ازش استفاده كرد&lt;BR&gt;&lt;BR&gt;Me.GetTag(MP3 FileName)&lt;BR&gt;&lt;BR&gt;به طور معمول وقتي فايل به صورت باينري باز مي شه چيزي جز صفر و يك رو نمشه از توش خواند به همين دليل اين نوع باز كردن فايل رو تصوير آينه وار حافظه مي گن.چون هر چي روي هارد نوشته همون رو دودستي تحويلت مي ده!از اين رو بايد هميشه بعد از خواندن اين نوع فايل ها اونارو از فرمت باينري در آورد با تابع زير كه ازقبل توي وي بي هست&lt;BR&gt;&lt;BR&gt;Src(Your Ascii Word)&lt;BR&gt;&lt;BR&gt;اگه رشته رو با(String *30)ولي در برنامه بالا چون اندازه رشته رو تعريف كرديم &lt;BR&gt;&lt;BR&gt;يك كد اسكي مقدار دهي كنيم خود به خود هنگام چاپ به فرم رشته ي معمولي در مياد&lt;BR&gt;&lt;BR&gt;در دستور بالا ما با علامت ضربدر به وي بي مي گوييم كه چه مقدار حافظه را براي متغيير ما نگه دارد ولي اگر اين مورد را استفاده نكنيم وي بي به صورت اتوماتيك سايز رشته رو انتخاب .ميكنه اگه رشته كم باشه كم واگر زياد باشه زياد براش جا نگه مي داره به ازاي هر حرف يك بايت&lt;BR&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG alt=&quot;&quot; hspace=0 src=&quot;http://i12.tinypic.com/484f12c.jpg&quot; align=baseline border=0&gt;&lt;/P&gt;
&lt;P align=right&gt;&lt;BR&gt;*****************************&lt;BR&gt;چطور مي توان از Desktop عكس گرفت&lt;BR&gt;اين خط رو در اولين خط كد فرم بنويسيد-براي مبتدي ها &lt;BR&gt;&lt;BR&gt;Private Declare Function BitBlt Lib &quot;gdi32&quot; (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long&lt;BR&gt;Private Declare Function GetDC Lib &quot;user32&quot; (ByVal hwnd As Long) As Long&lt;BR&gt;Private Declare Function StretchBlt Lib &quot;gdi32&quot; (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long&lt;BR&gt;&lt;BR&gt;طريقه استفاده &lt;BR&gt;Private Sub Form_load()&lt;BR&gt;Dim W, H&lt;BR&gt;W = Screen.Width / 15&lt;BR&gt;H = Screen.Height / 15&lt;BR&gt;StretchBlt hdc, 0, 0, W, H, GetDC(0&amp;amp;), 0, 0, W, H, vbSrcCopy&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;كشيدن يك دايره روي فرم با كد نويسي-نمودار دايره اي-بيضي&lt;BR&gt;Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)&lt;BR&gt;PI = 3.14159265&lt;BR&gt;For i = 0 To 161 Step 10&lt;BR&gt;Me.Circle (219, 167), i, RGB(0, 0, 0), 360 * (PI / 180), 360 * (PI / 180), 1&lt;BR&gt;Next&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;آنرا به 3 تغيير دهيد.داشتم مي گفتم پارامتر سوم براي شعاع دايره -اندازه آن-پارامتر چهارمscalmode توضيحات: پارامتر اول ودوم مكان ترسيم دايره اگر دايره در فرم شما رسم نشد خاصيت&lt;BR&gt;براي رنگ پنجم براي نقطعه شروع وششم براي نقطه ي پايان اين دو تا براي رسم نمودار دايره اي بكار مي روند.پارامتر آخر هم براي رسم بيضي استفاده مي شود&lt;BR&gt;&lt;BR&gt;چگونه مي توان يك مداد درست كرد مانند برنامه نقاشي ويندوز&lt;BR&gt;كد زير را در MouseMove بنويسيد&lt;BR&gt;If Button &amp;lt;&amp;gt; vbright Then Me.PSet (X, Y)&lt;BR&gt;&lt;BR&gt;چطور مي توان يك قطره چكان درست كرد كه روي هر گزينه رفت رنگ پيش فرض رنگ انجا شود&lt;BR&gt;عكس بنويسيدMouseMoveبه فرم اضافه كنيد يك عكس داخل كادر عكس قرار دهيد و كدزير را در رويدادPictureويكLabelيك&lt;BR&gt;&lt;BR&gt;Label1.BackColor=Picture1.Point(X,Y)&lt;BR&gt;&lt;BR&gt;چطور مي توان يك عكس را معكوس كرد&lt;BR&gt;منظورت ازمعكوس اگه معكوس خود عكس در طراحي باشه كد زير جوابش هست&lt;BR&gt;&lt;BR&gt;With Picture1&lt;BR&gt;.PaintPicture .Picture, 0, .Height, .Width, -.Height&lt;BR&gt;End With&lt;BR&gt;&lt;BR&gt;ولي اگه منظورت معكوس رنگ باشه كد زير جوابش هست&lt;BR&gt;With Picture1&lt;BR&gt;.PaintPicture .Picture, 0, 0, , , , , , , vbDstInvert&lt;BR&gt;End With&lt;BR&gt;&lt;BR&gt;يراي موقعي به كار مي رود كه از يك اسم زياداستفاده مي كنيم.اسم را جلوي آن مينويسيم وهر وقت يك دات بزنيم قابل استفاده استWithتوضيحات:ِ&lt;BR&gt;پارامتر اول يراي عكسي كه ميخواهيم از آن براي ترسيم استفاده كنيم.دوم و سوم براي نقطه شروع ترسيم .چهارم و پنجم براي اندازه تصوير ترسيمي.ششموهفتم براي نقطه پايان ترسيم.هشتم ونهم براي اندازه هاي پاياني ترسيم وپارامتر آخر براي نوع ترسيم&lt;BR&gt;&lt;BR&gt;******************************&lt;BR&gt;چطور ميشه يك عكس رو روشنتر كرد يا پر رنگ&lt;BR&gt;Private Declare Function SetPixelV Lib &quot;gdi32&quot; (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Byte&lt;BR&gt;Private Declare Function GetPixel Lib &quot;gdi32&quot; (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long&lt;BR&gt;&lt;BR&gt;Private Sub CmdBrightness_Click()&lt;BR&gt;&apos;variables for brightness, color calculation, positioning&lt;BR&gt;Dim Brightness As Single&lt;BR&gt;Dim NewColor As Long&lt;BR&gt;Dim x, y As Integer&lt;BR&gt;Dim r, g, b As Integer&lt;BR&gt;&apos;change the brightness to a percent&lt;BR&gt;Brightness = TxtBrightness / 100&lt;BR&gt;&apos;run a loop through the picture to change every pixel&lt;BR&gt;For x = 0 To Picture1.ScaleWidth&lt;BR&gt;For y = 0 To Picture1.ScaleHeight&lt;BR&gt;&apos;get the current color value&lt;BR&gt;NewColor = GetPixel(Picture1.hDC, x, y)&lt;BR&gt;&apos;extract the R,G,B values from the long returned by GetPixel&lt;BR&gt;r = (NewColor Mod 256)&lt;BR&gt;b = (Int(NewColor / 65536))&lt;BR&gt;g = ((NewColor - (b * 65536) - r) / 256)&lt;BR&gt;&apos;change the RGB settings to their appropriate brightness&lt;BR&gt;r = r * Brightness&lt;BR&gt;b = b * Brightness&lt;BR&gt;g = g * Brightness&lt;BR&gt;&apos;make sure the new variables aren&apos;t too high or too low&lt;BR&gt;If r &amp;gt; 255 Then r = 255&lt;BR&gt;If r &amp;lt; 0 Then r = 0&lt;BR&gt;If b &amp;gt; 255 Then b = 255&lt;BR&gt;If b &amp;lt; 0 Then b = 0&lt;BR&gt;If g &amp;gt; 255 Then g = 255&lt;BR&gt;If g &amp;lt; 0 Then g = 0&lt;BR&gt;&apos;set the new pixel&lt;BR&gt;SetPixelV Picture1.hDC, x, y, RGB(r, g, b)&lt;BR&gt;&apos;continue through the loop&lt;BR&gt;Next y&lt;BR&gt;&apos;refresh the picture box every 10 lines (a nice progress bar effect)&lt;BR&gt;If x Mod 10 = 0 Then Picture1.Refresh&lt;BR&gt;Next x&lt;BR&gt;&apos;final picture refresh&lt;BR&gt;Picture1.Refresh&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;احتياج داريد كه متن درون آن به درصد برابر ميزان روشنايي استTxtBrightnessيك كادر متن به نامCmdBrightnessحال كردين با توضيحات كامل براي كد بالا يك كامند به نام&lt;BR&gt;&lt;BR&gt;************************************&lt;BR&gt;چگونگي زدن طیف رنگ (مثلآ سبز به سياه) به يك فرم&lt;BR&gt;در رويداد فرم Load كد زير رابنويسيد&lt;BR&gt;&lt;BR&gt;On Error GoTo B&lt;BR&gt;Dim r%, F%, Heght%, Wath%, X%, Color$ &apos;--\/\/\/ Set Color Of Form&lt;BR&gt;Color = &quot;Red_Black&quot; &apos;----------------تعيين تيف رنگ &lt;BR&gt;Heigh = Me.Height + 200: Widt = Me.Width&lt;BR&gt;F = Heigh \ 255: r = 0&lt;BR&gt;Select Case Color&lt;BR&gt;Case &quot;Red_Black&quot;: GoTo 1&lt;BR&gt;Case &quot;With_Red&quot;: GoTo 2&lt;BR&gt;Case &quot;Green_Black&quot;: GoTo 3&lt;BR&gt;Case &quot;With_Green&quot;: GoTo 4&lt;BR&gt;Case &quot;Blue_Black&quot;: GoTo 5&lt;BR&gt;Case &quot;With_Blue&quot;: GoTo 6&lt;BR&gt;Case &quot;With_Black&quot;: GoTo 7&lt;BR&gt;End Select&lt;BR&gt;Exit Sub &apos;---------------------------Main--------------------------------------------&lt;BR&gt;1&lt;BR&gt;For i = 0 To Heigh Step F&lt;BR&gt;r = r + 1&lt;BR&gt;If r = 20000 Then Exit For&lt;BR&gt;For X = i To F + i&lt;BR&gt;Me.Line (0, X)-(Widt, X), RGB(250 - r, 0, 0)&lt;BR&gt;Next X&lt;BR&gt;Next i: GoTo B&lt;BR&gt;2 &apos;--------------------------------------------------------------------------------&lt;BR&gt;For i = 0 To Heigh Step F&lt;BR&gt;r = r + 1&lt;BR&gt;If r = 20000 Then Exit For&lt;BR&gt;For X = i To F + i&lt;BR&gt;Me.Line (0, X)-(Widt, X), RGB(250, 254 - r, 255 - r)&lt;BR&gt;Next X&lt;BR&gt;Next i: GoTo B&lt;BR&gt;3 &apos;--------------------------------------------------------------------------------&lt;BR&gt;For i = 0 To Heigh Step F&lt;BR&gt;r = r + 1&lt;BR&gt;If r = 20000 Then Exit For&lt;BR&gt;For X = i To F + i&lt;BR&gt;Me.Line (0, X)-(Widt, X), RGB(0, 250 - r, 0)&lt;BR&gt;Next X&lt;BR&gt;Next i: GoTo B&lt;BR&gt;4 &apos;--------------------------------------------------------------------------------&lt;BR&gt;For i = 0 To Heigh Step F&lt;BR&gt;r = r + 1&lt;BR&gt;If r = 20000 Then Exit For&lt;BR&gt;For X = i To F + i&lt;BR&gt;Me.Line (0, X)-(Widt, X), RGB(250 - r, 255, 255 - r)&lt;BR&gt;Next X&lt;BR&gt;Next i: GoTo B&lt;BR&gt;5 &apos;--------------------------------------------------------------------------------&lt;BR&gt;For i = 0 To Heigh Step F&lt;BR&gt;r = r + 1&lt;BR&gt;If r = 255 Then Exit For&lt;BR&gt;For X = i To F + i&lt;BR&gt;Me.Line (0, X)-(Widt, X), RGB(0, 0, 250 - r)&lt;BR&gt;Next X&lt;BR&gt;Next i: GoTo B&lt;BR&gt;6 &apos;--------------------------------------------------------------------------------&lt;BR&gt;For i = 0 To Heigh Step F&lt;BR&gt;r = r + 1&lt;BR&gt;If r = 20000 Then Exit For&lt;BR&gt;For X = i To F + i&lt;BR&gt;Me.Line (0, X)-(Widt, X), RGB(250 - r, 250 - r, 255)&lt;BR&gt;Next X&lt;BR&gt;Next i: GoTo B&lt;BR&gt;7 &apos;--------------------------------------------------------------------------------&lt;BR&gt;For i = 0 To Heigh Step F&lt;BR&gt;r = r + 1&lt;BR&gt;If r = 9000 Then Exit For&lt;BR&gt;For X = i To F + i&lt;BR&gt;Me.Line (0, X)-(Widt, X), RGB(250 - r, 250 - r, 250 - r)&lt;BR&gt;Next X&lt;BR&gt;Next i &apos;--------------------------------------------------------------------------------&lt;BR&gt;B:&lt;BR&gt;Set Me.Picture = Me.Image&lt;BR&gt;&lt;BR&gt;ميتونيد اين كد رو خيلي كوتاه استفاده كنيد وهرخط چيني كه مربوط به رنگ خودتونه رو نگه داريد بقيه رو حذف كنيد.با كمي دقت مي توانيد رنگ هاي جديد بسازيد&lt;BR&gt;&lt;BR&gt;*********************&lt;BR&gt;چگونه ساعت ديجيتال بسازيم&lt;BR&gt;&lt;BR&gt;كوتاهترين راه براي ساخت يك ساعت روش زير است يك Picturebox به فرم اضافه كنيد&lt;BR&gt;&lt;BR&gt;Private Sub Form_Load()&lt;BR&gt;Static Score As Long&lt;BR&gt;Counter.Show&lt;BR&gt;DoEvents&lt;BR&gt;Score = 0&lt;BR&gt;For I = 1 To 1265&lt;BR&gt;DisplayNumber 10, Score&lt;BR&gt;Score = I&lt;BR&gt;DoEvents&lt;BR&gt;Next&lt;BR&gt;End Sub&apos;-------------------------------------------------------------------&lt;BR&gt;Private Sub DisplayNumber(DisplayWidth As Integer, TheNumber As Long)&lt;BR&gt;Dim DisplayString As String, Zeros As Integer, GraphicsHeight As Single&lt;BR&gt;Dim DigitValue As Integer, NumPosition As Integer&lt;BR&gt;&apos;--------------------Start Time--------------- &lt;BR&gt;GraphicsHeight = Picture1.ScaleHeight / 2&lt;BR&gt;Zeros = DisplayWidth - Len(Trim(TheNumber))&lt;BR&gt;For I = 0 To Zeros - 1&lt;BR&gt;DisplayString = DisplayString &amp;amp; &quot;0&quot;&lt;BR&gt;Next&lt;BR&gt;DisplayString = DisplayString &amp;amp; Trim(Str(TheNumber))&lt;BR&gt;For I = 0 To DisplayWidth - 1&lt;BR&gt;DigitValue = Val(Mid(DisplayString, I + 1, 1))&lt;BR&gt;If DigitValue = 0 Then NumPosition = 10 Else NumPosition = DigitValue _ &lt;BR&gt;Counter.PaintPicture Picture1.Image, I * (Picture1.ScaleWidth / 10), 0, _&lt;BR&gt;Picture1.ScaleWidth / 10, Picture1.ScaleHeight / 2, (NumPosition - 1) _&lt;BR&gt;* (Picture1.ScaleWidth / 10), GraphicsHeight, Picture1.ScaleWidth / 10, Picture1.ScaleHeight / 2&lt;BR&gt;Next&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;در كد بالا به دلايلي فرم خارج نمي شود بايد يك دكمه براي خروج از فرم تنظيم كنيدودر كد كليك آن بنوسيد &lt;BR&gt;End &lt;BR&gt;*****************************&lt;BR&gt;كلاس چيست؟؟؟؟&lt;BR&gt;&lt;BR&gt;كلاس يك مجموعه اي از كدهاست كه شبيه به يك كنترل هستند فقط شكل ظاهري و طراحي ندارند&lt;BR&gt;كلاس ها شي هستند - يعني خاصيت دارند -كلاس ها مي توانند داخل خود پردازه يا تابع محلي وسراسري داشته باشند&lt;BR&gt;كلاس به چه دردي مي خورد-كلاسها از تكرار كدها جلو گيري مي كنند -كلاس ها خوانايي برنامه را افزايش مي دهندوغيره&lt;BR&gt;كلاس ها مي توانند به صورت خودكار خود را مقدار دهي كنند-يك ماژول كلاس ايجاد كنيد وكدهاي زير را در آن كپي كنيد &lt;BR&gt;&lt;BR&gt;تعريف يك خاصيت در كلاس&lt;BR&gt;&lt;BR&gt;&apos;-----------Set Property Information--------- &lt;BR&gt;&lt;BR&gt;Public Poperty Let CWidth( Value As Integer)&lt;BR&gt;CWidth=Value&lt;BR&gt;End Property &lt;BR&gt;&lt;BR&gt;&apos;------------Get Property Information-------------- &lt;BR&gt;&lt;BR&gt;Public Property Get CWidth() As Integer&lt;BR&gt;CWidth=CForm.Width&lt;BR&gt;End Property&lt;BR&gt;&lt;BR&gt;دستور اول خاصيت را مقدار دهي مي كند با مقداري كه كار بر فرستاده&lt;BR&gt;دستور دوم براي دادن مقدار براي كابر است .البته هر كدام از اين دستورات را مي توان به صورت محلي استفاده كرد&lt;BR&gt;وي بي با كلاس ها مانند يك نوع جديد رفتار مي كند يعني شما براي استفاده از يك كلاس در سطح فرم بايد يك متغير از&lt;BR&gt;نوع كلاس تعريف كنيد .تعرف يك متغيير محلي در سطح فرم&lt;BR&gt;&lt;BR&gt;Private CForm As Form&lt;BR&gt;&lt;BR&gt;تمام متغيير ها وتوابع وپردازه ها وحتي نام خود كلاس را با سي آغاز كنيد تا معلوم شود مربوط به يك كلاس است&lt;BR&gt;تعرف يك پردازه سراسري در كلاس&lt;BR&gt;&lt;BR&gt;Private Sub CSetInfo(Frm As Form)&lt;BR&gt;Set Form=Frm &lt;BR&gt;End Sub &lt;BR&gt;&lt;BR&gt;اگر تمام كدها بالا را درست در يك ماژول كلاس كپي كنيد اكنون نوبت استفاده از كدهاي بالاست&lt;BR&gt;در خط اول فرم يك متغيير از نوع نام كلاس تعريف كنيد.بدين صورت&lt;BR&gt;&lt;BR&gt;Dim Calss As Class1&lt;BR&gt;Private Sub Form_Resiz()&lt;BR&gt;Me.Caption=&quot;Form1.Width: &quot;&amp;amp; Class.With&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;تنظيم ابعاد نمايش ويندوز براي يك برنامه اختصاصي&lt;BR&gt;&lt;BR&gt;برنامه هاي سه بعدي از فضا نمي آيند توسط همين وي بي -دلفي واكثرآ سي پلاس پلاس طراحي مي شن وقتي يك بازي سه بعدي روباز مي كنيم ويك دفعه يك صفحه با گرافيكي كه تا حالا نديديم يه صورت زيبا بالا مي آد اكثر ما -بيشتر خودم- خيلي كف ميكنيم كه اين برنامه ها چطور ساخته مي شن-با چي ساخته مي شن&lt;BR&gt;&lt;BR&gt;امروز مي خوام تنظيم ابعاد صفحه نمايش ويندوز رو با ابعاد دلخواه خودمون بگم كه گام اول طراحي سه بعديه اگه بشه شايد مراحل بعديش رو هم بزارم روي سايت كه مونده به ياري شما .بانظراتتون و خدا با توفيقش&lt;BR&gt;&lt;BR&gt;ابتدا متغيير هاي اول فرم&lt;BR&gt;&lt;BR&gt;Dim Dx As New DirectX7&lt;BR&gt;Dim Dd As DirectDraw4&lt;BR&gt;Dim clip As DirectDrawClipper&lt;BR&gt;&lt;BR&gt;البته بعد از نوشتن كد بالا به منوي پروژه رفته گزينه ريفرنس رو انتخاب كنيد در منوي باز شده تيك گزينه ي دايركت ايكس 7 رو بزنيد&lt;BR&gt;&lt;BR&gt;تا كد هاتون اجرا بشه روي فرم دابل كلاك كنيد و كد زير رو بنويسيد&lt;BR&gt;&lt;BR&gt;Set Dd = Dx.DirectDraw4Create(&quot;&quot;)&lt;BR&gt;Set clip = Dd.CreateClipper(0)&lt;BR&gt;clip.SetHWnd Me.hWnd&lt;BR&gt;&apos; screen mode&lt;BR&gt;Dd.SetDisplayMode 800, 600, 32, 0, DDSDM_DEFAULT&lt;BR&gt;&lt;BR&gt;بااين كد صفحه نمايش به مد 800*600و حالت 32بايتي ميره&lt;BR&gt;*****************************&lt;BR&gt;دستور Shell&lt;BR&gt;&lt;BR&gt;توسط اين دستور مي تونيد فايلي را در وي بي اجرا كنيد .آدرسي كه جلوي اين دستور نوشته مي شه اجرا ميشه .شكل اين دستور به اين صورت است&lt;BR&gt;&lt;BR&gt;Shell ProgramPath,RunModel&lt;BR&gt;&lt;BR&gt;در آرگومان اول مسير فايل نوشته مي شود ودر آرگومان دوم مدلي كه برنامه بايد اجرا شود.در اين ارگومان از آرگومان هاي زير استفاده مي گردد&lt;BR&gt;&lt;BR&gt;vbHide=0 vbMaximizedFocus=1 vbMinimizedFocus=2 vbMinimizedNoFocus=3 vbNormalFocus=4 vbNormalNoFocus=5&lt;BR&gt;&lt;BR&gt;در مدل صفر برنامه به صورت پنهان ظاهر مي شود.براي مواقعي كه مي خواهيم عمل اجرا را از ديد كاربر پنهان كنيم .در مدل 2 برنامه اجرا مي شود به صورت كمينه(روي منوي استارت-مينيمايز شده)وفاكس هم روي ان مي رود يعني اين كه بعد از اجرا هي زرد و آبي مي شود تا كار بر روي آن كليك كند.مدل 3برنامه به&lt;BR&gt;&lt;BR&gt;صورت ينيمايز -كمينه اجرا مي شود زرد وآبي نمي شود (معمولي-فاكس رويش نمي رود).مدل 1برنامه به صورت تمام صفحه اجرا شده فاكس هم روي آن مي رود(زرد و ابي مي شود).در مدل 4برنامه با اندازه پيش فرض اجرا مي شودوفاكس را هم مي گيرد.درمدل 5برنامه با اندازه معمولي اجرا شده و فاكس نمي گيرد&lt;BR&gt;&lt;BR&gt;كار برد مهم ديگر شل اجرا فايل هاي معمولي با يك برنامه اجرايي است مثل اجراي يك متن در نت پد.براي اين كار نام فايل را بايك فاصله از نام فايل مي نويسيم&lt;BR&gt;&lt;BR&gt;Shell &quot;NotPath.Exe&quot;+&quot; C:\Text1.txt&quot; ,4&lt;BR&gt;&lt;BR&gt;توجه داشته باشيد كه براي اجراي فايل بايد نام ومسير فيل را با يك كاراكتر فاصله بنويسيد&lt;BR&gt;&lt;BR&gt;اگر فاصله ندهيد قطعآ خطا انجام مي شود.اگر فايلي در مسير برنامه تان كپي كرده ايد اين كد را بنويسيد&lt;BR&gt;&lt;BR&gt;shell &quot;notpath.exe&quot;+(app.path+&quot;\&quot;+&quot;your File Name&quot;)&lt;BR&gt;&lt;BR&gt;كلاسي است كه به برنامه اشاره مي كند ومي توان اطلاعات برنامه مانند مسير-نام فايل اجرائي-كمپاني وغيرهapp&lt;BR&gt;&lt;BR&gt;براي نوتپد ويندوز چون در درايو ويندوز قرار دارد احتياج به تايپ مسير كامل نيست همچنين اگر شما فايلي را از پوشه &lt;BR&gt;&lt;BR&gt;اجرا كنيد به مسير كامل نياز نيست برنامه اي مانند كامند پرامپت بازي ها واسكرين سيور ها در اين پوشه system32&lt;BR&gt;&lt;BR&gt;است.مثال hell &quot;cmd.exe&quot;,4&lt;BR&gt;&lt;BR&gt;اجراي يك فولدر با شل&lt;BR&gt;&lt;BR&gt;واقع در درايو ويندوز را به همراه نام فيل اجرا مي كنيمexplorer.exeبراي اين كار فايل اجرائي&lt;BR&gt;&lt;BR&gt;shell &quot;explorer.exe&quot;+&quot; c:\windows&quot; ,3&lt;BR&gt;&lt;BR&gt;با اجراي اين برنامه پوشه ويندوز اجرا مي شود روش بالا در سي دي هاي اتوران استفاده ي زيادي دارد&lt;BR&gt;&lt;BR&gt;Shell &quot;rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl &quot;كادر حذف برنامه ها &lt;BR&gt;Shell &quot;rundll32.exe shell32.dll,Control_RunDLL desk.cpl&quot;كادر تغيير پس زمينه &lt;BR&gt;Shell &quot;rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl&quot;كادر اينتر نت &lt;BR&gt;Shell &quot;rundll32.exe shell32.dll,Control_RunDLL modem.cpl&quot;كادر مودم &lt;BR&gt;Shell &quot;rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl&quot;كادر صدا &lt;BR&gt;Shell &quot;rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl&quot;كادر شبكه &lt;BR&gt;Shell &quot;rundll32.exe shell32.dll,Control_RunDLL powercfg.cpl&quot;كادر پاور-برق&lt;BR&gt;Shell &quot;rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl&quot;كادر سيستم &lt;BR&gt;Shell &quot;rundll32.exe shell32.dll,Control_RunDLL telephon.cpl&quot;كادر تلفن &lt;BR&gt;Shell &quot;rundll32.exe shell32.dll,Control_RunDLL timedate.cpl&quot;كادر ساعت &lt;BR&gt;&lt;BR&gt;كتابخانه وسيع Shell&lt;BR&gt;&lt;BR&gt;Private Declare Function ShellExecute Lib &quot;shell32.dll&quot; Alias &quot;ShellExecuteA&quot; (ByVal hwnd As Long, ByVal_ lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal_ nShowCmd As Long) As Long&lt;BR&gt;&lt;BR&gt;كد هاي زير را هر جا استفاده كنيد جواب مي دهدالبته بهد از اينكه كد بالا را در اولين خط فرم نوشتيد&lt;BR&gt;&lt;BR&gt;Shell &quot;arp&quot;&lt;BR&gt;Shell &quot;drvspace&quot;&lt;BR&gt;Shell &quot;drwatson&quot;&lt;BR&gt;Shell &quot;explorer&quot;براي my document &lt;BR&gt;Shell &quot;freecell&quot;&lt;BR&gt;Shell &quot;ftp&quot;براي تنظيم اف تي پي &lt;BR&gt;Shell &quot;ipconfig&quot;كادر آي پي &lt;BR&gt;Shell &quot;mplayer&quot;مديا پلير &lt;BR&gt;Shell &quot;mshearts&quot;&lt;BR&gt;Shell &quot;nbtstat&quot;&lt;BR&gt;Shell &quot;netstat&quot;&lt;BR&gt;Shell &quot;calc&quot;ماشين حساب &lt;BR&gt;Shell &quot;notepad&quot;نوت پد &lt;BR&gt;Shell &quot;packager&quot;&lt;BR&gt;Shell &quot;pbrush&quot;نقاشي&lt;BR&gt;Shell &quot;ping&quot;&lt;BR&gt;Shell &quot;regedit&quot;ريجيستري&lt;BR&gt;Shell &quot;route&quot;روت&lt;BR&gt;Shell &quot;scandskw&quot;اسكن ديسك &lt;BR&gt;Shell &quot;scanregw&quot;اسكن رگ&lt;BR&gt;Shell &quot;setdebug&quot;كخك تري تنظيم ويندوز &lt;BR&gt;Shell &quot;sigverif&quot;&lt;BR&gt;Shell &quot;cdplayer&quot;سي دي پلير &lt;BR&gt;Shell &quot;sndrec32&quot;ضبط صدا &lt;BR&gt;Shell &quot;sndvol32&quot;تنظيم ولوم صدا &lt;BR&gt;Shell &quot;sol&quot;همون سول&lt;BR&gt;Shell &quot;taskman&quot;وضعيت سي پي يو&lt;BR&gt;Shell &quot;telnet&quot;تلفن&lt;BR&gt;Shell &quot;vcmui&quot;&lt;BR&gt;Shell &quot;winfile&quot;&lt;BR&gt;Shell &quot;winipcfg&quot;&lt;BR&gt;Shell &quot;winmine&quot;&lt;BR&gt;Shell &quot;winrep&quot;&lt;BR&gt;Shell &quot;charmap&quot;كاراكتر مپ &lt;BR&gt;Shell &quot;winver&quot;&lt;BR&gt;Shell &quot;write&quot;وورد پد &lt;BR&gt;Shell &quot;wscript&quot;&lt;BR&gt;Shell &quot;cleanmgr&quot;كلنر پاك كننده اشغال درايو &lt;BR&gt;Shell &quot;control&quot;كنترل پنل &lt;BR&gt;Shell &quot;cvt1&quot;&lt;BR&gt;Shell &quot;defrag&quot;دفراگمنت&lt;BR&gt;Shell &quot;drvspace&quot; فضاي خالي ديسك &lt;BR&gt;&lt;BR&gt;اجراي فايل اينترنت با Shell&lt;BR&gt;shell &quot;Explorer.exe&quot;+&quot; http://www.VBLog.blogfa.comن به يك سايت &lt;BR&gt;shell &quot;explorer.exe&quot;+&quot; maileto:Mahdi_VBLog@yahoo.com&quot;كادر ارسال ايميل &lt;BR&gt;shell &quot;explorer.exe&quot;+&quot; yor HTML File.html&quot;كادر اجراي يك فايل اينترنت از حافظه &lt;BR&gt;shell &quot;explorer.exe&quot;+&quot; file://www.سايت شما.com/11.zip&quot;كادردانلود يك فايل از اينترنت&lt;BR&gt;*****************************&lt;BR&gt;فرمت فایل M3U&lt;BR&gt;چگونه یک فایل PlayList با پسوند M3U بسازیم&lt;BR&gt;&lt;BR&gt;گاهي وقتي عده ي زيادي فايل را در مدیا پلير يا وينمپ باز مي كنيم يك گزينه به نام SavePlaylist&lt;BR&gt;مي بينيم كه براي ذخيره كردن آن ليست در يك فايل استفاده مي شود.اگر يك برنامه ي پخش صوت يا تصوير باكنترل مديا پلير نيز بنويسيد براي پخش هم زمان چندين فايل به مشكل برخواهيد خورد .درچنين مواقعي مي توانيم با ذخيره ليست در يك فايل ام تري يو وباز كردن آن در كنترل مديا پلير چندين فايل را با هم پخش كرد .شايد شما بتوانيد فايل هايتان را مستقيمآ به ليست مديا پلير احتياج به دانستن فرمت فايل ام تري يو داريدPlayListاضافه كنيد ولي باز هم براي ذخيره &lt;BR&gt;&lt;BR&gt;با اين تابع اين كار را انجام دهيد&lt;BR&gt;&lt;BR&gt;Public Sub SaveList(OutPath As String,Lst as ListBox)&lt;BR&gt;On Error Resume Next &apos;--------------------------------------------------&lt;BR&gt;Dim T3 As String, T2, strans As String, L As Single, i As Integer&lt;BR&gt;T3 = &quot;&quot;: T2 = &quot;&quot;&lt;BR&gt;If Lst.List(1) = &quot;&quot; Then&lt;BR&gt;strans = MsgBox(&quot;File Not Found!&quot;, vbCritical)&lt;BR&gt;Exit Sub &apos;------------------------------------------------------&lt;BR&gt;End If&lt;BR&gt;If UCase(Right(OutPath, 3)) &amp;lt;&amp;gt; &quot;M3U&quot; Then Exit Sub&lt;BR&gt;Open OutPath For Output As #1&lt;BR&gt;Print #1, &quot;#EXTM3U:&quot;&lt;BR&gt;For i = 1 To Lst.ListCount &apos;----------------------------&lt;BR&gt;Print #1, &quot;#EXTNIF:&quot;&lt;BR&gt;Print #1, Lst.List(i)&lt;BR&gt;Next i &apos;------------------------------------------------------&lt;BR&gt;Close #1&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;حال براي زخيره كردن فايل هاي صوتي و تصويري موجود در يك ليست تنها به دستور زير نياز داريد&lt;BR&gt;&lt;BR&gt;SaveList &quot;C:\1.M3U&quot;,List1&lt;BR&gt;*****************************&lt;BR&gt;برخي اپراتور هاي Visual Basic&lt;BR&gt;&lt;BR&gt;Type Of اپراتور&lt;BR&gt;&lt;BR&gt;اين اپراتور براي تشخيص نوع كنترل به كار مي رود.روش استفاده از ان به شكل زير است&lt;BR&gt;&lt;BR&gt;TypeOf ControlName Is ControlType&lt;BR&gt;&lt;BR&gt;مثال:كنترلي از نوع فايل بوكس رابه تايع زير مي فرستيم يراي تعيين عضو انتخاب شده&lt;BR&gt;&lt;BR&gt;Private Function GetSelectItem(LST as Contol) as String&lt;BR&gt;if TypeOf lst is listbox then&lt;BR&gt;GetselectItem=Lst.text:Exit Function&lt;BR&gt;else :GetselectItem=Lst.FileName:Exit Sub &lt;BR&gt;End if&lt;BR&gt;&lt;BR&gt;در خط يك تابع با آرگومان يك ليست از نوع كنترل تعريف مي شود خروجي تايپ آف به صورت يك منو مانند تعريف متغيير هنگام كد نويسي ظاهر مي شود كه شما مي توانيد نو ع كنترل خود را از داخل آن انتخاب كنيد.توجه كنيد بين تايپ و آف نبايد فاصله بيفتد واگر نه با خطاي كامپايل مواجه مي شويد.&lt;BR&gt;&lt;BR&gt;DoEvents اپراتور &lt;BR&gt;&lt;BR&gt;اين اپراتور براي ارجاع تمام عملييات به سي پي يو براي انجام مي باشد.اكثرآ از اين اپراتور براي مواقعي استفاده مي گردد كه يك عمليات وقتگير در حال انجام است مانند اعمال افكت روي تصوير و حلقه هاي تكرار طولاني. اين اپراتور در درون حلقه قرار گرفته و كامپايل نمي شود مانند رهنمود ها در پاسكال عمل مي كندوبه سي پي يو مي گويد تمام كارهيت را به صورت يكسان انجام بده واز اولويت ها صرف نظر كن .در برنامه هايي كه يك عمليات در درون يك حلقه هر دور انجام مي شود آكثرآ باعث هنك كردن آن برنامه تا پايان عمليات مي شود.چون برنامه بين واكنش به تكان خوردن موس -جابه جاكردن برنامه يا بزرگ و كوچك كردن برنامه وپردازش روي عمليات مورد نظر(مثلآ كپي فايل)عمليياتي كه داراي اولويت پردازش است را انتخاب مي كند.اين اپراتور در چنين مواقعي بسيار مفيد است وباعث مي شود كاربر گمان نكند كه برنامه هنك كرده و آن را ببندد.مثال:ِ&lt;BR&gt;&lt;BR&gt;For i=0 to list1.listCount -1 &lt;BR&gt;if list1.list(i)&amp;lt;&amp;gt;&quot;&quot; then call Copy(list1.list(i),App.path+&quot;\&quot;)&lt;BR&gt;DoEvents&lt;BR&gt;Next&lt;BR&gt;&lt;BR&gt;در خط اول حلقه اي از صفر تا تعداد اعناصر موجود در ليست اغازمي شودو در هر درو فايل درون ليست در صورت وجود كپي مي شود .اگر فايل هاي مازياد باشد DoEventsو اپراتور را ننويسيم حتمآ برنامه ما هنك مي كند.بايد ياد آور شد استفاده نابجا و بيش از اندازه اين اپراتور موجب كاهش سرعت برنامه مي شود.ِالبته &lt;BR&gt;&lt;BR&gt;استفاده مي كنندSleepبه نام APIباعث كاركرد زياد وشديد سي پي يو مي شود وبرخي ترجيح مي دهند از آن استفاده نكنند ويه جاي ان از يك &lt;BR&gt;&lt;BR&gt;فرق مي كند. اسليپ باعث ميشود سي پي يو تمام كار هاي در حال اجرا را رها كند وبه مدت زماني كه جلويDoEventsبايد گفت كاركرد اسليپ به طور كلي با &lt;BR&gt;&lt;BR&gt;آن نوشته مي شود به استراحت بپردازد.ِ&lt;BR&gt;&lt;BR&gt;sleep با توجه به زماني كه براش تعيين ميكني در وسط كار برنامه مكث ايجاد ميكنه و در آن زمان هيچ خطي از كد برنامه اجرا نميشه و همان طور كه از اسم تابع .مشخصه برنامه در آن زمان به خواب ميره&lt;BR&gt;اسليپ زماني كه با محيط خارج از برنامه در ارتباطي خيلي مفيده. چون معمولا وقتي دستوري در وي بي مثل اجراي فلان فايل مدتي طول مي كشد و تو اين مدت دستورات بعدي سريع اجرا مي شوند كه ممكن است نتيجه اش به اجاي فايل بستگي داشته با شه.اسليپ باعث ميشه به ويندوز فرصت بدي ساير دستورات فرستاده شده به خارج برنامه رو اجرا كنه. البته گاهي اوقات هم نميدونيم چند ثانيه مكث كنيم و ممكنه مجبور شيم براي احتياط زمان زيادي مكث كنيم كه سرعت برنامه مياد پايين پس تا مي تونيم از دستورات خود وي بي استفاده كنيم تا بر نامه هاي خارجي.ِ&lt;BR&gt;&lt;BR&gt;Shell دستور &lt;BR&gt;&lt;BR&gt;توسط اين دستور مي تونيد فايلي را در وي بي اجرا كنيد .آدرسي كه جلوي اين دستور نوشته مي شه اجرا ميشه .شكل اين دستور به اين صورت است:ِ&lt;BR&gt;&lt;BR&gt;Shell ProgramPath,RunModel&lt;BR&gt;&lt;BR&gt;در آرگومان اول مسير فايل نوشته مي شود ودر آرگومان دوم مدلي كه برنامه بايد اجرا شود.در اين ارگومان از آرگومان هاي زير استفاده مي گردد&lt;BR&gt;&lt;BR&gt;vbHide=0 vbMaximizedFocus=1 vbMinimizedFocus=2 vbMinimizedNoFocus=3 vbNormalFocus=4 vbNormalNoFocus=5&lt;BR&gt;&lt;BR&gt;در مدل صفر برنامه به صورت پنهان ظاهر مي شود.براي مواقعي كه مي خواهيم عمل اجرا را از ديد كاربر پنهان كنيم .در مدل 2 برنامه اجرا مي شود به صورت كمينه(روي منوي استارت-مينيمايز شده)وفاكس هم روي ان مي رود يعني اين كه بعد از اجرا هي زرد و آبي مي شود تا كار بر روي آن كليك كند.مدل 3برنامه به&lt;BR&gt;&lt;BR&gt;صورت ينيمايز -كمينه اجرا مي شود زرد وآبي نمي شود (معمولي-فاكس رويش نمي رود).مدل 1برنامه به صورت تمام صفحه اجرا شده فاكس هم روي آن مي رود(زرد و ابي مي شود).در مدل 4برنامه با اندازه پيش فرض اجرا مي شودوفاكس را هم مي گيرد.درمدل 5برنامه با اندازه معمولي اجرا شده و فاكس نمي گيرد&lt;BR&gt;&lt;BR&gt;كار برد مهم ديگر شل اجرا فايل هاي معمولي با يك برنامه اجرايي است مثل اجراي يك متن در نت پد.براي اين كار نام فايل را بايك فاصله از نام فايل مي نويسيم&lt;BR&gt;&lt;BR&gt;Shell &quot;NotPath.Exe&quot;+&quot; C:\Text1.txt&quot; ,4&lt;BR&gt;&lt;BR&gt;*****************************&lt;BR&gt;برگرفته از وبلاگ دوست عزیزم ناصر به نشانی http://www.nasservb.blogfa.com/&lt;BR&gt;&lt;BR&gt;***************************** &lt;/P&gt;
&lt;P align=right&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG alt=&quot;&quot; hspace=0 src=&quot;http://i16.tinypic.com/3ypdgls.jpg&quot; align=baseline border=0&gt;&lt;/P&gt;</description>
<pubDate>Sat, 24 Feb 2007 18:48:18 GMT</pubDate>
<comments>http://commenting.blogfa.com/?blogid=vblog&amp;postid=70</comments>
<dc:creator>vblog</dc:creator>
<guid>http://vblog.blogfa.com/post-70.aspx</guid>
</item>
<item>
<title>اموزش</title>
<link>http://vblog.blogfa.com/post-69.aspx</link>
<description>اموزش توابع داخلی Visual Basic ( نزدیک به 180 تابع )&lt;BR/&gt;&lt;BR/&gt;Abs .1 قدر مطلق يك عدد رو برميگردونه&lt;BR/&gt;&lt;BR/&gt;appActivate .2 عنوان يه پنجره رو ميگيره و اونو فعال ميكنه&lt;BR/&gt;&lt;BR/&gt;Asc .3 يه كاراكتر ميگيره و كد اسكي اون رو برميگردونه (بين 0 تا 255) .اگه بهش رشته بدين كاراكتر اول رو بررسي ميكنه .مثلاAsc(“A”)= 65 &lt;BR/&gt;&lt;BR/&gt;AscB .4 كار قبلي رو با بايت اول مقداري كه بش ميديم انجام ميده(نه با كاراكتر اول).خروجيش هم از نوع Byte هستش(قبلي Integer بود)&lt;BR/&gt;&lt;BR/&gt;AscW .5 واسه كاراكتر هاي Unicode هستش يعني مقدار كد كاراكتر Unicode (w مخفف Wide هستش) رو برميگردونه که بين 0 تا 2 بتوان 16&lt;BR/&gt;&lt;BR/&gt;Atn .6 آرك تانژانت مقداري رو كه بش داديم برميگردونه.البته زاويه رو بر حسب راديان برميگردونه كه اگه ميخواهين بر حسب درجه بكنينش بايد ضرب در 180 تقسيم بر پي بكنينش مثلا (180 * 3.14 * 1) Atnمقدار 45.0228246533569 رو برميگردونه&lt;BR/&gt;البته براي بدست آوردن مقدار دقيق تر پي از (Atn(1) * 4) ميتونين استفاده كنين.&lt;BR/&gt;&lt;BR/&gt;Beep .7 صداي beep در مياره.&lt;BR/&gt;&lt;BR/&gt;CallByName .8 با اين تابع ميشه با استفاده از اسم يه متد يا Property مربوط به يه شي كه توي يه رشته هست متد رو فراخواني كرد يا Property رو گرفت يا مقدار داد و ... .آرگومان اول شي مورد نظره مثل Command2 دومي متد يا Property مورد نظره مثل “Set Focus” يا “Caption” سومي نوع فراخوانييه كه ميخوانيم انجام بديم .مثل vbLet مقدار دهي يه Property يا VbMethod واسه يه متد و ... .بعدي هم آرگومان هايي هستن كه به اون متد بايد ارسال بشن يا اگه بخواهيم Property رو عوض كنيم اون مقدار مورد نظرمون هست.اگه هم نيازي به آرگومان نباشه خالي ميزاريمش.مثلا با اين دستور : &lt;BR/&gt;&lt;BR/&gt;CallByName Command2, &amp;quot;setFocus&amp;quot;, VbMethod&lt;BR/&gt;&lt;BR/&gt;فوكوس به Command2 اختصاص داده ميشه يعني كاره Command2.SetFocus رو ميكنه.يا با اين دستور :&lt;BR/&gt;&lt;BR/&gt;CallByName Command2, &amp;quot;Caption&amp;quot;, VbLet, &amp;quot;MyCaption!&amp;quot;&lt;BR/&gt;&lt;BR/&gt;مقدار Caption دكمه 2 برابر MyCaption ميشه &lt;BR/&gt; &lt;BR/&gt;9 ta 14 . Cbool ، Cbyte،CCur ،CDate ، CDbl،CDec توابع تبديل نوع هستن و نوع مقداري كه ميگيرن رو به نوعي كه از اسمشون پيداست تبديل ميكنن مثلا CBool مقداري گه بش داديم رو به نوع Boolean تبديل ميكنه.&lt;BR/&gt;&lt;BR/&gt;chDir .15 دايركتويري پيشفرض رو براي هر درايو عوض ميكنه.مثلا (“chDir(“C:\windows دايركتوري پيشفرض درايو C رو C:\Windows ميكنه.بعد از اين كد اگه تابع (“CurDir(“C رو فراخواني كنين مقدار C:\windows (همون مقدار پيشفرض) برگردونده ميشه.در صورتي كه اگه chDir رو فراخواني نميكردين مقدار C:\windows\System32 رو برميگردوند.&lt;BR/&gt;&lt;BR/&gt;chDrive .16 درايو پيشفرض رو تعيين ميكنه.در حالت عادي درايو پيشفرض همون درايويه كه برنامه داخلش اجرا شده.يعني وقتي تابع CurDir رو بدون دادن درايو فراخواني كنين سراغ درايوي ميره كه برنامه توش اجرا شده.مثلا براي من كه برنامم داره توي درايو D اجرا ميشه CurDir قبل از فراخواني (“:ChDrive(“C مقدار “D:\vb\myproj” رو برگردوند بعد از فراخواني مقدار C:\windows\System32 رو.&lt;BR/&gt;&lt;BR/&gt;Choose .17 از يه ليست ارگومان با گرفتن Index يكيشون رو برميگردونه .مثلا&lt;BR/&gt;&lt;BR/&gt; Choose(3, &amp;quot;Arg1&amp;quot;, &amp;quot;Arg2&amp;quot;, &amp;quot;Arg3&amp;quot;, &amp;quot;Arg4&amp;quot;, &amp;quot;Arg5&amp;quot;)&lt;BR/&gt;&lt;BR/&gt;مقدار “Arg3” رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;Chr .18 يه كد اسكي ميگيره و كاراكتر مربوط به اون رو برميگردونه.مثلا Chr(65) = “A” &lt;BR/&gt;&lt;BR/&gt;Chr$ .19 مثل قبليه فقط مقداري كه برميگردونه از نوع رشته هستش(بهتره از اين به جاي قبلي استفاده كنين)&lt;BR/&gt;&lt;BR/&gt;ChrB .20 مثل Chr فقط هميشه يه مقدار تك بايتي Single-Byte برميگردونه يعني طول مقداري كه برميگردونه از لحاظ بايت 1 هستش در صورتي كه براي تابع قبلي 2 مثلا توي حافظه : Chr(65) =&amp;gt; 65 00 ولي 65 &amp;lt;=(ChrB(65 &lt;BR/&gt;&lt;BR/&gt;ChrW .21 (و ChrW$) واسه كاراكتر هاي Unicode استفاده ميشه.يعني كد يه كاراكتر Unicode (فكر كنم بين 0 تا 2 بتوان 16) رو ميگيره و يه كاراكتر Unicode برميگردونه&lt;BR/&gt;&lt;BR/&gt;CInt .22 تبديل نوع يه مقدار به Integer &lt;BR/&gt;&lt;BR/&gt;Circle .23 واسه رسم يه دايره ، بيضي ، قطاع يا كمان روي فرم هستش.مثلا &lt;BR/&gt;Circle(20,20),10,vbred,0,3.141,2 يه كمان با مركز 20و20 و با شعاع 10 با رنگ قرمز از 0 تا پي رو طوري رسم ميكنه كه ارتفاعش 2 برابر عرضش هستش.براي رسم قطاع بايد ارگومان هاي 4 و 5 منفي باشن.واسه رسم داير بعد از vbred نياز نيست مقدار بزارين.واسه رسم بيضي(كامل) آرگومان هاي 4 و 5 رو مقدار ندين در عوض با تغيير دادن آرگومان 6 ميتونين بيضي هاي مختلفي رسم كنين.&lt;BR/&gt;&lt;BR/&gt;Clng .24 واسه تغيير نوع يه مقدار به Long هستش&lt;BR/&gt;&lt;BR/&gt;Cls .25 مثل دستور معادلش توي داس هستش.يعني فرم رو پاك ميكنه.&lt;BR/&gt;&lt;BR/&gt;Command .26 و Command$ اون پارامتر هايي كه به برنامه ارسال شدن رو برميگردونن.مثلا وقتي برنامه رو با دستور &lt;BR/&gt;Project1.exe “-hidden” باز كنيم Command برابر “hidden-” ميشه.&lt;BR/&gt;&lt;BR/&gt;Cos .27 كسينويس زاويه اي كه –بر حسب راديان – بهش ميديم رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;CreateObject .28با گرفتن ClassName يك شي رو درست ميكنه.مثلا &lt;BR/&gt;&lt;BR/&gt;Set fso = CreateObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;BR/&gt;&lt;BR/&gt;آبجكت معروف FSO رو دست ميكنه كه خيلي هم توي ASP كاربرد داره.حالا كه اين آبجكت رو ساختين ميتونين ازش استفاده كنين.مثلا واسه بدست آوردن پوشه temp :&lt;BR/&gt;&lt;BR/&gt;MsgBox fso.getspecialfolder(2)&lt;BR/&gt;&lt;BR/&gt;بعد از اينكه كارمون با شي تموم شد بايد حافظه اي كه بش اختصاص پيدا كرده رو آزاد كنيم : &lt;BR/&gt;&lt;BR/&gt;Set FSO = Nothing&lt;BR/&gt;&lt;BR/&gt;CSng .29-30 و CStr واسه تبديل نوع يه مقدار به Single و String هستن.&lt;BR/&gt;&lt;BR/&gt;CDir .31 و CDir$ هم دايركتوري پيشفرض رو برميگردونن(واسه توضيح بيشتر يه سر به chDir بزنين)&lt;BR/&gt;&lt;BR/&gt;CVar .32 واسه تبديل نوع يه مقدار به Var هست&lt;BR/&gt;&lt;BR/&gt;CVDate .33 واسه تبديل يه مقدار(رشته يا عدد) به نوع Date بكار ميره.&lt;BR/&gt;&lt;BR/&gt;CVErr .34 يه شماره خطا يا يه آبجك از نوع ErrObject ميگيره و يه مقدار از نوع Error برميگردونه مثلا : “Cstr(CVErr(13)) = “Error 13&lt;BR/&gt;اما اينكه به چه درد ميخوره نميدونم.اينم توضيح : MSDN &lt;BR/&gt;&lt;BR/&gt;The CVErr function in Visual Basic 6.0 returned a Variant of the subtype Error that contained an error number&lt;BR/&gt;&lt;BR/&gt;DateAdd .35 واسه كم يا زياد كردن يه مقدار از يه تاريخ يا ساعت بكار ميره.آرگومان اولي نوع مقداري كه ميخواهيم كم يا زياد كنيم هستش كه بايد يكي از اينا باشه : s ثانيه n دقيقه h ساعت w روزهاي هفته w هفته d روز(مثل 12) y روز از سال(مثل 224) m ماه q يك چهارم سال(فصل) yyyy سال.آرگومان دومي مقداريه كه ميخواهيم اضافه يا كم كنيم مثل 2 1 ... .آرگومان بعدي زمان يا تاريخ مورد نظره.&lt;BR/&gt;مثلا (()DateAdd(“m”,3,Date سه ماه به تاريخ فعلي(()Date) اضافه ميكنه و تاريخ جديد رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;DateDiff .36 براي مقايسه كردن يكي از قسمت هاي 2 مقدار تاريخ هستش.ارگومان اول همون قسمت مورد نظره كه مثل تابع قبلي مقدار دهي ميشه.آرگومان دوم تاريخ1 بعدي تاريخ 2 هستش.مثلا (()DateDiff(“yyyy”,Date(),DateAdd(“yyyy”,3,Date مقدار 3 رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;DatePart .37 يك قسمت از يك تاريخ ( يا زمان) رو برميگردونه.آرگومان اول مثل 2 تابع قبليه.دومي هم تاريخ مورد نظر.مثلا (()DatePart(“h”,Time الان براي من 17 رو برميگردونه (ساعت 5 بعد از ظهر).&lt;BR/&gt;&lt;BR/&gt;DateSerial .39 روز و ماه و سال رو به عدد ميگيره و تاريخ رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;DateValue .40 كار قبلي رو ميكنه فقط مقدار رو يكجا(از نوع رشته) ميگيره.مثلx (“DateValue(“2002/09/11 رو ميگيره و تاريخ رو از نوع Date برميگردونه.&lt;BR/&gt; &lt;BR/&gt;Day .41 روز يك تاريخ رو برميگردونه.مثلا (Day(Now عدد 5 رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;DDB .42 &lt;BR/&gt;&lt;BR/&gt;DeleteSetting .43 تنظيماتي كه با تابع SaveSetting توي رجستري ذخيره شده (value ها)رو پاك ميكنه.واسه توضيح بيشتر به SaveSetting مراجع كنين.&lt;BR/&gt;&lt;BR/&gt;Dir .44 فايل ها و فولدر هاي داخل يه فولدر(يا درايو) رو برميگردونه.كه ميشه با مشخص كردن Attribute فايل ها يا فولدر هاي خاص رو بدست آورد.آرگوماني كه ميگيره يه رشتس كه Path مورد نظر هستش كه ميشه توش از كاراكتر هايي مثل * و ؟ هم استفاده كرد.&lt;BR/&gt;مثلا ميخواميم همه ي فايل هاي با پسوند .sys رو كه توي درايو C هستن بدست بياريم.&lt;BR/&gt;براي اولين بار تابع Dir رو با دادن مقدار “C:\*.sys” فراخواني ميكنيم.مقدار برگشتيش اولين فايل با پسوند bat هست كه توي درايو C (فقط درايو C يعني شامل SubDirectory ها نميشه) پيدا ميكنه.براي بدست آوردن دومين فايل تابع رو بدون دادن مقدار بهش فراخواني ميكنيم ()Dir كه مقدار برگشتيش همون دومين فايل هستش.اين كار رو تا زماني كه مقدار برگشتي &amp;quot;&amp;quot; (رشته ي خالي) نباشه ادامه ميديم.كدش به اين صورت ميشه:&lt;BR/&gt;&lt;BR/&gt;Private Sub CmdPrintDirs_Click()&lt;BR/&gt; Dim strPath as String,strDir as String&lt;BR/&gt; strPath = &amp;quot;C:\*.sys&amp;quot;&lt;BR/&gt; strDir = Dir(strPath)&lt;BR/&gt; Do&lt;BR/&gt; Print strDir&lt;BR/&gt; strDir = Dir()&lt;BR/&gt; Loop While strDir &amp;lt;&amp;gt; &amp;quot;&amp;quot;&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;البته اگه Attribute رو درست تعيين نكنين همه فولدر ها و فايل ها برگردونده نميشن.مثلا با قرار دادن اين مقدار : &lt;BR/&gt;vbArchive Or vbDirectory Or vbHidden Or vbNormal Or vbReadOnly Or vbSystem&lt;BR/&gt;به جاي Attribute ميشه گفت همه فايل ها و فلدر ها (چه سيستم چه معمولي و...) برگردونده ميشن.براي بدست آوردن فقط Directory ها به اين صورت عمل كنين كه به Attribute ، vbDirectoy رو هم اضافه كنين. بعد از اينكه اسم دايركتوري ها رو گفتين باز هم با تابع GetAttr چك كنين كه اسمي كه برگردونده شده حتما Directory هستش :&lt;BR/&gt;&lt;BR/&gt;Private Sub CmdPrintDirs_Click()&lt;BR/&gt; Dim strPath As String, strDir As String&lt;BR/&gt; strPath = &amp;quot;C:\&amp;quot;&lt;BR/&gt; strDir = Dir(strPath, vbDirectory)&lt;BR/&gt; Do&lt;BR/&gt; If (GetAttr(strPath &amp;amp; strDir) And vbDirectory) = vbDirectory Then&lt;BR/&gt; Print strDir&lt;BR/&gt; End If&lt;BR/&gt; strDir = Dir()&lt;BR/&gt; Loop While strDir &amp;lt;&amp;gt; &amp;quot;&amp;quot;&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;اينو نگفتم كه اگه بعد از مسيري كه مشخص كردين اينجا (\:c) چيزي نگذارين همه فايل ها و فولدر هاش در نظر گرفته ميشن.&lt;BR/&gt;&lt;BR/&gt;DoEvents .45 اين تابع رو وقتي دارين توي برنامتون از يك حلقه تكرار كه ممكنه تموم شدنش طول بكشه استفاده ميكنين توي حلقه فراخواني كنين.حالا چكار ميكنه؟&lt;BR/&gt;بطور عادي وقتي دارين توي يه حلقه تكرار(يا هر كدي!!) يكسري محاسبات رو انجام ميدين تا زماني كه حلقه تموم نشه برنامتون در مقابل Message هايي كه بش ارسال ميشه عكس العملي انجام نميده و همه عكس العمل ها رو بعد از تموم شدن حلقه انجام ميده و يا اگه شما توي حلقه يه كدمربوط به چاپ كردن يه رشته روي فرم رو نوشته باشين عمل چاپ شدن رو بعد از تمام شدن حلقه مشاهده ميكنين.به قولي تا زمان پايان حلقه برنامه هيچ Event ي انجام نميده(البته اين مساله 100 در 100 هم نيست).تابع DoEvents اين كار رو براتون ميكنه.اين دو كد رو تست كنين : &lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;Dim i As Long&lt;BR/&gt;Do While i &amp;lt; 10000000&lt;BR/&gt; i = i + 1&lt;BR/&gt; If i &amp;lt; 20 Then List1.AddItem i&lt;BR/&gt;Loop&lt;BR/&gt;End Sub&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;Dim i As Long&lt;BR/&gt;Do While i &amp;lt; 10000000&lt;BR/&gt; i = i + 1&lt;BR/&gt; If i &amp;lt; 20 Then List1.AddItem i&lt;BR/&gt; DoEvents&lt;BR/&gt;Loop&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;وقتي دكمه رو توي كد اول فشار ميدين تا زماني كه حلقه تموم نشده نميتونين اعضاي اضافه شده رو توي ليست باكس ببينين يا فرم رو حركت بدين.در صورتي كه در كد دوم اين طور نيست.&lt;BR/&gt;&lt;BR/&gt;46. Environ (و Environ$) اين تابع با گرفتن عدد ها(اينجا index ها) ي بيشتر از 0 و يا رشته ها اطلاعات خاصي از سيستم مثل دايركتوري ويندوز Program Files ، Temp و يا UserName يا تعداد پردازشگر ها و ... رو برميگردونه.با دادن عدد هاي مختلف از 1 به بالا مقدار هاي مختلفش رو ميتونين ببينين.رشته هايي رو هم ميگيره مثل WinDir يا OS يا SystemDrive يا ... كه اين رشته ها رو با استفاده از اعداد ميتونين بدست بيارين :&lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt; Dim strEv As String, i As Integer&lt;BR/&gt; i = 1&lt;BR/&gt; Do&lt;BR/&gt; strEv = Environ(i)&lt;BR/&gt; Print strEv&lt;BR/&gt; i = i + 1&lt;BR/&gt; Loop While strEv &amp;lt;&amp;gt; &amp;quot;&amp;quot;&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;EOF .47 براي كار با فايل هاست كه با دادن شماره اي كه باهاش فايل رو باز كردين ميتونين بفهمين به آخر فايل رسيدين يا نه.&lt;BR/&gt;&lt;BR/&gt;Err .48 آبجكتيه كه اطلاعات مربوط به آخرين خطايي(منظور Runtime Error) كه توي كد اتفاق افتاده رو نگه ميداده.مثلا :&lt;BR/&gt;Err.Number شماره خطا Err.Clear پاك كردن خطا (همه اطلاعات در مورد آخرين حذف ميشه و فرض بر اين ميشه كه خطايي اتفاق نيفتاده باشه) Err.Description توضيح خطا Err.Source منبع خطا.Err.Raise هم يه خطا توليد ميكنه!! &lt;BR/&gt;&lt;BR/&gt;Error .49 اگه اين تابع رو برابر يه مقدار قرار نداره باشين كار Err.Raise رو ميكنه با اين فرق كه فقط شماره خطا رو ميگيره(به تعداد آرگومان هايي كه ميگيرن توجه كنين) (در اين حالت ميشه گفت اصلا تابع نيست!) در غير اين صورت توضيح خطايي كه توليد كرده رو هم برميگردونه&lt;BR/&gt;&lt;BR/&gt;Error$ .50 فقط حالت دوم Error هستش&lt;BR/&gt;&lt;BR/&gt;Exp .51 معادلش توي رياضي e x&lt;BR/&gt;&lt;BR/&gt;FileAttr .52 با گرفتن شماره اي كه فايل باش باز شده Attribute هاش رو برميگردونه.مثلا : &lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;Open &amp;quot;C:\io.sys&amp;quot; For Random As #1&lt;BR/&gt; If FileAttr(1) And vbSystem Then&lt;BR/&gt; MsgBox &amp;quot;This is a Syetem file!&amp;quot;&lt;BR/&gt; End If&lt;BR/&gt;Close #1&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;FileCopy .53 واسه كپي كردن فايل هستش كه آرگومان اولي آدرس فايل مبدا و بعدي مقصده.اگه فايل مقصد وجود داشته باشه عمل كپي انجام نميشه.&lt;BR/&gt;&lt;BR/&gt;FileDateTime آدرس يه فايل رو ميگيره و زمان آخرين ويرايش يا زماني كه درست شده رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;FileLen .54 آدرس يه فايل رو ميگيره و طولش رو برميگردونه.(به بايت)&lt;BR/&gt;&lt;BR/&gt;Fix .55 يه چيزي شبيه تابع براكت توي رياضي هستش با اين فرض كه اعداد منفي رو رو به بالا گرد ميكنه .مثلا: &lt;BR/&gt;&lt;BR/&gt; Fix(2.1) = 2 و Fix(-2.1) = -2&lt;BR/&gt;&lt;BR/&gt;Filter .56 يه آرايه رشته اي ميگيره و آرايه ي جديدي رو برميگردونه به طوري كه اون آرايه شامل عضو هايي از آرايه ي اول ميشه كه يك رشته ي خاص رو دارا هستن يا دارا نيستن.(تابع 2 حالت داره).آرگومان اول آرايه مورد نظره.دومي رشته ي مورد نظره.سومي اگه False باشه اون عضو هايي كه شامل رشته نيستن انتخاب ميشن و برگردونده ميشن و اگه True باشه عضو هايي كه شامل رشته هستن.بعدي هم نوع مقايسه هست كه توي توضيح تابع InStr درموردش توضيح دادم.اونجا رو ببينين.&lt;BR/&gt;مثلا اين آرايه رو تصور كنين :&lt;BR/&gt;&lt;BR/&gt;Dim MainArr(3) As String&lt;BR/&gt;MainArr(0) = “Visual Basic”&lt;BR/&gt;MainArr(1) = “Visual C++”&lt;BR/&gt;MainArr(2) = “W32 Assembly”&lt;BR/&gt;MainArr(3) = “Java Script”&lt;BR/&gt;&lt;BR/&gt;حالا ما ميخوايم همه ي اون عضو هايي از MainArr كه كلمه ي Visual داخلشون نيست رو توي يك آرايه ديگه ذخيره كنيم :&lt;BR/&gt;&lt;BR/&gt;Dim NewArr() As String&lt;BR/&gt;NewArr = Filter(MainArr,”Visual”,False)&lt;BR/&gt;&lt;BR/&gt;با اين كد عضو هاي آرايه NewArr ، W32 Assembly و Java Script ميشن.اگه به جاي False از True استفاده ميكردين عضو ها Visual Basic و++ Visual C ميشدن.&lt;BR/&gt;&lt;BR/&gt;Format .57 (و Format$)يه تابع پر كاربرده كه كارهاي زيادي در رابطه با رشته ها ميكنه و اگه بخوام همشونو بگم به اندازه اي كه تاحالا نوشتم بايد بنويسم!!در كل يه رشته به عنوان آرگومان اول ميگيره.دومي هم يه رشتس كه Style يا حالت يا همون فرمت اون رشته رو تعيين ميكنه .مثلا ميخواهين با داشتن ثانيه – دقيقه و ساعت،زمان رو با فرمت درست بدست بيارين : &lt;BR/&gt;&lt;BR/&gt;MsgBox (Format(&amp;quot;125802&amp;quot;, &amp;quot;00:00:00&amp;quot;))&lt;BR/&gt;&lt;BR/&gt;و كار هاي زياد ديگه اي ميشه باش كرد كه بيشتر از اين حال نداريم توضيح بدم.خودتون دنبالش برين ميفهمين... .&lt;BR/&gt;&lt;BR/&gt;FormatCurrency .58 اين تابع يه عدد رو به نوع Currency (نوعي كه توي ويبي براي نگه داشتن مقدار پول بكار ميره) با فرمت دلخواه تبديل ميكنه.آرگومان اول عدد مورد نظره.آرگومان هاي بعدي اختياري هستن: دومي تعداد صفرهايي كه بعد از عدد و نقطه ي آخر اون نشون داده ميشن هستش كه بطور پيشفرض 1-(Default) هستش و براي من 2 تا نشون ميده مثلا 100 رو 100.00 نشون ميده.&lt;BR/&gt;&lt;BR/&gt;آرگومان بعدي مشخص ميكنه كه براي عدد هاي كسري .0 قبل از عدد رو نشون بده يا نه.بعدي مشخص ميكنه كه براي عدد هاي منفي از پرانتز استفاده بشه يا نه.بعدي مشخص ميكنه كه عدد هارو (سه تا سه تا) با كاما گروه بندي كنه يا نه.مثلا 100000 رو 10,000 نشون بده يا نه.يه مثال كلي : FormatCurrency(10000,3,vbTrue,vbTrue,vbTrue)مقدار 10,000.000$ رو برميگردونه.&lt;BR/&gt;اين رو هم بگم كه آرگومان هاي 3 ، 4 و 5 به غير از vbTrue و vbFalse مقدار vbUseDefault رو هم ميتونن بگيرن كه اين مقدار به مقدار بيشفرض كه به تنظيم هاي ويندوز بستگي داره ارجاع ميكنه.&lt;BR/&gt;&lt;BR/&gt;FormatDateTime .59 اين تابع واسه تغيير فرمت زمان و تاريخ به كار ميره.آرگومان اول تاريخ يا زمان مورد نظره .دومي هم فرمت مورد نظر.مقدار بازگشتي با توجه به نوع فرمت و نوع مقداري كه بش داديم فرق ميكنه : &lt;BR/&gt;&lt;BR/&gt;FormatDateTime(Now(), vbGeneralDate) = 10/5/2005 10:49:07 PM&lt;BR/&gt;&lt;BR/&gt;FormatNumber .60 مثل FormatCurreny هستش با 2 تا فرق.يكي اينكه علامت دلار ($) كنار عدد نميگذاره. يكي ديگه اينكه اگه مقدار منفي باشه و آرگومان 3 False ، علامت منفي رو كنار عدد نشون ميده.&lt;BR/&gt;&lt;BR/&gt;FormatPercent .61 مثل قبليه هست با اين فرق كه درصد عددي كه بهش ميديم رو حساب ميكنه.مثلا :&lt;BR/&gt;&lt;BR/&gt;FormatPercent(-10 / 100, 4, vbFalse, vbFalse, vbFalse) = -10.0000%&lt;BR/&gt;&lt;BR/&gt;FreeFile .62 اولين شماره اي كه براي باز كردن فايل ها آماده باشه (آزاد باشه) رو برميگردونه.حداكثر هم 255 فايل ميتونن باز باشن.&lt;BR/&gt;&lt;BR/&gt;FV .63 &lt;BR/&gt;&lt;BR/&gt;GetAllSettings .64 اين تابع همه ي تنظيماتي كه توي Section و appName ي كه بش ميديم ذخيره شده رو به صورت يه آرايه 2 بعدي برميگردونه.(بهتره اول SaveSetting رو ببينين) ما اين مقدار رو توي يه متغير از نوع Variant قرار ميديم.به طوري كه (v(0,0 اسم اولين تنظيممون(يا همون اسم Value توي رجيستري يا همون Key توي تابع SaveSetting) هستش و (v(0,1 مقدار اون تنظيم.به همين ترتيب v(1,0) هم اسم دومين تنظيم ميشه... .&lt;BR/&gt;&lt;BR/&gt;GetAttr .65 هم با گرفتن آدرس فايل Attribute هاي اون فايل رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;GetObject .66 شبيه CreateObject كار ميكنه با اين فرق كه نام فايل رو هم ميتونه بگيره و معمولا براي ارتباط با برنامه هايي بكار ميره كه از قبل اجرا شدن ولي CreateObject يه رابط به instance جديد اون Application ايجاد ميكنه و وقتي استفاده ميشه كه نميدونيم برنامه از قبل اجرا شده يا نه.مثلا ميخواهيم يه شي word رو با CreateObject درست كنيم :&lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt; Dim wApp As Object,wDoc as Object&lt;BR/&gt; Set wApp = CreateObject(&amp;quot;word.application&amp;quot;)&lt;BR/&gt;Set wDoc = wApp.Documents.Add&lt;BR/&gt;wApp.Selection.Font.Name = &amp;quot;verdana&amp;quot;&lt;BR/&gt;wApp.Selection.TypeText &amp;quot;Hello!!&amp;quot;&lt;BR/&gt;wDoc.SaveAs &amp;quot;D:\w1.doc&amp;quot;&lt;BR/&gt;wDoc.Close&lt;BR/&gt;Set wDoc = Nothing&lt;BR/&gt;Set wApp = Nothing&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;با اين كد فايل w1.doc توي درايو ِD ساخته ميشه كه محتويايش متن Hello!! هستش.به جاي CreateObject ميشد از GetObject به اين صورت استفاده كرد : &lt;BR/&gt;&lt;BR/&gt;Set wApp = GetObject(, &amp;quot;word.application&amp;quot;)&lt;BR/&gt;&lt;BR/&gt;چون ميخواستيم فايل جديدي ايجاد كنيم نياز به دادن آدرس فايل نبود واسه همين فقط آرگومان دوم رو مقدار دهي كرديم.&lt;BR/&gt;حالا ميخواهيم توي فايلي كه درست كرديم يه متن تايپ كنيم.اول اون فايل رو با word باز كنين .اينبار از GetObject استفاده ميكنيم :&lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt; Dim wApp As Object&lt;BR/&gt;Set wApp = CreateObject(&amp;quot;D:\w1.doc&amp;quot;).Application&lt;BR/&gt;wApp.Documents(1).Application.Selection.TypeText &amp;quot; how are you ?&amp;quot;&lt;BR/&gt;Set wApp = Nothing&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;به اين صورت ما تونستيم با GetObject با برنامه Word ارتباط برقرار كنيم.&lt;BR/&gt;&lt;BR/&gt;GetSetting .67 با گرفتن appName و Section و Key ، اطلاعاتي رو كه با تابع SaveSetting توي رجيستري ذخيره شده رو برميگردونه(به توضيح SaveSetting توجه كنين) آرگومان چهارم هم مقداريه كه اگه اطلاعات مورد نظر توي رجيستري پيدا نشد تابع اون رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;Hex .69 (و Hex$) هم با گرفتن يك عدد معادل اون رو به مبناي 16 برميگردونه مثلا Hex(255) = “FF” &lt;BR/&gt;&lt;BR/&gt;70. Hide فرم رو پنهان ميكنه و واسه نشون دادنش بايد از Show استفاده كنين (اين تابع ها هر دو عضو هاي Form هستن و اگه توي يه ماژول يا كلاس دارين كد مينويسين بايد اسم فرم مورد نظر رو هم بيارين مثلا ()Form1.Hide) &lt;BR/&gt;&lt;BR/&gt;71. Hour زمان رو ميگره و ساعت رو از اون استخراج ميكنه .مثلا Hour (&amp;quot;19:12:03&amp;quot;) = 19&lt;BR/&gt;&lt;BR/&gt;72. IIf يك If…Then…Else يك خطي هستش.آرگومان اول همون عبارتيه كه ميخواهيم درستيش رو بررسي كنيم.آرگومان دوم و سوم هم مقدار هاي بازگشتيه تابع هستش.اگه عبارتي كه به تابع داديم درست باشه آرگومان دوم و گرنه آرگومان سوم رو برميگردونه.مثلا &lt;BR/&gt;&lt;BR/&gt;IIf(2+2 = 4, &amp;quot;Yes&amp;quot;, &amp;quot;No&amp;quot;) = &amp;quot;Yes&amp;quot;&lt;BR/&gt;&lt;BR/&gt;73. IMEStatus توي ويبي 6 وضعيت Input Method Editor رو برميگردونه كه فقط توي ويندوز هاي چيني و كره اي و ژاپني كاربرد داره.&lt;BR/&gt;&lt;BR/&gt;74. InputBox يه Input Box يا همون Prompt رو باز ميكنه و يه ورودي از كاربر ميگيره.آرگومان اول اون متني هستش كه توي Prompt نشون داده ميشه و حتما بايد مقدار دهي بشه ولي آرگومان هاي بعدي اختياري هستن.&lt;BR/&gt;دومي Title يا همون عنوان پنجره Prompt هستش.سومي هم متنيه كه به طور پيشفرض توي TextBox ي كه توي InputBox هست نمايش داده ميشه.2 تا آرگومان بعدي هم مختصات پنجره InputBox هستن.آرگومان بعدي (HelpFile) فايل Help ي كه مربوط به اين InputBox هستش.بعدي هم Context اون موضوعيه كه ميخواهين نشون بدين.مقدار برگشتي تابع همون مقداريه كه كاربر وارد ميكنه اگر هم كاربر Cancel رو بزنه مقدار برگشتي يه رشته خاليه (vbNullString).&lt;BR/&gt;&lt;BR/&gt;75. InStr براي جستجوي يك متن توي يك متن ديگه بكار ميره.آرگومان اول جاييه كه جستجو توي رشته از اونجا شروع ميشه. اگه 1 بگذارين جستجو از اولين كاراكتر شروع ميشه ميتونين هم مقداري به اين آرگومان ندين.دومي رشته ي مبدا هستش يعني رشته اي كه ميخواهين توش جستجو كنين.آرگومان بعدي رشته مقصد هست يعني اون متن ي كه ميخواهين جستجوش كنين.آرگومان بعدي هم نوع مقايسه هستش.اگه از vbBinaryCompare استفاده كنين بين حروف كوچك و بزرگ تفاوت گذاشته ميشه و اون ها مساوي حساب نميشن (Case Sensitive) اگه از vbTextCompare استفاده كنين حروف بزرگ و كوچك يكي حساب ميشن. vbDatabaseCompare هم مربوط به Access هستش و كاري بهش نداريم.مثلا InStr(1,”Visual Basic”,”b”,vbTextCompare) مقدار هشت رو برميگردونه در صورتي كه اگه از vbBinaryCompare استفاده كنين يا اصلا اين آرگومان رو مقدار دهي نكنين مقدار 0 نشون داده ميشه.يعني رشته ي مورد نظر پيدا نشد! يا مثلا اگه به جاي 1 از 9 استفاده كنين جستجو از حرف نهم يعني a شروع ميشه و چون حرف b بعد از a (منظور دومين a هستش كه بعد از b قرار داره) قرار نداره تابع b رو پيدا نميكنه و مقدار 0 رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;اين رو هم بگم كه ويبي به طور پيشفرض Case Sensitive هستش و حروف بزرگ و كوچك مساوي نيستن يعني “VB” &amp;lt;&amp;gt; “Vb” اما اگه كد Option Compare Text رو اول كدها(بالاي فرم يا ماژول) بزارين اين حساسيت ويبي از بين ميره.&lt;BR/&gt;&lt;BR/&gt;76. InStrB مثل قبليه با اين فرق كه واسه داد هاي بايتي كه توي يك رشته قرار گرفتن استفاده ميشه و محل بايت (Byte Position)رو برميگردونه.مثلا چون يه كاراكتر توي رشته ي معمولي 2 بايت حساب ميشه (از لحاظ طول رشته اي 1 هست اما از لحاظ طول بايت 2) مقدار (”InStrB(1,”Visual Basic”,”B برابر 15 هستش.&lt;BR/&gt;&lt;BR/&gt;77. InStrRev مثل InStr هستش با اين فرق كه جستجو رو از آخرين كاراكتر رشته ي كه بش ديديم شروع ميكنه و به اولين كاراكتر ميرسه.(برعكس قبلي)آرگومان اول رشته مبدا دومي رشته ي مقصد و سومي هم شروع جستجو هست كه به طور پيشفرض -1 هستش يعني جستجو از آخرين كاراكتر.آرگومان بعدي هم مثل آرگومان آخر InStr.مثلا (”InStrRev(“VisualBasic”,”a برابر 8 هستش نه 5.ولي ( InStrRev(&amp;quot;VisualBasic&amp;quot;, &amp;quot;a&amp;quot;, 7 برابر 5 هستش چون جستجو از حرف B شروع ميشه و به سمت اولين كاراكتر ميره.&lt;BR/&gt;&lt;BR/&gt;78. Int براكت يك عدد رو برميگردونه.مثلا Int(2.2) = 2 و Int(-2.2) = -3 &lt;BR/&gt;&lt;BR/&gt;79. IPmt &lt;BR/&gt;&lt;BR/&gt;80. IRR&lt;BR/&gt;&lt;BR/&gt;81. IsArray هم از اسمش پيداست.يك متغير ميگيره و مشخص ميكنه آرايه هست يا نه.&lt;BR/&gt;&lt;BR/&gt;82. IsDate هم مثل قبليه فقط براي تاريخ يا زمان.&lt;BR/&gt;&lt;BR/&gt;83. IsEmpty براي اينه كه چك كنيم يك مقدار اعلان شده يا نه.مثلا &lt;BR/&gt;&lt;BR/&gt;Dim x as long&lt;BR/&gt;Debug.Print IsEmpty(x) ‘False&lt;BR/&gt;Debug.Print IsEmpty(y) ‘True&lt;BR/&gt;x = Empty&lt;BR/&gt;Debug.Print IsEmpty(x) ‘True&lt;BR/&gt;&lt;BR/&gt;84. IsError هم واسه اينه كه چك كنيم يه مقدار از نوع Error هستش يه يا نه.مثلا IsError(Err) = True يا IsError(CVErr(0))= True&lt;BR/&gt;&lt;BR/&gt;85. IsMissing اين تابع براي وقتي به كار ميره كه شما توي يه Function يا Sub كه آرگومان اختياري(Optional)از نوع Variant داره ميخواهين ببينين كه اون آرگومان مقدار دهي شده يا نه.اين مثال رو ببينين:&lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt; MsgBox TestIsMissingFunc()&lt;BR/&gt; MsgBox TestIsMissingFunc(2)&lt;BR/&gt; MsgBox TestIsMissingFunc(“A”)&lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Function TestIsMissingFunc(Optional testArg As Variant) As String&lt;BR/&gt; If IsMissing(testArg) Then&lt;BR/&gt; TestIsMissingFunc = “You are not passed any value!”&lt;BR/&gt; Else&lt;BR/&gt; TestIsMissingFunc = “You are passed “ &amp;amp; CStr(testArg)&lt;BR/&gt; End If&lt;BR/&gt;End Function&lt;BR/&gt;&lt;BR/&gt;مقدارهايي كه با پيغام نشون داده ميشن به اين صورته :&lt;BR/&gt;&lt;BR/&gt;You are not passed any value&lt;BR/&gt;You are passed 2&lt;BR/&gt;Your are passed A&lt;BR/&gt;&lt;BR/&gt;يعني اگه اون پارامتر اختياري مقدار دهي نشده باشه تابع IsMissing مقدار True رو برميگردونه.اگه پارامتري از نوع غير از Variant بهش بدين همواره مقدار False رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;86. IsNull واسه اينه كه بفهميم يك مقدارNull هست يا نه. توجه كنين كه Null با خالي بودن يه رشته يا 0 بودن يه عدد فرق داره.مثلا &lt;BR/&gt;&lt;BR/&gt;Deug.Print IsNull(“”) ‘false&lt;BR/&gt;Dim S As String&lt;BR/&gt;Debug.Print IsNull(S) ‘false&lt;BR/&gt;S = “” &lt;BR/&gt;Debug.Print IsNull(S) ‘false&lt;BR/&gt;S = Null&lt;BR/&gt;Debug.Print IsNull(S) ‘True&lt;BR/&gt;&lt;BR/&gt;87. IsNumeric چك ميكنه كه يه مقدار عدد هست يا نه .البته كاري به نوعش نداره و محتوياتش رو بررسي ميكنه مثلا:&lt;BR/&gt;&lt;BR/&gt;Debug.Print IsNumeric(2) ‘true&lt;BR/&gt;Debug.Print IsNumeric(&amp;quot;2.2&amp;quot;) ‘true&lt;BR/&gt;Dim v As Variant&lt;BR/&gt;v = &amp;quot;$2.2&amp;quot;&lt;BR/&gt;Debug.Print IsNumeric(v) ‘true&lt;BR/&gt;v = “vb6”&lt;BR/&gt;Debug.Print IsNumeric(v) ‘false&lt;BR/&gt;&lt;BR/&gt;88. IsObject هم چك ميكنه يه مقدار از نوع Object هستش يا نه مثلا :&lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;Debug.Print IsObject(Command1) ‘true&lt;BR/&gt;Debug.Print IsObject(Err) ‘true&lt;BR/&gt;Dim Obj As Object, v As Variant&lt;BR/&gt;Debug.Print IsObject(Obj) ‘true&lt;BR/&gt;Debug.Print IsObject(v) ‘false&lt;BR/&gt;Set v = Err&lt;BR/&gt;Debug.Print IsObject(v) ‘true&lt;BR/&gt;Debug.Print IsObject(&amp;quot;s&amp;quot;) ‘false&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;89. Join يه آرايه از نوع رشته ميگيره و همه مقدار هاي عضو هاي آرايه رو به هم متصل ميكنه و به صورت يه متغير از نوع رشته بيرون ميده.بين هر كدوم از String ها رو هم با كاراكتر دلخواهي كه بهش ميديم قرار ميده(بطور پيشفرض فاصله)&lt;BR/&gt;مثلا :&lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;Dim words(3)&lt;BR/&gt;words(0) = &amp;quot;Learning&amp;quot;&lt;BR/&gt;words(1) = &amp;quot;VB&amp;quot;&lt;BR/&gt;words(2) = &amp;quot;is&amp;quot;&lt;BR/&gt;words(3) = &amp;quot;easy&amp;quot;&lt;BR/&gt;Debug.Print Join(words, &amp;quot;_&amp;quot;) ‘ Learning_VB_is_Easy&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;90. Kill آدرس يه فايل رو ميگيره و اون رو پاك ميكنه.&lt;BR/&gt;&lt;BR/&gt;91. LCase (و LCase$) (مخففLower Case)يك رشته رو ميگيره و همه حروف رو به حروف كوچك تبديل ميكنه و رشته جديد رو برميگردونه مثلا ”LCase(“Visual”)=”visual &lt;BR/&gt;&lt;BR/&gt;92. Left (وLeft$)يك رشته رو ميگيره و به تعداد دلخواه كاراكتر از سمت چپ جدا ميكنه مثلا :&lt;BR/&gt;&lt;BR/&gt;Left(&amp;quot;Visual&amp;quot;,2) = &amp;quot;Vi&amp;quot;&lt;BR/&gt;&lt;BR/&gt;93. LeftB (و LeftB$) يك رشته رو ميگيره و به تعداد دلخواه بايت از سمت چپ جدا ميكنه.مثلا&lt;BR/&gt;&lt;BR/&gt;LeftB(&amp;quot;Visual&amp;quot;, 2)=&amp;quot;V&amp;quot;&lt;BR/&gt;&lt;BR/&gt;چون هر كاراكتر 2 بايت حساب ميشه.&lt;BR/&gt;&lt;BR/&gt;94. Len يه مقدار ميگيره و طولش رو برميگردونه.براي رشته تعداد كاراكتر ها رو . براي متغير عددي هم تعداد بايتي كه متغيري كه عدد رو شامل ميشه اشغال كرده رو برميگردونه نه تعداد ارقام رو(مگر اينكه قبلش عدد رو به رشته تبديل كنين) مثلا : &lt;BR/&gt;&lt;BR/&gt;Debug.Print Len(&amp;quot;visual&amp;quot;) ‘8&lt;BR/&gt;Dim n As Integer: n = 245 &lt;BR/&gt;Debug.Print Len(n) ‘2&lt;BR/&gt;Debug.Print Len(CStr(n)) ‘3 &lt;BR/&gt;&lt;BR/&gt;Dim V As Variant &lt;BR/&gt;Debug.Print Len(V) ‘0&lt;BR/&gt;Set V = Command1&lt;BR/&gt;Debug.Print Len(V) ‘4&lt;BR/&gt;&lt;BR/&gt;95. LenB تعداد بايتي كه يه متغير(يا يك مقدار) اشغال كرده رو برميگردونه.مثلا :&lt;BR/&gt;&lt;BR/&gt;Debug.Print LenB(&amp;quot;visual&amp;quot;) ‘12&lt;BR/&gt;Dim n As Integer: n = 245&lt;BR/&gt;Debug.Print LenB(n) ‘2&lt;BR/&gt;Debug.Print LenB(CStr(n)) ‘6&lt;BR/&gt;Dim V As Variant &lt;BR/&gt;Debug.Print LenB(V) ‘0&lt;BR/&gt;Set V = Command1&lt;BR/&gt;Debug.Print LenB(V) ‘8&lt;BR/&gt;&lt;BR/&gt;96. Line واسه رسم يه خط يا مستطيل روي فرم بكار ميره.آرگومان اول مختصات نقطه شروع و پايان خط و يا مختصات بالا سمت چپ و پايين سمت راست مستطيل هستش.بعدي رنگ خط و مستطيل هستش.بعدي اگه B باشه مستطيل رسم ميشه.اگه BF باشه مستطيل توپر رسم ميشه.اگه هم مقدار دهي نكنينش خط رسم ميشه.مثلا :&lt;BR/&gt;&lt;BR/&gt;Line (0, 0)-(300, 300), vbRed, BF ‘مستطيل توپر قرمز&lt;BR/&gt;Line (0, 0)-(300, 300), vbRed ‘خط قرمز&lt;BR/&gt;&lt;BR/&gt;97. Load يه فرم يا Control رو توي حافظه Load ميكنه.&lt;BR/&gt;&lt;BR/&gt;98. LoadPicture يك عكس رو توي حافظه Load ميكنه و مشخصات اون رو توي يك متغير از نوع IPictureDisp برميگردونه.اگه آرگومان اول رشته ي خالي باشه تابع يه عكس خالي برميگردونه.آرگومان هاي بعدي فقط براي فايل هاي آيكن و كرسر هستن:دومي سايز هستش.كه يكي از مقدار هاي زير ميتونه باشه :&lt;BR/&gt; vbLPLarge كه اندازه آيكن يا كرسر برابر اندازه آيكن يا كرسر بزرگ پيشفرض سيستم ميشه.&lt;BR/&gt; vbLPSmall كه اندازه آيكن يا كرسر برابر اندازه آيكن يا كرسر كوچك پيشفرض سيستم ميشه.&lt;BR/&gt; vbLPSmallShell اندازه ايه كه توي قسمت Caption Buttons size setting توي قسمت AppearRance مربوط بهDisplay propertiesتنظيم شده.&lt;BR/&gt; vbLPLargShell اندازه ايه كه توي قسمت Icon size setting توي قسمت AppearRance مربوط بهDisplay properties تنظيم شده.&lt;BR/&gt; vbLPCustom اندازه بر اساس 2 تا آرگومان x و y تنظيم ميشه.&lt;BR/&gt;&lt;BR/&gt;آرگومان بعدي (ColorDepth) عمق رنگ هستش كه يكي از مقدار هاي زير ميتونه باشه :&lt;BR/&gt; vbLPDefault مقدار پيشفرض هستش.&lt;BR/&gt;&lt;BR/&gt; vbLPMonochromeدو رنگ&lt;BR/&gt; vbLPVGAColorشونزده رنگ&lt;BR/&gt; vbLPColor دويست و پنجاه وشش رنگ&lt;BR/&gt;&lt;BR/&gt;2 تا آرگومان بعدي هم طول و عرض هستن.كه فقط براي وقتي كه آرگومان size برابر vbLPCustom باشه استفاده دارن.&lt;BR/&gt;يكباره ديگه هم بگم كه آرگومان هاي 2 به بعد اين تابع فقط واسه فايل هاي آيكون و كرسر هستن.&lt;BR/&gt;&lt;BR/&gt;99. LoadResData اآيدي يك Resouce و نوع اون رو ميگيره و اطلاعاتش رو برميگردونه.مثلا (”LoadResData(101,”CUSTOM&lt;BR/&gt;واسه ويرايش Resource هاي برنامه از منوي Add-Ins گزينه ي Add-In Manager رو انتخاب كنين.اونجا توي ليست روي VB6 Resource Editor كليك كنين تا جلوش متن Loaded بياد.OK كنين تا پنجره بسته شه.حالا از منوي Tools گزينه ي Resouce Editor رو انتخاب كنين.توي پنجره اي كه باز ميشه ميتونين Resource هاي مختلف براي برنامتون بسازين...&lt;BR/&gt;&lt;BR/&gt;100. LoadResPicture مثل قبليه منتها واسه Load كردن Picture هستش.چه Icon چه Bitmap و چه Cursor . آرگومان اوليش آيدي Resource هستش .دومي هم يكي از سه نوعي كه گفتم يعني vbResBitmap ، vbResIcon و vbRescCursor .مقداري برگشتيش هم از نوع Picture هستش(IPictureDisp)&lt;BR/&gt;&lt;BR/&gt;101. LoadResString هم واسه لود كردن يه Resource رشته هستش.فقط هم آيدي رو نياز داره.&lt;BR/&gt;&lt;BR/&gt;102. Loc با گرفتن شماره فايل باز شده براي حالت Randomشماره آخرين ركوردي كه نوشته يا خونده شده ، براي حالت Binary مكان آخرين بايتي از فايل(Position) كه خونده يا نوشته شده و براي ترتيبي مكان بايت فعلي در فايل تقسيم بر 128 رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;103. LOF با گرفتن شماره فايل باز شده طول اون رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;104. Log تابع لگاريتم هستش البته در مبناي Ln .براي بدست آوردن لگاريتم يك عدد توي مبناي دلخواه از اين فرمول استفاده كنين :&lt;BR/&gt;&lt;BR/&gt;Log(x) / Log(n)&lt;BR/&gt;&lt;BR/&gt;مثلا لگاريتم 8 در مبناي 2 : &lt;BR/&gt;&lt;BR/&gt;Debug.Print Log(8)/Log(2) ‘3&lt;BR/&gt;&lt;BR/&gt;105. LTrim (و LTrim$) يه رشته ميگيره و هرچي Space سمت چپ رشته باشه رو حذف ميكنه و رشته ي جديد رو برميگردونه مثلا :&lt;BR/&gt;&lt;BR/&gt;Debug.Print “ Visual Basic “ ‘ = “Visual Basic “ &lt;BR/&gt;&lt;BR/&gt;106. Mid (و$Mid) واسه جدا كردن يك قسمت از يك رشته هستش.آرگومان اول رشته ي مورد نظره.دومي عددي كه جدا كردن از اونجا شروع ميشه و سومي هم طول قسمتيه كه ميخواهيم جدا كنيم و اگه مقدار دهي نكنيمش تابع تا آخر رشته رو در نظر ميگيره:&lt;BR/&gt;&lt;BR/&gt;Debug.Print Mid(“Visual Basic”,3,2) ‘su&lt;BR/&gt;Debug.Print Mid(“Visual Basic”,3) ‘sual Basic&lt;BR/&gt;&lt;BR/&gt;107. MidB (و MidB$) مثل قبليه فقط اطلاعات رو بايت به بايت در نظر ميگيره و جدا ميكنه (نه كاراكتر به كاراكتر).فرقش با Mid مثل فرق InStr با InStrB هستش.توي قسمت InStrB بيشتر در اين باره توضيح دادم.&lt;BR/&gt;&lt;BR/&gt;108. Minute يه زمان رو ميگيره دقيقه رو ازش جدا ميكنه.مثلا (”Minute(“02:15:00برابر 15 هستش.&lt;BR/&gt;&lt;BR/&gt;109. MIRR &lt;BR/&gt;&lt;BR/&gt;110. MkDir واسه درست كردن يه Folder به كار ميره كه اگه از قبل وجود داشته باشه تابع Error ميده.&lt;BR/&gt;&lt;BR/&gt;111. Month يه تاريخ ميگيره و ماه رو از اون استخراج ميكنه.(به طور عددي البته) مثلا Month(Date()) = 5&lt;BR/&gt;&lt;BR/&gt;112. MonthName عدد يك ماه رو ميگيره (1 تا 12) و اسم اون ماه رو برميگردونه.اگه آرگومان دومش True باشه اسم رو به صورت خلاصه برميگردونه.مثلا MonthName(10) = Octobr و MonthName(10,True) = Oct&lt;BR/&gt;&lt;BR/&gt;113. Move واسه حركت دادن فرم توي صفحه بكار ميره آرگوما هاش هم مشخص هستن.&lt;BR/&gt;&lt;BR/&gt;114. MsgBox هم يه پيغام توي صفحه نشون ميده.آرگومان اول اجباريه و متن اون پيغام هستش.آرگومان بعدي هم مربوط به Options نشون دادن پيغام مثلا نوع آيكن(vbCritical vbExclamation vbInformation vbQuestion) نوع دكمه ها (vbOKCancel vbYesNoCancel vbOKOnly vbAbortRetryIgnore vbRetryCancel vbYesNo vbMsgBoxHelpButton) دكمه هاي پيشفرض (كه Focus بشون داده ميشه)&lt;BR/&gt;&lt;BR/&gt;تغيير vbMsgBoxRight vbMsgBoxRtlReading) Alignment) نحوه ي نمايش توي صفحه (vbSystemModal vbApplicationModal) هستش.&lt;BR/&gt;آرگومان بعدي عنوان پيغام هستش.بعدي فايل Help مربوط به اين پيغام.بعدي هم Context موضوع مورد نظره(توي فايل Help)&lt;BR/&gt;مقدار برگشتي تابع هم با توجه به دكمه اي كه كاربر فشار داده يكي از مقدار هاي vbAbort vbRetry vbIgnore vbCancel vbOK vbYes vbNo هستش.&lt;BR/&gt;&lt;BR/&gt;115. NPer &lt;BR/&gt;&lt;BR/&gt;116. NPV &lt;BR/&gt;&lt;BR/&gt;117. Oct (وOct$ ) عدد رو به مبناي هشت ميبره مثلا Oct(8) = 10&lt;BR/&gt;&lt;BR/&gt;118. OLEDrag واسه شروع عمل OLE Drag (مثلا مثل وقتي كه يكسري فايل رو يك فولد به فولدر ديگه ميكشين) براي فرم بكار ميره.اگه قبلش از اسم يه شيي ديگه مثلا يه ليست باكس استفاده كرده باشين –مسلما- عمل واسه اون شي انجام ميشه منظورم اينه كه اين فقط مختص فرم نيست.2 تا فرم بسازين.توي دومي 1 تكست باكس درست كنين خصوصيت OLEDropMode مربوط به TextBox رو Manual قرار بدين.توي فرم اول كد زير رو وارد كنين :&lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt; Form2.Show&lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)&lt;BR/&gt; OLEDrag&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Private Sub Form_OLECompleteDrag(Effect As Long)&lt;BR/&gt; MsgBox &amp;quot;Drag completed!&amp;quot;&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Private Sub Form_OLEStartDrag(Data As DataObject, AllowedEffects As Long)&lt;BR/&gt; AllowedEffects = vbDropEffectMove&lt;BR/&gt; Data.SetData Me.Caption&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;و توي دومي :&lt;BR/&gt;&lt;BR/&gt;Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)&lt;BR/&gt; If Data.GetFormat(vbCFText) Then&lt;BR/&gt; Text1.Text = Data.GetData(vbCFText)&lt;BR/&gt; End If&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;وقتي فرم يك Load ميشه فرم 2 هم نشون داده ميشه.حالا اگه موس رو روي فرم 1 فشار بدين OLEDrag براي فرم فراخواني ميشه و رويداد OLECompleteDrag اتفاق ميفته.طبق كد حالت قابل قبول فقط vbDropEffect)Move) در نظر گرفته ميشه.و اطلاعاتي هم كه بايد از فرم به جاي مقصد انتقال پيدا كنه برابر با متن فرم ميشه كه هر چيزه ديگه اي با فرمت ديگه اي مثل يه فايل هم ميتونه باشه.وقتي بدون اينكه دكمه ي موس رو رها كنين اون رو روي TextBox فرم دوم ببرين رويداد OLEDragDrop براي TextBox اتفاق ميفته.بعد چك ميشه كه اگه فرمت اطلاعات متني بود اطلاعات توي TextBox نشون داده بشه.بعد از رها كردن دكمه ي موس رويداد OLECompleteDrag (تومو شده عمل كشيدن) براي فرم اتفاق ميفته و يك پيغام نشون داده ميشه.&lt;BR/&gt;&lt;BR/&gt;119. PaintPicture واسه رسم كردن يه عكس روي فرم هست.اين تابع مال PictureBox هم هست.&lt;BR/&gt;آرگومان اول عكسيه كه بايد رسم بشه كه ميتونه عكسي باشه كه با LoadPicture لود شده.يا عكس توي يك PictureBox(مثلا Picture1.Picture) .آرگومان دوم و سوم مختصات بالا سمت چپ جايي هستن كه قرار عكس اونجا رسم بشه.مثلا اگه 0و0 باشن عكس كاملا توي بالا و سمت چپ فرم قرار ميگيره يا اگه 100و20 باشن عكس با سمت چپ فرم 100 و با بالاي فرم 20 تا (واحدش بر اساس واحد فرم هستش بطور پيشفرض Twip ) آرگومان هاي بعدي طول و عرض عكسي هستن كه قرار چاپ بشه.اگه مقدار دهيشون نكنين عكس با اندازه ي اصليش چاپ ميشه.دو تا آرگومان بعدي جايي از عكس هستن كه عمل رسم شدن بايد از اونجا شروع بشه كه اگه مثلا 100و100 باشن همه ي عكس روي فرم رسم نميشه و از عمل رسم از بالا و سمت چپ فرم با مختصات 100و100 شروع ميشه . دو تا آرگومان بعدي هم مثل قبلي واسه جدا كردن قسمتي از عكس هستن.اين ها طول و عرضي از عكس رو مشخص ميكنن كه قرار رسم بشه.مثل قبلي ها اگه مقدار دهيشون نكنين (با توجه به 2 تا آرگومان قبلي) همه ي قسمت ها در نظر گرفته ميشه.آرگومان آخر هم نحوه ي رسم هست(از نظر رنگ) كه ميتونه يكي از مقدار هاي زير باشه : &lt;BR/&gt;vbSrcCopy عكس جديد رو كاملا جايگزين عكس قبلي ميكنه يعني اگه از قبل توي فرم عكسي وجود داشته باشه هيچ &lt;BR/&gt;اثري ازش نميمونه.&lt;BR/&gt;vbSrcAnd عكس مبدا و مقصد(در صورت وجود) رو AND ميكنه (دو عكس ادغام ميشن)&lt;BR/&gt;vbNotSrcErase عكس و مبدا و مقصد(در صورت وجود) رو OR ميكنه و نتيجه رو Invert ميكنه.&lt;BR/&gt;vbSrcPaint عكس مبدا و مقصد(در صورت وجود) رو OR ميكنه.&lt;BR/&gt;vbDstInvert عكس مقصد (در صورت وجود) رو Invert ميكنه.&lt;BR/&gt;vbSrcInvert عكس مبدا و مقصد(در صورت وجود) رو XOR ميكنه.&lt;BR/&gt;vbSrcErase عكس مقصد(در صورت وجود) رو Invert (معكوس) ميكنه و با عكس مبدا AND ميكنه.&lt;BR/&gt;vbNotSrcCopy عكس مبدا رو Invert ميكنه و كاملا جايگزين عكس مقصد ميكنه.&lt;BR/&gt;&lt;BR/&gt;براي اينكه بهتر متوجه بشين همه رو امتحان كنين.&lt;BR/&gt;&lt;BR/&gt;120. Partition چهار تا عدد به عنوان شروع(Start) ،پايان(Stop) فاصله(Intrerval) و عدد مورد نظر(Number) ميگيره و يك سيري از اعداد به صورت &lt;BR/&gt;&lt;BR/&gt;Start + (n-1) * Interval تا Start + n * Interval -1 …………… Start + (n-1) * Interval تا Stop&lt;BR/&gt;&lt;BR/&gt;تا رسيدن به مقدار Stop ميسازه.مثلا اگه Start=1 , Stop=110 ,Interval=20 اينطوري ميشه :&lt;BR/&gt;&lt;BR/&gt;1…20 21…40 41…60 61…80 81…100 101…110&lt;BR/&gt;&lt;BR/&gt;حالا تابع عددي كه بش داديم(Number) رو بررسي ميكنه كه جزو كدوم يك از اين بازه ها(بازه هاي بسته) هستش.جزو هر كدوم كه بود تابع يه رشته به صورت بالاترين عضو : پايين ترين عضو برميگردونه.مثلا اگه عدد 52 يا 60 باشه تابع مقدار “41:60” رو برميگردونه.اگه عددي كه بش ميديم كمتر از كمترين عضو سري باشه تابع مقدار “ : [Start -1] ” رو برميگردونه مثلا اينجا براي 3- تابع مقدار “ : 0 ” رو برميگردونه و اگه بزرگ تر باشه “[Stop + 1] : ” رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;121. Pmt &lt;BR/&gt;&lt;BR/&gt;122. Point مختصات يه نقطه از فرم رو ميگيره و رنگ اون نقطه(بر اساس RGB:Red-Green-Blue) رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;123. PopupMenu يه Popup Menu روي فرم نشون ميده.آرگومان اولي اسم اون منو هست كه اونو توي محيط ويبي ساختين.&lt;BR/&gt;دومي Flags يا ميشه گفت Options مربوط به نحوه ي نمايش منو هستش كه يكي (يا چند تا) از اينها ميتونه باشه :&lt;BR/&gt;&lt;BR/&gt;vbPopupMenuRightAlign منو رو سمت راست مختصاتي كه بهش دادين نمايش ميده&lt;BR/&gt;vbPopupMenuLeftAlign منو رو سمت چپ مختصاتي كه بهش دادين نمايش ميده(پيشفرض)&lt;BR/&gt;vbPopupMenuCenterAlign منو رو وسط مختصاتي كه بهش دادين نمايش ميده&lt;BR/&gt;vbPopupMenuLeftButton منو فقط دكمه چپ موس رو تشخيص ميده.(اگه روي گزينه هاش راست كليك كنين اتفاقي نميفته) (پيشفرض)&lt;BR/&gt;vbPopupMenuRightButton منو دكمه چپ و راست موس رو تشخيص ميده.&lt;BR/&gt;&lt;BR/&gt;دو تا آرگومان بعدي مختصات جاييه كه ميخواين منو نمايش داده بشه.آرگومان آخر هم گزينه ي پيشفرضيه كه توي گزينه هاي منو كلفت تر از بقيه نشون داده ميشه .واسه اين آرگومام هم بايد اسم منو رو قرار بدين.مثلا اگه منوي شما اينطوري باشه:&lt;BR/&gt;&lt;BR/&gt;Edit (mnuEdit)&lt;BR/&gt;Copy (mnuCopy)&lt;BR/&gt;Cut (mnuCut)&lt;BR/&gt;Delete (mnuDel)&lt;BR/&gt;Paste (mnuPaste)&lt;BR/&gt;&lt;BR/&gt;براي نمايش منوي Edit براي وقتي كه روي TextBox كليك ميشه :&lt;BR/&gt;&lt;BR/&gt;Private Sub TextBox1_Click()&lt;BR/&gt; Call PopUpMenu(mnuEdit, vbPopupMenuRightAlign Or vbPopupMenuRightButton,,,mnuCopy)&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;كه در اين حالت منوي كپي پيشفرض ميشه.&lt;BR/&gt;&lt;BR/&gt;124. PPmt&lt;BR/&gt;&lt;BR/&gt;125. PrintForm صفحه ي فرمي كه توش تابع فراخواني شده رو واسه چاپ به پرينتر ميبره.&lt;BR/&gt;&lt;BR/&gt;126. PSet واسه رسم نقطه با رنگ داخواه روي فرم بكار ميره.آرگومان اول مختصات نقطه.بعدي هم رنگ هستش مثلا PSet (100,100),vbRed يا Form1.Pset… يا Picture1.PSet..&lt;BR/&gt;&lt;BR/&gt;127. PV &lt;BR/&gt;&lt;BR/&gt;128. QBColor يك عدد بين 0 تا 15 ميگيره و بر اساس اون ها يك رنگ از نوع RGB برميگردونه.&lt;BR/&gt;0 براي سياه 1 براي آبي تيره 2 براي سبز تيره 3 براي فسفري تيره 4 براي قرمز تيره 5 براي بنفش 6 براي زرد 7 براي سفيد تيره!(خاكستري كم رنگ) 8 براي خاكستري 9 براي آبي 10 براي سبز .11 براي فسفري 12 براي قرمز 13 براي صورتي 14 براي زرد 15 براي سفيد. مثلا (Form.BackColor = QBColor(9) ‘=vbRed = RGB(255,0,0 &lt;BR/&gt;&lt;BR/&gt;129. Randomize واسه اين به كار ميره كه نتايج تابع Rnd() كه واسه بدست آوردن اعداد تصادفي بكار ميره هر دفعه تكراري نباشه.مثلا اين كد رو در نظر بگيرين :&lt;BR/&gt;&lt;BR/&gt;Debug.Print Rnd()&lt;BR/&gt;Debug.Print Rnd()&lt;BR/&gt;Debug.Print Rnd()&lt;BR/&gt;‘Prints :&lt;BR/&gt;0.7055475 &lt;BR/&gt;0.533424 &lt;BR/&gt;0.5795186&lt;BR/&gt;&lt;BR/&gt;توي يه برنامه اي كه با اين كد من درست كردم هر دفعه كه برنامه اجرا ميشد همين مقدار ها بدست ميومد.واسه جلوگيري از اين كار از Randomize استفاده ميكنيم. &lt;BR/&gt;&lt;BR/&gt;130. Rate &lt;BR/&gt;&lt;BR/&gt;131. Refresh فرم( يا هر آبجك ديگه اي كه متد مربوط بهش باشه) رو Refresh ميكنه.يعني اون شي دوباره رسم ميشه.&lt;BR/&gt;&lt;BR/&gt;132. Replace توي رشته اي كه بهش ميديم يك رشته رو جايگزين يه رشته ي ديگه ميكنه و رشته ي جديد رو برميگردونه.آرگومان اول رشته ي اصليه.دومي رشته اي هستش كه بايد پيدا بشه و رشته ي جديد جايگزينش بشه.رشته ي بعدي رشته ي جديد هستش كه قراره جايگزين بشه.آرگومان بعدي هم جايي هستش كه عمل جايگزيني بايد از اونجا شروع بشه.بعدي حداكثر تعداد جايگزينيه .بعدي هم نوع مقايسه هستش كه توي توضيح تابع InStr در موردش گفتم.مثلا :&lt;BR/&gt;Debug.Print Replace(“It’s Visual Basic!”,”a”,”XX”) ‘ It’s VisuXXl BXXsic!&lt;BR/&gt;Debug.Print Replace(“It’s Visual Basic!”,”a”,”XX”,7) ‘ It’s Visual BXXsic!&lt;BR/&gt;Debug.Print Replace(“It’s Visual Basic!”,”a”,”XX”,,1) ‘ It’s VisuXXl Basic!&lt;BR/&gt;Debug.Print Replace(“It’s Visual Basic!”,”A”,”XX”) ‘ It’s Visual Basic!&lt;BR/&gt;Debug.Print Replace(“It’s Visual Basic!”,”A”,”XX”,,,vbTextCompare) ‘ It’s VisuXXl BXXsic!&lt;BR/&gt;&lt;BR/&gt;133. Reset هم ي فايل هاي باز شده رو ميبنده.&lt;BR/&gt;&lt;BR/&gt;134. RGB سه مولفه ي قرمز و سبز و آبيه يك رنگ رو ميگيره و اون رو برميگردونه(از نوع Long) مثلا براي رنگ قرمز : (RGB(255,0,0 و يا براي زرد (RGB(255, 255, 0&lt;BR/&gt;در ضمن هر آرگومان بايد بين 0 تا 255 باشه.&lt;BR/&gt;&lt;BR/&gt;135. Right (و $Right) برعكس Left عمل ميكنه يعني يه تعداد كاراكتر از سمت راست يك رشته جدا ميكنه.&lt;BR/&gt;&lt;BR/&gt;135. RightB (و $RightB) يك رشته رو ميگيره و به تعداد دلخواه بايت از سمت راست جدا ميكنه.مثلا ”LeftB(&amp;quot;Visual&amp;quot;, 2)=”l چون هر كاراكتر 2 بايت حساب ميشه.&lt;BR/&gt;&lt;BR/&gt;136. RmDir يك دايركتوري رو حذف ميكنه.توي اون دايركتوري نبايد فولدر يا فايل ديگه اي باشه.&lt;BR/&gt;&lt;BR/&gt;137. Rnd يك عدد تصادفي بين 0 تا 1 (0,1] با سه رقم اعشار از نوع Single برميگردونه مثلا 0.492&lt;BR/&gt;&lt;BR/&gt;138. Round براي يك عدد اعشاري تعداد اعشار دلخواه رو نگه ميداره و بقيه رو حذف ميكنه.مثلا Round(1.2345,2) = 1.23 اينجا 2 تا از ارقام اعشار نگه داشته شدن.&lt;BR/&gt;&lt;BR/&gt;139. RTrim (و $RTrim) يه رشته ميگيره و هرچي Space سمت راست رشته باشه رو حذف ميكنه و رشته ي جديد رو برميگردونه مثلا :&lt;BR/&gt;Debug.Print “ Visual Basic “ ‘ = “ Visual Basic“ &lt;BR/&gt;&lt;BR/&gt;140. SavePicture يك عكس رو ميگيره و اون رو توي يك فايل ذخيره ميكنه(با فرمت Bitmap) اون عكس ميتونه يك Picture يا Image رسم شده ي يك فرم يا Picture Box باشه.&lt;BR/&gt;&lt;BR/&gt;141. SaveSetting با گرفتن نام برنامه(دلخواه) Setion و Key و يه رشته ه عنوان اطلاعات يا تنظيم مورد نظر ، يك Key توي رجيستري با اسم ]نام برنامه[ درست ميكنه.توي اون يك Key ديگه با اسم [Section] درست ميكنه و توي اون يك Value از نوع رشته (SZ)با اسم [Key] درست ميكنه و مقدار اون رو برابر رشته اي كه بهش داديم (Setting) قرار ميده.كه بعدا با تابع GetSetting و يا GetAllSettings ميتونين به اين اطلاعات دسترسي پيدا كنين.اين اطلاعات توي رجيستري توي شاخه ي : &lt;BR/&gt;HKEY_CURRENT_USER\Software\VB and VBA Program Settings&lt;BR/&gt;&lt;BR/&gt;درست ميشن. با توجه به مقدار هايي كه بهشون داديم: &lt;BR/&gt;HKEY_CURRENT_USER\Software\VB and VBA Program Settings\[appName]\[Section]&lt;BR/&gt;&lt;BR/&gt;ScaleX .142-3 و ScaleY يه مقدار و 2 تا واحد ميگيرن و واحد مقداري رو كه گرفتن تغيير ميدن مثلا از Pixel به Inch .آرگومان اول همون مقدار مورد نظره مثلا 1000 دومي واحديه كه براي مقدار بايد در نظر گرفته بشه بطور پيشفرض vbHimetric هستش.بعدي واحد خروجيه كه بطور بيشفرض برابر با ScaleMode فرم هستش كه اون هم به طور پيشفرض vbTwips هستش.مثلا اگه بخواهيم ببينيم 10اينچ چند ميليمتره :&lt;BR/&gt; ScaleX(10, vbInches, vbMillimeters)&lt;BR/&gt;&lt;BR/&gt;Seek .144 شماره ي فايلي كه باز شده رو ميگيره و براي حالت Random شماره ركورد بعدي (كه قراره نوشته يا خوانده بشه) و براي حالت هاي ديگه شماره بايت بعدي كه قراره نوشته يا خوانده بشه رو برميگردونه كه قبل از اينكه چيزي نوشته يا خونده بشه مقدار يك رو برميگردونه بعد 2 و به همين ترتيب.فرقش هم با Loc همينه.Loc شماره آخرين ركورد يا بايتي كه نوشته يا خوانده شده رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;145. SendKeys يك يا چند كاركتر يا دكمه هاي كيبرد رو به پنجره ي فعال ارسال ميكنه درست مثل اينكه دكمه هاي كيبرد فشار داده شده باشن.2 تا آرگومان ميگيره كه دومي اختياريه.آرگومان اولي كاراكتر هايي هستن كه ميخواهيم ارسال كنيم مثلا “vb” .واسه دكمه هاي خاص كيبرد مثل HOME ها DELETE و ... بايد اون ها رو توي آكلاد قرار بدين مثلا :&lt;BR/&gt;براي insert از “{INSERT}” يا “{INS}” استفاده ميشه.&lt;BR/&gt;براي end از “{END}” استفاده ميشه.&lt;BR/&gt;براي delete از “{DELETE}” يا “{DEL}” استفاده ميشه.&lt;BR/&gt;براي page down از “{PGDN}” استفاده ميشه.&lt;BR/&gt;براي page up از “{PGUP}” استفاده ميشه.&lt;BR/&gt;براي home از “{HOME}” استفاده ميشه.&lt;BR/&gt;براي علامت چپ از “{LEFT}” استفاده ميشه.&lt;BR/&gt;براي علامت بالا از “{UP}” استفاده ميشه.&lt;BR/&gt;براي علامت راست از “{RIGHT}” استفاده ميشه.&lt;BR/&gt;براي علامت پايين از “{DOWN}” استفاده ميشه.&lt;BR/&gt;براي print screen از “{PRTSC}” استفاده ميشه.&lt;BR/&gt;براي scroll lock از “{SCROLLLOCK}” استفاده ميشه.&lt;BR/&gt;براي break از “{BREAK}” استفاده ميشه.&lt;BR/&gt;براي back space از “{BACKSPACE}” يا“{BS}” يا “{BKSP}” استفاده ميشه.&lt;BR/&gt;براي enter از “{ENTER}” يا &amp;quot;~&amp;quot; (بدون آكلاد) استفاده ميشه.&lt;BR/&gt;براي F1 ، F2 و... هم از “{F1}” ، “{F2}” و ... استفاده ميشه.&lt;BR/&gt;براي escape از “{ESC}” استفاده ميشه.&lt;BR/&gt;براي tab از “{TAB}” استفاده ميشه.&lt;BR/&gt;براي caps lock از “CAPSLOCK” استفاده ميشه.&lt;BR/&gt;&lt;BR/&gt;واسه نگه داشتنه شدن كليد هاي Control و Alt و Shift به ترتيب از ^ ، % ، + استفاده كنين.مثلا براي كنترل بعلاوه ي v از “^v” استفاده كنين.اگه ميخواهين يكي ازين دكمه ها واسه مجموعه اي از كليد ها مورد استفاده قرار بگيره از پرانتز استفاده كنين مثلا براي كنترل بعلاوه ي vb از “^(vb)” استفاده كنين.براي استفاده همزمان از چند تا ازين كليد ها هم اون ها رو پشت سر هم استفاده كنين مثلا براي شيفت بعلاوه ي كنترل بعلاوه v از “+^v” استفاده كنين.اين كار رو براي دكمه هاي HOME و INSERT و ... هم ميتونين بكنين.مثلا كنترل بعلاوه يHOME ميشه “^{HOME}” .&lt;BR/&gt;&lt;BR/&gt;آرگومان دوم از نوع Boolean هستش كه بطور پيشفرض False هستش.اگه True باشه وقتي كه كليدي به يك پنجره ارسال ميشه تابع منتظر ميشه تا اون پنجره عمليات فشرده شدن كليد رو براي خودش پردازش كنه بعد كنترل به تابع برميگرده.&lt;BR/&gt;&lt;BR/&gt;146. SetAttr آدرس يه فايل رو ميگيره و Attributes مربوط به اون رو تغيير ميده.(مثل سيستم آرشيو نرمان و ...)&lt;BR/&gt;&lt;BR/&gt;147. Focus اين تابع Focus رو به كنترلي كه اين متد از اون فراخواني بشه ميده.اگه قبلش اسم كنترل رو نياريم بطور پيشفرض Focus به فرم ي كه تابع توش فراخواني شده داده ميشه.&lt;BR/&gt; &lt;BR/&gt;148. Sng كار تابع Sign( علامت) توي رياضي رو ميكنه.به اين صورت كه يك عدد ميگيره.اگه عدد بزرگتر از صفر باشه مقدار 1 اگه برابر با صفر باشه مقدار صفر و اگه كوچكتر از صفر باشه مقدار 1- رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;149. Shell آدرس يه فايل اجرايي رو ميگيره و اون رو اجرا ميكنه و Process ID اون رو برميگردونه.آرگومان اولي آدرس فايل هستش كه ميتونه آدرس كامل باشه يا فقط اسم فايل (براي فايل هايي كه توي پوشه ويندوز يا سيستم يا دايركتوري جاري هستن) .آرگومان دومي هم نوع نمايش اون ها هست كه مشخصه مثلا اگه بخواهيم برنامه توي حالت Maximize باز بشه از vbMaximizedFocus استفاده ميكنيم.&lt;BR/&gt;&lt;BR/&gt;150. Show متد مربوط به فرم هستش كه يك فرم رو لود ميكنه و نشون ميده.آرگومان اول اگه vbModal باشه فرم اول(كه كد توش نوشته شده) تا زماني كه فرم دوم(كه با استفاده از متد Show نشون داده شده) بسته نشه قابل دسترسي نيست و كد بعد توي فرم اجرا نميشه.مثل وقتي كه توي فرم يه MsgBox نشون ميدين؛تا وقتي كه پنجره ي MsgBox رو نبندين فرم غير قابل دسترسه و برنامه به خط بعد نميره.آرگومان بعدي هم فرميه كه به عنوان والد فرمي كه قراره نشون داده بشه در نظر گرفته ميشه و مقدار دهيش هم اختياريه.مثلا&lt;BR/&gt;&lt;BR/&gt;‘ ‘In Form 1 :&lt;BR/&gt;Form2.Show vbModal,Form1&lt;BR/&gt;&lt;BR/&gt;151. Sin سينوس زاويه ي داده شده(بر حسب راديان) رو حساب ميكنه.&lt;BR/&gt;&lt;BR/&gt;152. SLN &lt;BR/&gt;&lt;BR/&gt;153. Space(و Space$) يك عدد ميگيره و به تعداد اون عدد Space برميگردونه مثلا Space(4) مقدار “ “ رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;154. Split يه رشته و يه كاراكتر جدا كننده ميگيره و با توجه به اون كاراكتر كلمه هاي موجود توي اون رشته رو توي يك آرايه رشته اي قرار ميده.مثلا اگه رشته ي “VB Is Easy” و كاراكتر “ “ رو بهش بديم اعضاي آرايه اي كه برميگردونه “VB&amp;quot; ، “Is” و “Easy” هستن.يا اگه “One_Two_Three” و “_” رو بهش بديم اعضاي آرايه “One” ، “Two” و “Three” ميشن.آرگومان اول رشته ي مورد نظره.آرگومان بعدي كاراكتر مورد نظره كه بطور پيشفرض “ “ (Space) در نظر گرفته ميشه.آرگومان بعدي حداكثر تعداد اعضا هستش مثلا اگه براي مثال قبلي اين آرگمان رو 2 ميگذاشتين اعضاي آرايه “One” و “Two” ميشدن(عضو سومي وجود نداشت) آرگومان بعدي هم نوع مقايسه براي كاراكتريه كه بهش ميديم.(توي توضيح تابع InStr در مورد نوع مقايسه توضيح دادم.) &lt;BR/&gt;&lt;BR/&gt;155. Sqr راديكال يك عدد رو ميگيره.مثلا Sqr(9) = 3. .براي جذر گرفتن يك عدد با فرجه بغير از 2 از توان استفاده كنين مثلا اگه بخواهين از 8 با فرجه 3 جذر بگيرين از 8 ^ (1/3) استفاده كنين.&lt;BR/&gt;&lt;BR/&gt;156. Str (و Str$) يه مقدار رو به نوع Str تبديل ميكنه.مثلا “Str(1) = “1&lt;BR/&gt;&lt;BR/&gt;StrComp .157 دو تا رشته رو مقايسه ميكنه.اگه رشته ها برابر بودن مقدار 0 .اگه اولي از دومي بزرگتر بود مقدار1 و اگه دومي از اولي بزرگتر بود مقدار -1 رو برميگردونه.2 تا آرگومان اول 2 تا رشته ي مورد نظر هستن.سومي هم نوع مقايسه دو تا رشته هستش كه توي توضيح تابع Instr درموردش گفتم اما چون به اين تابع بيشتر مربوط ميشه اينجا هم ميگم. اگه از vbBinaryCompare استفاده كنين بين حروف كوچك و بزرگ تفاوت گذاشته ميشه و اون ها مساوي حساب نميشن (Case Sensitive) اگه از vbTextCompare استفاده كنين حروف بزرگ و كوچك يكي حساب ميشن. vbDatabaseCompare هم مربوط به Access هستش و كاري بهش نداريم.مثلا (StrComp(“abCD”,”abcd”,vbBinaryCompare مقدار -1 رو برميگردونه يعني رشته ها با هم مساوي نيستن.در صورتي كه 0= (StrComp(“abCD”,”abcd”,vbTextCompare.&lt;BR/&gt;&lt;BR/&gt;اين رو هم بگم كه ويبي به طور پيشفرض Case Sensitive هستش و حروف بزرگ و كوچك مساوي نيستن يعني “VB” &amp;lt;&amp;gt; “Vb” اما اگه كد Option Compare Text رو اول كدها(بالاي فرم يا ماژول) بزارين اين حساسيت ويبي از بين ميره.&lt;BR/&gt;&lt;BR/&gt;158. StrConv واسه تبديل كردن نوع يك رشته به يك نوع ديگه بكار ميره.آرگومان اول رشته ي مورد نظره .آرگومان بعدي هم نوع جديد هستش.كه يكي از مقدار هاي زير ميتونه باشه :&lt;BR/&gt;vbFromUnicode – با اين آرگومان تابع رشته اي كه بش داديم رو Unicode در نظر ميگيره و اون رو به ANSI تبديل ميكنه.&lt;BR/&gt;vbHiragana - كاراكتر هاي Katakana ي توي رشته رو به Hiragana تبديل ميكنه.(مربوط به Encoding كره ايه و بدرد ما نميخوره اصلا!)&lt;BR/&gt;vbKatakana – برعكس قبلي.&lt;BR/&gt;vbLowerCase – همه ي حروف بزرگ توي رشته رو به حروف كوچك تبديل ميكنه.مثلا “Visual Basic” ميشه “visual basic”&lt;BR/&gt;vbNarrow – كاراكتر هاي 2 بايتي رو به كاراكتر هاي تك بايتي تبديل ميكنه&lt;BR/&gt;vbWide - برعكس قبلي.&lt;BR/&gt;vbPopperCase – اولين حروف همه ي كلمه هاي موجود توي رشته(رشته اي كه بعد از فاصله قرار داره) رو به حروف بزرگ تبديل ميكنه.مثلا “Visual basic is easy” رو به “Visual Basic Is Easy” تبديل ميكنه.&lt;BR/&gt;vbUnicode - كاراكتر هاي متن رو به كاراكتر هاي Unicode تبديل ميكنه.&lt;BR/&gt;vbUpperCase - همه ي حروف كوچك توي رشته رو به حروف بزرگ تبديل ميكنه.مثلا “Visual Basic” ميشه “VISUAL BASIC”&lt;BR/&gt;&lt;BR/&gt;اين رو هم بگم كه اين تابع مثل بقيه تابع هاي كار با رشته ي ويبي رشته اي كه بهش ميديم رو تغيير نميده و رشته ي جديد رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;159. String (و String$) يك عدد(n) و يه كاراكتر ميگيره و يه رشته كه حاوي n تا از اون كاراكتره برميگردونه .(مثل Space كه n تا فاصله برميگردونه) مثلا ”String(4,”a”) = “aaaa.در ضمن به جاي اون كاراكتر ميتونين كد اسكيش رو هم به تابع بدين مثلا ”String(4,65)=”aaaa.&lt;BR/&gt;&lt;BR/&gt;160. StrReverse يه رشته رو برعكس ميكنه مثلا ”StrReverse(“VisualBasic”) = “cisaBlausiV&lt;BR/&gt;&lt;BR/&gt;161. Switch يك تعداد آرگومان كه تعدادشون بايد زوج باشه ميگيره به طوري كه :&lt;BR/&gt;آرگومان هاي فرد( اولي ، سومي ، پنجمي و ...) بايد يك عبارت باشن(يا ميشه گفت عبارت در نظر گرفته ميشن)&lt;BR/&gt;آرگومان هاي زوج هم بايد مقدار باشن(يا ميشه گفت مقدار در نظر گرفته ميشن)&lt;BR/&gt;تابع مياد به ترتيب تك تك آرگومان هاي فرد رو مورد بررسي قرار ميده.به اولين آرگوماني كه ارزشش درست (True) باشه كه رسيد آرگومان بعد از اون(كه يك مقدار هست) رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;مثلا فرض كنين شما ميخواهين يك تابعي درست كنين كه يك عدد از 1 تا 5 بگيره و معادل رشته اي اون رو (“One” ، “Two” و ...) رو برگردونه.با استفاده از اين تابع شما ميتونين اينطوري عمل كنين :&lt;BR/&gt;Function nToS(Byval n as Integer) As String&lt;BR/&gt; If n &amp;gt; 5 Or n &amp;lt; 1 Then Exit Function&lt;BR/&gt; nToS = Switch(n=1,”One”,n=2,”Two”,n=3,”Three”,n=4,”Four”,n=5,”Five”)&lt;BR/&gt;End Function&lt;BR/&gt;&lt;BR/&gt;كد اين تابع اول چك ميكنه كه عددي كه بهش داده شده بين 1 تا 5 هست يا نه.اگه نبود از تابع خارج ميشه.&lt;BR/&gt;اما اگه بود با استفاده از تابع Swich مقدار ها ي مختلفي كه n ميتونه داشته باشه رو چك ميكنه و مقدار معادل رشته اي رو برميگردونه.مثلا nToS(4)=”Four” .&lt;BR/&gt;&lt;BR/&gt;162. SYD&lt;BR/&gt;&lt;BR/&gt;163. Tan اين هم تانژانت يك زاويه (بر حسب راديان) رو برميگردونه.&lt;BR/&gt;&lt;BR/&gt;164. TextHeight يك رشته ميگيره و ارتفاعي رو كه اون رشته اشغال ميكنه رو باتوجه به فونت فرم و واحد فرم(ScaleMode) برميگردونه.مثلا اگه واحد و فونت فرم پيشفرض باشه :&lt;BR/&gt; TextHeight(“m”) = TextHeight(“MA”) = 195&lt;BR/&gt;&lt;BR/&gt;يعني اينكه ارتفاعي كه اشغال ميكنه به طول رشته و يا كوچك و بزرگ بودن كاراكتر ها بستگي نداره(كه اين هم بديهيه!)&lt;BR/&gt;&lt;BR/&gt;165. TextWidth كار تابع قبلي رو براي عرض يك رشته انجام ميده.با اين فرق كه همونطور كه ميدونيم با تغيير تعداد كاراكتر يك رشته و يا كوچك و بزرگ بودن كاراكتر ها عرضي كه رشته اشغال ميكنه فرق ميكنه.مثلا&lt;BR/&gt; TextWidth(“a”) = 90 ، TextWidth(“A”) = 166 و TextWidth(“Abcd”) = 375&lt;BR/&gt;&lt;BR/&gt;167. TimeSerial ساعت و دقيقه و ثانيه رو ميگيره و زمان رو با نوع Dateبرميگردونه مثلا &lt;BR/&gt;Debug.Print TimeSerial(10, 20, 30) ‘ prints 10:20:30 AM&lt;BR/&gt;&lt;BR/&gt;168. TimeValueمثل قبليه با اين فرق كه يه تا مقدار رو يكجا و از نوع رشته ميگيره .مثلا :&lt;BR/&gt;Debug.Print TimeValue(“10:20:30”) ‘ prints 10:20:30 AM&lt;BR/&gt;&lt;BR/&gt;169. Trim (و Trim$) يك رشته ميگيره و فاصله هاي اول و آخرش رو حذف ميكنه(كار LTrim و RTrim رو با هم ميكنه) مثلا :&lt;BR/&gt;Debug.Print Trim(“ Visual Basic “) ‘prints “Visual Basic”&lt;BR/&gt;&lt;BR/&gt;170. TypeName يك مقدار ميگيره و نوعش رو برميگردونه.اون مقدار ميتونه از هر نوعي باشه.مثلا :&lt;BR/&gt;&lt;BR/&gt;Debug.Print TypeName(Me) ‘ prints Form1&lt;BR/&gt;Debug.Print TypeName(Command1) ‘ prints CommandButton&lt;BR/&gt;Debug.Print TypeName(“Hello”) ‘ prints String&lt;BR/&gt;Debug.Print TypeName(2.2) ‘ prints Double&lt;BR/&gt;Debug.Print TypeName(Err) ‘ prints ErrObject&lt;BR/&gt;&lt;BR/&gt;171. UCase (و UCase$) يك رشته ميگيره و همه ي حروف كوچك اون رو به حروف بزرگ تبديل ميكنه مثلا ”!UCase(“Hello!”) = “HELLO.اين تابع برعكس LCase كار ميكنه.&lt;BR/&gt;&lt;BR/&gt;172. Unload يك آبجك رو از حافظه پاك ميكنه.مثلا Unload Form1&lt;BR/&gt;&lt;BR/&gt;173. Val يك رشته ميگيره و عدد هاي سمت چپش رو جدا ميكنه و وقتي به يك كاراكتر غير عددي يا غير نقطه برسه كارش رو ادامه ميده .عددي كه برميگردونه از نوع Double هستش.مثلا&lt;BR/&gt; Val(“2 4 7 11 323.23 adas”) = 24711323.23&lt;BR/&gt;&lt;BR/&gt;174. در مورد كار تابع هاي ValidateControls و WhatsThisMode هم چيزي نفهميدم :&lt;BR/&gt;&lt;BR/&gt;MSDN :&lt;BR/&gt;ValidateControls: Ensures that the contents of the last control on the form are valid before exiting the form.&lt;BR/&gt;WhatsThisMode: Duplicates the functionality of the WhatsThisMode method of a Visual Basic 6.0 form.&lt;BR/&gt;&lt;BR/&gt;175. VarType هم يك مقدار ميگيره و نوع اون رو از نوع vbVarType برميگردونه و فرقش هم با TypeName همينه.مثلا &lt;BR/&gt;VarType(2.2) = vbDouble&lt;BR/&gt;&lt;BR/&gt;176. Year يه تاريخ ميگيره و سال اون رو استخراج ميكنه.مثلا&lt;BR/&gt; Year(Now()) = 2005 &lt;BR/&gt;&lt;BR/&gt;177. ‌ZOrder مختصات Z يك كنترل(به طور پيشفرض فرمي كه توش فراخواني ميشه) رو تعيين ميكنه.مختصات Z تيعيين ميكنه كه كدوم كنترل ها بايد زير بقيه و كدوم بايد روي ديگري باشه.مقدار 0 (مقدار پيشفرض) يه كنترل رو به رو مياره و مقدار 1 به زير ميبره</description>
<pubDate>Sat, 24 Feb 2007 18:47:39 GMT</pubDate>
<comments>http://commenting.blogfa.com/?blogid=vblog&amp;postid=69</comments>
<dc:creator>vblog</dc:creator>
<guid>http://vblog.blogfa.com/post-69.aspx</guid>
</item>
<item>
<title>اموزش Visual Basic 6.0</title>
<link>http://vblog.blogfa.com/post-68.aspx</link>
<description>معرفی و اموزش چند تابع API&lt;BR/&gt;	&lt;BR/&gt;1.Mouse_event&lt;BR/&gt;&lt;BR/&gt;اين تابع واسه شبيه سازی کردن فشرده (یا رها) شدن دکمه های موس هستش:&lt;BR/&gt;&lt;BR/&gt;Private Declare Sub mouse_event Lib &amp;quot;user32&amp;quot; Alias &amp;quot;mouse_event&amp;quot; (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)&lt;BR/&gt;&lt;BR/&gt;آرگومان اول دکمه ای هستش که ميخواهيم شبيه سازيش کنيم و اين مقدار هارو ميشه بهش داد:&lt;BR/&gt;&lt;BR/&gt;Private Const MOUSEEVENTF_LEFTDOWN = &amp;amp;H2 دکمه سمت چپ فشرده میشه&lt;BR/&gt;Private Const MOUSEEVENTF_LEFTUP = &amp;amp;H4 دکمه سمت چپ رها ميشه&lt;BR/&gt;Private Const MOUSEEVENTF_MIDDLEDOWN = &amp;amp;H20 دکمه وسطی فشرده ميشه&lt;BR/&gt;Private Const MOUSEEVENTF_MIDDLEUP = &amp;amp;H40 دکمه وسطی رها ميشه&lt;BR/&gt;Private Const MOUSEEVENTF_RIGHTUP = &amp;amp;H10 دکمه سمت راست فشرده ميشه&lt;BR/&gt;Private Const MOUSEEVENTF_RIGHTDOWN = &amp;amp;H8 دکمه سمت راست رها ميشه&lt;BR/&gt;&lt;BR/&gt;بقيه آرگومان ها رو ۰ قرار بدين&lt;BR/&gt;&lt;BR/&gt;حالا عمل فشرده (يا رها) شدن دکمه های موس در جايی که موس قرار داره شبی سازی ميشه:&lt;BR/&gt;&lt;BR/&gt;Private Const MOUSEEVENTF_LEFTDOWN = &amp;amp;H2 &apos; left button down&lt;BR/&gt;Private Const MOUSEEVENTF_LEFTUP = &amp;amp;H4 &apos; left button up&lt;BR/&gt;Private Declare Sub mouse_event Lib &amp;quot;user32&amp;quot; (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0&lt;BR/&gt;mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;kb_event.۲&lt;BR/&gt;&lt;BR/&gt;اين تابع واسه شبيه سازی فشرده شدن یا رها کردن دکمه های کیبرد هستش:&lt;BR/&gt;&lt;BR/&gt;Private Declare Sub keybd_event Lib &amp;quot;user32&amp;quot; Alias &amp;quot;keybd_event&amp;quot; (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)&lt;BR/&gt;&lt;BR/&gt;آرگومان اول کلید مورد نظر هستش که توی ویبی میشه از vbkeyA , vbkeyB , ... استفاده کرد.یا میشه از ثابت هایی که توی ای پی آی ویور هست VK_A ... , VK_B , ... استفاده کرد.&lt;BR/&gt;&lt;BR/&gt;آرگومان دوم رو 0 بزارین.سومی آگه 0 باشه عمل فشرده شدن و اگه 2 باشه عمل رها شدن کلید بازسازی میشه.چهارمی رو هم 0 قرار بدین:&lt;BR/&gt;&lt;BR/&gt;Private Declare Sub keybd_event Lib &amp;quot;user32&amp;quot; (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) &lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Click()&lt;BR/&gt;keybd_event vbKeyA, 0, 0, 0&lt;BR/&gt;End Sub&lt;BR/&gt;Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)&lt;BR/&gt;MsgBox KeyCode&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;3.GetWindowRect&lt;BR/&gt;&lt;BR/&gt;این تابع مختصات چهار سمت(چپ راست بالا پایین) یه پنجره رو توی یه متغیر از نوع rect قرار میده:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetWindowRect Lib &amp;quot;user32&amp;quot; Alias &amp;quot;GetWindowRect&amp;quot; (ByVal hwnd As Long, lpRect As RECT) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول هندل پنجره مورد نظره.دومی هم یه متغییر از نوع rect هستش که تابع مقدار مورد نظر رو توی اون قرار میده.یه label و یه timer توی فرم بزارین و :&lt;BR/&gt;&lt;BR/&gt;Private Type RECT &lt;BR/&gt;Left As Long&lt;BR/&gt;Top As Long&lt;BR/&gt;Right As Long&lt;BR/&gt;Bottom As Long&lt;BR/&gt;End Type&lt;BR/&gt;&lt;BR/&gt;Private Declare Function WindowFromPoint Lib &amp;quot;user32&amp;quot; (ByVal xPoint As Long, ByVal yPoint As Long) As Long&lt;BR/&gt;Private Declare Function GetWindowRect Lib &amp;quot;user32&amp;quot; (ByVal hwnd As Long, lpRect As RECT) As Long&lt;BR/&gt;Private Declare Function GetCursorPos Lib &amp;quot;user32&amp;quot; (lpPoint As POINTAPI) As Long&lt;BR/&gt;&lt;BR/&gt;Private Type POINTAPI&lt;BR/&gt;x As Long&lt;BR/&gt;y As Long&lt;BR/&gt;End Type&lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;Timer1.Interval = 10&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Private Sub Timer1_Timer()&lt;BR/&gt;Dim PAPI As POINTAPI, R As RECT&lt;BR/&gt;GetCursorPos PAPI&lt;BR/&gt;GetWindowRect WindowFromPoint(PAPI.x, PAPI.y), R&lt;BR/&gt;Label1.Caption = &amp;quot;Top : &amp;quot; &amp;amp; R.Top &amp;amp; &amp;quot; Bottom : &amp;quot; &amp;amp; R.Bottom _&lt;BR/&gt;&amp;amp; &amp;quot; Left : &amp;quot; &amp;amp; R.Left &amp;amp; &amp;quot; Right : &amp;quot; &amp;amp; R.Right _&lt;BR/&gt;&amp;amp; &amp;quot; Height : &amp;quot; &amp;amp; R.Bottom - R.Top &amp;amp; &amp;quot; Width : &amp;quot; &amp;amp; R.Right - R.Left&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;اول با استفاده از تابع هاي GetCursorPos و WindowFromPoint هندل پنجره ای که کرسر موس روشه رومیگیریم.بعد با تابع مورد نظر مختصات بالا و پایین و چپ و راست ومقدار طول وعرزش رو بدست میاریم.&lt;BR/&gt;&lt;BR/&gt;4.InternetGetConnectedState&lt;BR/&gt;&lt;BR/&gt;این تابع مشخص میکنه که کامپیوتر چه طوری به اینترنت متصل شده و یا اصلا متصل شده یا نه:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function InternetGetConnectedState Lib &amp;quot;wininet.dll&amp;quot; (ByRef lpdwFlags As Long,ByVal dwReserved As Long) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول یه متغیر از نوع Long هستش که تابع مقداری که مربوط به نوع ارتباط میشه رو توی این قرار میده.دومی رو هم byval 0&amp;amp; بزارین.&lt;BR/&gt;&lt;BR/&gt;وقتی تابع مقدار رو توی متغیر قرار داد باید با if های متعدد نوع ارتباط رو پیدا کنیم.مقدار میتونه یکی (یا چند تا) از اینا باشه:&lt;BR/&gt;&lt;BR/&gt;Private Const INTERNET_CONNECTION_MODEM As Long = &amp;amp;H1   MODEM ارتباط از طریق &lt;BR/&gt;Private Const INTERNET_CONNECTION_LAN As Long = &amp;amp;H2  LAN ارتباط از طریقProxy &lt;BR/&gt;Private Const INTERNET_CONNECTION_PROXY As Long = &amp;amp;H4 ارتباط دارای پراكسي هستش&lt;BR/&gt;Private Const INTERNET_CONNECTION_MODEM_BUSY As Long = &amp;amp;H8  مودم Busy هستش (؟)&lt;BR/&gt;Private Const INTERNET_CONNECTION_OFFLINE As Long = &amp;amp;H20  کامپیوتر در حالتOffline هستش &lt;BR/&gt;Private Const INTERNET_CONNECTION_CONFIGURED As Long = &amp;amp;H40 کامپیوتر به اینترنت متصل هستش&lt;BR/&gt; Private Const INTERNET_RAS_INSTALLED As Long = &amp;amp;H10 روی کامپیوتر نصب شدهRas&lt;BR/&gt;&lt;BR/&gt;اگه مقدار برگشتی تابع 0 باشه کامپیوتر به اینترنت وصل نیست و اگه 1 باشه وصله.&lt;BR/&gt;&lt;BR/&gt;چون ممکنه مقداری که به متغییر داده میشه چند تا از مقدار های بالا باشه (مثلا CONNECTION_CONFIGURED و CONNECTION_MODEM) باید توی If از AND استفاده کنیم و نمیشه از = استفاده کرد:&lt;BR/&gt;&lt;BR/&gt;Private Const INTERNET_CONNECTION_LAN As Long = &amp;amp;H2 &lt;BR/&gt;Private Const INTERNET_CONNECTION_PROXY As Long = &amp;amp;H4&lt;BR/&gt;Private Const INTERNET_CONNECTION_MODEM_BUSY As Long = &amp;amp;H8&lt;BR/&gt;Private Const INTERNET_CONNECTION_OFFLINE As Long = &amp;amp;H20&lt;BR/&gt;Private Const INTERNET_CONNECTION_CONFIGURED As Long = &amp;amp;H40&lt;BR/&gt;Private Const INTERNET_RAS_INSTALLED As Long = &amp;amp;H10&lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;Dim lpF As Long, MBStr As String&lt;BR/&gt;If InternetGetConnectedState(lpF, ByVal 0&amp;amp;) = 1 Then&lt;BR/&gt;If lpF And INTERNET_CONNECTION_CONFIGURED Then&lt;BR/&gt;MBStr = &amp;quot;Connection to the internet = True ...&amp;quot; &amp;amp; vbNewLine&lt;BR/&gt;End If&lt;BR/&gt;If lpF And INTERNET_CONNECTION_MODEM Then&lt;BR/&gt;MBStr = &amp;quot;By MODEM&amp;quot; &amp;amp; vbNewLine&lt;BR/&gt;End If&lt;BR/&gt;If lpF And INTERNET_CONNECTION_LAN Then&lt;BR/&gt;MBStr = &amp;quot;By LAN&amp;quot; &amp;amp; vbNewLine&lt;BR/&gt;End If&lt;BR/&gt;If lpF And INTERNET_CONNECTION_MODEM_BUSY Then&lt;BR/&gt;MBStr = &amp;quot;MODEM Busy&amp;quot; &amp;amp; vbNewLine&lt;BR/&gt;End If&lt;BR/&gt;If lpF And INTERNET_CONNECTION_OFFLINE Then&lt;BR/&gt;MBStr = &amp;quot;Offline&amp;quot; &amp;amp; vbNewLine&lt;BR/&gt;End If&lt;BR/&gt;If lpF And INTERNET_CONNECTION_PROXY Then&lt;BR/&gt;MBStr = &amp;quot;Proxy&amp;quot; &amp;amp; vbNewLine&lt;BR/&gt;End If&lt;BR/&gt;If lpF And INTERNET_RAS_INSTALLED Then&lt;BR/&gt;MBStr = &amp;quot;Ras Installed&amp;quot; &amp;amp; vbNewLine&lt;BR/&gt;&lt;BR/&gt;End I&lt;BR/&gt;Else&lt;BR/&gt;MBStr = &amp;quot;Connected to the internet = False&amp;quot;&lt;BR/&gt;End If&lt;BR/&gt;MsgBox MBStr&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;**********************&lt;BR/&gt;اموزش روش های Shut Down&lt;BR/&gt;&lt;BR/&gt;براي Shut Down كردن سيستم از تابعExitWindowEx  استفاده ميشه :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function ExitWindowsEx Lib &amp;quot;user32&amp;quot; (ByVal uFlags As Long, ByVal dwReserved As Long) As Long&lt;BR/&gt;&lt;BR/&gt;پارامتر اول يكي از مقدار هاي زير ميتونه باشه :&lt;BR/&gt;&lt;BR/&gt;Const EWX_LOGOFF = 0&lt;BR/&gt;Const EWX_SHUTDOWN = 1&lt;BR/&gt;Const EWX_REBOOT = 2&lt;BR/&gt;Const EWX_FORCE = 4&lt;BR/&gt;&lt;BR/&gt;همش به غير از آخري  واضحه.آخري با هر كدوم از بقيه كه تركيب بشه (با Or )  موجب ميشه كه ويندوز برنامه ها رو مجبور به بستن كنه.پارامتر دوم رو هم VbNullString  قرار بدين&lt;BR/&gt;.مثال :&lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;ExitWindowsEx EWX_SHUTDOWN or EWX_FORCE, VbNULLString&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;توي ويندوز XP  اين روش كار نميكنه.براي شات دانون كردن ويندوز بايد از فايل ShutDown.Exe كه توي دايركتوري سيستم هست استفاده كرد.اين فايل واسه Shut Down كردن چند تا پارامتر ميتونه بگيره كه يكيش رو حتما بايد بش بدين :&lt;BR/&gt;&lt;BR/&gt;-I&lt;BR/&gt;&lt;BR/&gt;يه واسط كاربري نشون ميده كه توي اون كاربر Options  ها رو مشخص ميكنه و بعد OK  ميكنه تا سيستم خاموش بشه  و اگه اين رو استفاده كردين ديگه نياز به پارامتر ديكه اي نيست .البته اين پارامتر اصلا به كار ما نمياد.ما ميخواهيم به طور اتوماتيك سيستم رو Shut Down كنيم. &lt;BR/&gt;&lt;BR/&gt;-l&lt;BR/&gt;&lt;BR/&gt;سيستم Logoff ميشه&lt;BR/&gt;&lt;BR/&gt;-s&lt;BR/&gt;&lt;BR/&gt;سيستم Shutdown   ميشه.(توي قسمت هاي قبلي هرجا گفتم Shut Down منظورم Restart , Shutdown , Logoff   بود)&lt;BR/&gt;&lt;BR/&gt;-r&lt;BR/&gt;&lt;BR/&gt;سيستم Restart  ميشه.&lt;BR/&gt;&lt;BR/&gt;-a&lt;BR/&gt;&lt;BR/&gt;اگه سيستم در حال Shut Down شدن باشه ،اين كار لغو (abort)ميشه.&lt;BR/&gt;&lt;BR/&gt;-t [Seconds]&lt;BR/&gt;&lt;BR/&gt;اين براي زمان بكار ميره.يعني اينكه اگه از اين پارامتر استفاده كنين بايد بعدش يه عدد كه معرف  ثانيه هستش بنويسين كه اگه اين كارو بكنين يه پنجره مثل اين نشون داده ميشه و سيستم بعد از زماني كه شما تعيين كردين Shut Down ميشه:&lt;BR/&gt;&lt;BR/&gt;-c &amp;quot;[This is a comment] &amp;quot;&lt;BR/&gt;&lt;BR/&gt;اگه از پارامتر t  استفاده كرده باشين با اين پارامتر (c) ميتونين  توي قسمت Message  يه پيغام براي كاربر نشون بدين مثل ايني كه من گذاشتم (This is a comment)  در ضمن طول اين پيغام  حداكثر بايد 127 كاراكتر باشه.&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;-f&lt;BR/&gt;&lt;BR/&gt;مثل مقدار  EWX_FORCE توي تابع ExitWindowsEx  عمل ميكنه يعني اگه ازش استفاده كنين ويندوز برنامه ها رو مجبور به بستن ميكنه.&lt;BR/&gt;حالا ما براي Shut Down كردن بايد اين فايل رو با پارامتر ها باز كنيم.از تابع Shell  استفاده ميكنيم :&lt;BR/&gt;2  تا دكمه يكي cmdShutDown  و يكي ديگه  cmdAbort  درست كنين :&lt;BR/&gt;&lt;BR/&gt;Private Sub cmdShutDown_Click()&lt;BR/&gt;Shell &amp;quot;Shutdown.exe  -r –t 30 –f –c &amp;quot; &amp;amp; &amp;quot;&amp;quot;&amp;quot;&amp;quot;  &amp;amp;  &amp;quot;This is a comment&amp;quot; &amp;amp; &amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;BR/&gt;End Sub&lt;BR/&gt;Private Sub cmdAbort_Click()&lt;BR/&gt;Shell &amp;quot;Shutdown.exe –a&amp;quot;&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;وقتي دكمه cmdShutDown  رو بزنين يه پنجره مثل پنجره اي كه عكسش رو گذاشتم ظاهر ميشه و شمارش معكوس از 30 شروع ميشه.اگه به 30 برسه ويندوز رستارت ميشه.اگه دكمه cmdAbort  رو بزنين پنجره ي Shut Down بسته ميشه.&lt;BR/&gt;حالا يه كد واسه رستارت در همون لحظه :&lt;BR/&gt;&lt;BR/&gt;Private Sub cmdShutDown_Click()&lt;BR/&gt;If MsgBox(&amp;quot;Are you sure? &amp;quot;,VbCritical + VbYesNo) = VbYes Then&lt;BR/&gt;Shell &amp;quot;ShutDown.exe –r –f –t 0&amp;quot;&lt;BR/&gt;End If&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;***********************&lt;BR/&gt;طبق روال چند تا تابع و روش كار با اونارو آموزش ميدم.&lt;BR/&gt;&lt;BR/&gt;1.AnimateWindow&lt;BR/&gt;اين تابع رو بايد در حالتي كه يه پنجره هنوز رسم نشده(يا  Hide  هست و ...) و  يا قبل از  پنهان شدن هست بايد فراخواني كرد&lt;BR/&gt;بعد از فراخواني تابع پنجره در حالتهاي مختلف به صورت انيميت رسم ميشه يا پنهان ميشه.مثلا از سمت چپ طولش افزايش پيدا ميكنه تا كاملا رسم بشه.اين تابع توي  API Viewer نيست:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function AnimateWindow Lib &amp;quot;user32&amp;quot; (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Boolean&lt;BR/&gt;&lt;BR/&gt;ثابت هاي مورد نياز:&lt;BR/&gt;&lt;BR/&gt;Const AW_HOR_POSITIVE = &amp;amp;H1&lt;BR/&gt;Const AW_HOR_NEGATIVE = &amp;amp;H2&lt;BR/&gt;Const AW_VER_POSITIVE = &amp;amp;H4&lt;BR/&gt;Const AW_VER_NEGATIVE = &amp;amp;H8&lt;BR/&gt;Const AW_CENTER = &amp;amp;H10&lt;BR/&gt;Const AW_HIDE = &amp;amp;H10000&lt;BR/&gt;Const AW_ACTIVATE = &amp;amp;H20000&lt;BR/&gt;Const AW_SLIDE = &amp;amp;H40000&lt;BR/&gt;Const AW_BLEND = &amp;amp;H80000&lt;BR/&gt;&lt;BR/&gt;اين تابع 3 تا مقدار به صورت  byVal ميگيره.اول هندل پنجره مورد نظر.دومي زماني كه ميخواهيم عمل رسم انجام بشه سومي هم روش رسم هست كه بايد ثابت ها را به اين بديم.بعضي از مقادير (آخر) رو ميشه از طريق Or  با هم استفاده كرد. &lt;BR/&gt;موقتي كه ميخواهيم يك پنجره از حالت رسم شده به حالت پنهان بره بايد مقدار AW_HIDE رو هم به پارامتر آخر (با استفاده از Or) اضافه كنيد.كارهايي كه اين ثابت ها ميكنن:&lt;BR/&gt;&lt;BR/&gt;AW_HOR_POSITIVE پنجره از چپ به راست رسم يا پاك ميشه&lt;BR/&gt;AW_HOR_POSITIVE پنجره از راست به چپ رسم يا پاك ميشه&lt;BR/&gt;AW_VER_POSITIVE پنجره از بالا به پايين رسم يا پاك ميشه &lt;BR/&gt;AW_VER_NEGATIVE پنجره از پايين به بالا رسم يا پاك ميشه&lt;BR/&gt;AW_CENTER پنجره از مركز باز ميشه يا بالعكس&lt;BR/&gt;AW_ACTIVATE پنجره رو فعال ميكنه&lt;BR/&gt;&lt;BR/&gt;بقيه رو هم درست نفهميدم شما هم امتحان كنين.&lt;BR/&gt;يه مثال ميزنم.2 تا  دكمه داخل فرم  درست كنين و كد زير رو وارد كنين:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function AnimateWindow Lib &amp;quot;user32&amp;quot; (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Boolean&lt;BR/&gt;Const AW_HOR_POSITIVE = &amp;amp;H1&lt;BR/&gt;Const AW_HOR_NEGATIVE = &amp;amp;H2&lt;BR/&gt;Const AW_VER_POSITIVE = &amp;amp;H4&lt;BR/&gt;Const AW_VER_NEGATIVE = &amp;amp;H8&lt;BR/&gt;Const AW_CENTER = &amp;amp;H10&lt;BR/&gt;Const AW_HIDE = &amp;amp;H10000&lt;BR/&gt;Const AW_ACTIVATE = &amp;amp;H20000&lt;BR/&gt;Const AW_SLIDE = &amp;amp;H40000&lt;BR/&gt;Const AW_BLEND = &amp;amp;H80000&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;Me.BackColor = vbBlue&lt;BR/&gt;AnimateWindow Me.hwnd, 1000, AW_HOR_POSITIVE Or AW_VER_NEGATIVE&lt;BR/&gt;Me.Cls&lt;BR/&gt;End Sub&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;If Command2.Visible = True Then&lt;BR/&gt;AnimateWindow Command2.hwnd, 1000, AW_CENTER Or AW_HIDE: Command2.Visible = False&lt;BR/&gt;Else&lt;BR/&gt;AnimateWindow Command2.hwnd, 1000, AW_CENTER: Command2.Visible = True&lt;BR/&gt;End If&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;براي اينكه بعد از رسم  تغيير رنگ هاي(احتمالي) ايجاد شده از بين بره(صفحه پاك بشه) از  Me.Cls استفاده كردم.&lt;BR/&gt;اين رو هم بگم كه در زماني كه تابع داره كارشو ميكنه برنامه كار ديگه اي نميتونه بكنه.در ضمن رنگ زمينه رو عوض كردم تا تغيير اندازه دكمه مشخص بشه.ديگه فكر نكنم توضيحي بخواد.&lt;BR/&gt;&lt;BR/&gt;2.GetBkColor : اين تابع  BackColor  يا رنگ زمينه پنجره اي كه   hDC  ش رو بش داديم برميگردونه:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetBkColor Lib &amp;quot;gdi32&amp;quot; Alias &amp;quot;GetBkColor&amp;quot; (ByVal hdc As Long) As Long&lt;BR/&gt;&lt;BR/&gt;براي مثال  Hdc فرم خودمون رو بش ميديم و مقدار بازگشتيشو با  BACKcOLOR فرممون مقايسه ميكنيم(1 دكمه توي فرم بزارين):&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetBkColor Lib &amp;quot;gdi32&amp;quot; Alias &amp;quot;GetBkColor&amp;quot; (ByVal hdc As Long) As Long&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;Me.BackColor=VbBlue&lt;BR/&gt;End sub&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;Dim BKcolor as Long&lt;BR/&gt;BKcolor = GetBkColor(Me.hdc)&lt;BR/&gt;If BKcolor = Me.BackColor Then&lt;BR/&gt;Msgbox &amp;quot;Good!&amp;quot;,vbinformation&lt;BR/&gt;Else&lt;BR/&gt;Msgbox &amp;quot;Wrong!!&amp;quot;,vbCritical&lt;BR/&gt;End If&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;توجه كنين كه من در Private Sub Form_Load() رنگ زمينه فرم رو از حالت پيشفرض خارج كردم و يه رنگ معمولي بش دادم اين به اين دليل بود كه فرم در حالت پيشفرض داراي رنگ زمينه  VbFaceButton  (يه رنگ سيستمي) هست و براي همين هم خصوصيت   Me.BackColor بجاي اينكه رنگ زمينه واقعي رو برگردونه يه چيز ديگه برميگردونه.&lt;BR/&gt;&lt;BR/&gt;3. GetSystemDirectory &lt;BR/&gt;اين تابع براي گرفتن آدرس پوشه سيستم بكار ميره مثلا در ويندوز 98 اگه ويندوز در درايو C نصب شده باشه محل اغلبا&amp;quot;&lt;BR/&gt;C:\Windows\System  هست.&lt;BR/&gt;اين تابع به اين صورته:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetSystemDirectory Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetSystemDirectoryA&amp;quot; (ByVal lpBuffer As String, ByVal nSize As Long) As Long&lt;BR/&gt;&lt;BR/&gt;مقدار اول يه متغير از نوع  String  هست كه بايد به تابع بديم تا مسير رو توي اون قرار بده.و دومي رو 255 قرار بدين.اين مقدار&lt;BR/&gt; نشون ميده كه تابع حداكثر چند كاراكتر اول مسير رو برگردونه.چون طول اين مسير به ندرت 255  ميشه ما اين عدد رو بش ميديم.يه نكته رو توجه كنين كه اين تابع مقدار 255 كاراكتر(كه خودمون مشخص كرديم) رو داخل متغييري  كه بش داديم قرار ميده كه كاراكتر هاي اول رو مسير پوشه سيستم و بقيه رو با كاراكتر 0 پر ميكنه.بنابراين ما بايد طور متغير كه در عادي 0 هست رو به 255 تغيير بديم و گرنه چون تابع ميخواد مقدار رو درون تابع جا بده و تابع جا نداره(طولش 0 هستش) اشكال ايجاد ميشه و برنامه ما بسته ميشه.همن اين ها به اين علت هستش كه تابع طول متغير ما رو تغيير نميده(ولي در خود ويبي اگر يه مقداري رو به يه متغير از نوع String   بديم طول متغيير خودكار اضافه ميشه.)&lt;BR/&gt;براي اينكه ما طول متغير رو براي اين تابع به مقدار 255 كاراكتر تغيير بديم 2 كار ميتونيم بكنيم.يكي از اين روشه:&lt;BR/&gt;Dim sysPath as string * 255&lt;BR/&gt;توي اين روش طول متغير با استفاده از 255 كاراكتر تغيير ميكنه.(با استفاده از كاراكتر 0‌)&lt;BR/&gt;يا اينكه يه مقدار  با طول 255 به متغيير ميديم:&lt;BR/&gt;&lt;BR/&gt;Dim sysPath as String&lt;BR/&gt;sysPath = String(255,&amp;quot; &amp;quot;)&lt;BR/&gt;&lt;BR/&gt;حالا تابع رو فراخواني ميكنيم:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetSystemDirectory Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetSystemDirectoryA&amp;quot; (ByVal lpBuffer As String, ByVal nSize As Long) As Long&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;Dim sysPath as String * 255  &lt;BR/&gt;GetSystemDirectory sysPath,255&lt;BR/&gt;Msgbox Replace(sysPath,chr(0),&amp;quot;&amp;quot;)&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;در خط يكي مونده به آخر با استفاده از تابع  Replace مقدار كاراكتر 0 اضافي كه با تابع داده شده حذف ميشه.&lt;BR/&gt;3.GetWindowsDirectory &lt;BR/&gt;اين تابع مسير پوشه ويندوز رو برميگردونه و روش كار باش مشابه قبلي هست :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetWindowsDirectory Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetWindowsDirectoryA&amp;quot; (ByVal lpBuffer As String, ByVal nSize As Long) As Long&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;Dim winPath as String * 255  &lt;BR/&gt;GetWindowsDirectory winPath,255&lt;BR/&gt;Msgbox Replace(winPath,chr(0),&amp;quot;&amp;quot;)&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;۴. GetTempPath&lt;BR/&gt;اين تابع هم مسير پوشه  Temp  رو به ما ميده و يه فرق كوچيك با قبليه داره . جاي آرگومان هاش عوض شده:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetTempPath Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetTempPathA&amp;quot; (ByVal nSize As Long,ByVal pBuffer As String) As Long&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;Dim tmpPath as String * 255  &lt;BR/&gt;GetTempPath 255,tmpPath&lt;BR/&gt;Msgbox Replace(tmpPath,chr(0),&amp;quot;&amp;quot;)&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;5.SetForegroundWindow اين تابع هندل يم پنجره رو ميگيره و اونو فعال ميكنه:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function SetForegroundWindow Lib &amp;quot;user32&amp;quot; Alias &amp;quot;SetForegroundWindow&amp;quot; (ByVal hwnd As Long) As Long&lt;BR/&gt;&lt;BR/&gt;با استفاده از تابع  GetCursorPos مكان موس رو ميگيريم و با استفاده از از تابع  WindowFromPoint بوسيله مختصات هندل رو ميگيريم و  به تابع ميديم(يه تايمر توي فرم بزارين):&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetCursorPos Lib &amp;quot;user32&amp;quot; (lpPoint As POINTAPI) As Long&lt;BR/&gt;Private Declare Function WindowFromPoint Lib &amp;quot;user32&amp;quot; (ByVal xPoint As Long, ByVal yPoint As Long) As Long&lt;BR/&gt;Private Declare Function SetForegroundWindow Lib &amp;quot;user32&amp;quot; Alias &amp;quot;SetForegroundWindow&amp;quot; (ByVal hwnd As Long) As Long&lt;BR/&gt;Private Type POINTAPI&lt;BR/&gt;        x As Long&lt;BR/&gt;        y As Long&lt;BR/&gt;End Type&lt;BR/&gt;Dim PAPI As POINTAPI,phWnd as long &lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;Timer1.Interval = 100&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Private Sub Timer1_Timer()&lt;BR/&gt;GetCursorPos PAPI&lt;BR/&gt;phWnd = WindowFromPoint(PAPI.x, PAPI.y)&lt;BR/&gt;SetForeGroundWindow phWnd&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;**********************&lt;BR/&gt;۱.تابع  PlaySound&lt;BR/&gt;این تابع واسه پخش کردن یه فایل با فرمت wav  از توی speaker  هاست.آرگومان اول آدرس فایل و دومی و سومی باید 1 باشه.یه دکمه توی فرم بزارین و کد زیر رو وارد کنین:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function PlaySound Lib &amp;quot;winmm.dll&amp;quot; Alias &amp;quot;PlaySoundA&amp;quot; (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;PlaySound &amp;quot;D:\File.wav&amp;quot;,1,1&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;که باید به جای  D:\File.wav آدرس یه فایل با پسوند wav بزارین.&lt;BR/&gt;&lt;BR/&gt;2.GetClassName&lt;BR/&gt;این تابع هندل یه پنجره رو میگیره و ClassName ش رو برمیردونه.آرگومان اول هندل پنجره.آرگومان دوم یه متغیر که نام کلاس توش قرار میگیره طول این متغییر باید تعیین شده باشه.سومی هم یه عدد مثل  n که وقتی به تابع داده میشه تابع  n-1  کاراکتر اول نام کلاس رو داخل متغییر قرار میده.(البته مطمین نستم شایدم n کاراکتر اول رو برگردونه.خودم  امتحان کردم  n-1 کاراکتر اول رو قرار داد)این عدد رو 255 قرار بدین خیال خودتونو راحت کنین.&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetClassName Lib &amp;quot;user32&amp;quot; Alias &amp;quot;GetClassNameA&amp;quot; (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long &lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;Dim ipCName as String * 255&lt;BR/&gt;GetClassname Me.hWnd,ipCName,255&lt;BR/&gt;Msgbox Replace(ipCName,chr(0),&amp;quot;&amp;quot;)&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;واسه توضیح در مورد طول متغیر و چرا اینطوریش کردیم به آموزش تابع  GetSystemDirectory  سر بزنین.&lt;BR/&gt;&lt;BR/&gt;3. GetAsyncKeyState&lt;BR/&gt;با این تابع میتونین بفهمین که قبل از فراخوانی تابع آیا یه کلید فشرده شده یه نه.آرگومانی که تابع میگیره کلیدی که مورد نظرمون هست رو مشخص میکنه.برای مثال&lt;BR/&gt;&lt;BR/&gt; Private Const VK_LEFT = &amp;amp;H25&lt;BR/&gt;&lt;BR/&gt;مربوط به کلید چپ هست.کلیه مقدار ها رو میتونین توی  API Viewer  پیدا کینین.مقدار برگشتی تابع مشخص میکنه که کلید مور د نظر فشرده شده یا نه .یه دکمه توی فرم بزارین:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetAsyncKeyState Lib &amp;quot;user32&amp;quot; (ByVal vKey As Long) As Integer&lt;BR/&gt;Private Const VK_LEFT = &amp;amp;H25 &lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;If GetAsyncKeyState(VK_LEFT) Then&lt;BR/&gt;Print &amp;quot;&amp;lt;--&amp;quot;&lt;BR/&gt;End if&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;در ضمن اگه شما مقدار  &amp;amp;H8000 رو هم توی شرط  If بزارین عمل چاپ فقط در صورتی که اجرا میشه که کلید چپ در زمان فشره شدن دکمه فشرده شده باشه نه قبلش.&lt;BR/&gt;البته در حالت اول برای یک بار فشردن دکمه چپ فقط یک بار عمل چاپ با فشردن دکمه انجام میشه.امتحان کنین تا منظورمو بفهمین.&lt;BR/&gt;&lt;BR/&gt;4.LoadCursorFromFile&lt;BR/&gt;این تابع اشاره گر یه فایل کرسر (.cur) رو به مامیده که ازش میشه توی تابع SetSystemCursor  استفاده کرد.مثالش رو توی تابع بعدی ببینین.&lt;BR/&gt;&lt;BR/&gt;Private Declare Function LoadCursorFromFile Lib &amp;quot;user32&amp;quot; Alias &amp;quot;LoadCursorFromFileA&amp;quot; (ByVal lpFileName As String) As Long&lt;BR/&gt;&lt;BR/&gt;5. SetSystemCursor&lt;BR/&gt;با این تابع میشه کرسر سیستم رو تعیین کرد.این تابع اول  یه اشاره گر از کرسر مورد نظر ما میخواد که ما این رو با استفاده از تابع LoadCursorFromFile میگیریم آرگوما دوم رو هم   Private Const OCR_NORMAL = 32512 قرار  بدین(مقدار های دیگه رو میتونین توی API Viewer ببینین).یه دکمه توی فرم بزارین:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function SetSystemCursor Lib &amp;quot;user32&amp;quot; Alias &amp;quot;SetSystemCursor&amp;quot; (ByVal hcur As Long, ByVal id As Long) As Long&lt;BR/&gt;Private Declare Function LoadCursorFromFile Lib &amp;quot;user32&amp;quot; Alias &amp;quot;LoadCursorFromFileA&amp;quot; (ByVal lpFileName As String) As Long&lt;BR/&gt;Private Const OCR_NORMAL = 32512 &lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;Dim hc as long&lt;BR/&gt;hc = LoadCursorFromFile(&amp;quot;D:\c.cur&amp;quot;)&lt;BR/&gt;SetSystemCursor hc,32512&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;فایلهای  با پسوند .cur  که با ویژوال بیسیک نصب شدن رو توی شاخه …\COMMON\GRAPHICS\CURSORS   پیدا کنین.به امید دیدار.&lt;BR/&gt;&lt;BR/&gt;************************&lt;BR/&gt;1.SetWindowPos&lt;BR/&gt;این تابع واسه تغییر مکان و تغییر اندازه Window ها بکار میره و چند تا کاره دیگه هم میکنه:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function SetWindowPos Lib &amp;quot;user32&amp;quot; Alias &amp;quot;SetWindowPos&amp;quot; (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&lt;BR/&gt;&lt;BR/&gt;مقدار اولی که میگیره هندل پنجره  هستش.دومی طرز قرار گیفتن پنجره  در محور   z هستش.مثلا بالاتر از پنجره های دیگه قرار بگیره یا پایین تر و ... .مقدار هایی که این میگیره:&lt;BR/&gt;&lt;BR/&gt;Private Const HWND_BOTTOM = 1&lt;BR/&gt;Private Const HWND_BROADCAST = &amp;amp;HFFFF&amp;amp;&lt;BR/&gt;Private Const HWND_DESKTOP = 0&lt;BR/&gt;Private Const HWND_NOTOPMOST = -2&lt;BR/&gt;Private Const HWND_TOP = 0&lt;BR/&gt;Private Const HWND_TOPMOST = -1&lt;BR/&gt;&lt;BR/&gt;هر کدوم  از اینارو بزارین ببینین چی میشه . مثلا topmost  بالای پنجره های دیگه جتی اونایی که از قبل &lt;BR/&gt; Top بودن قرار میگیره.&lt;BR/&gt;&lt;BR/&gt;مقدار سومی و چهارم  هم x   و y  مختصات  پنجره هستش که نسبت به پنجره  parent (مادر) ش هستش به طوری که بالا و سمت چپ  پنجره ء مادر نقطه  (0 ، 0 ) حساب میشه.مقدار بعدی هم عرض و طول پنجره مورد نظر هستش.&lt;BR/&gt;حالا اگه نخواهیم  همه این خصوصیات پنجره رو تغییر بدیم نمیشه مثل ویبی اونا رو مقدار دهی نکنیم.بعضی از مواقع میشه از Byval 0&amp;amp;  استفاده کرد اما در مورد این تابع واسه اینکه نخواهیم همه خصوصیاتش رو تغییر بدیم باید آرگومان آخر رو  مقدار دهی کنیم.بعضی از مقدار هایی که این میگیره : &lt;BR/&gt;&lt;BR/&gt;Private Const SWP_NOMOVE = &amp;amp;H2               پنچره تغییر مکان نمیده&lt;BR/&gt;Private Const SWP_NOACTIVATE = &amp;amp;H10        پنجره فعال نمیشه &lt;BR/&gt;Private Const SWP_NOSIZE = &amp;amp;H1                  پنجره تغییر اندازه  نمیده&lt;BR/&gt;Private Const SWP_NOZORDER = &amp;amp;H4           جای  پنجره در محور z  عوض نمیشه&lt;BR/&gt;Private Const SWP_NOREDRAW = &amp;amp;H8           پنجره دوباره رسم نمیشه&lt;BR/&gt;&lt;BR/&gt;یه تایمر و یه دکمه توی فرم بزارین و کد زیر رو وارد کنین:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function SetWindowPos Lib &amp;quot;user32&amp;quot; (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&lt;BR/&gt;Private Const SWP_NOSIZE = &amp;amp;H1&lt;BR/&gt;Private Const SWP_NOZORDER = &amp;amp;H4&lt;BR/&gt;Dim x As Integer, y As Integer &lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Paint()&lt;BR/&gt;Command1.SetFocus&lt;BR/&gt;Timer1.Interval = 100&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Private Sub timer1_timer()&lt;BR/&gt;x = Int(800 * Rnd())&lt;BR/&gt;y = Int(600 * Rnd())&lt;BR/&gt;SetWindowPos Me.hwnd, 0, x, y, 0, 0, SWP_NOSIZE Or SWP_NOZORDER&lt;BR/&gt;End Sub&lt;BR/&gt;Private Sub command1_click()&lt;BR/&gt;Unload Me&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;اول focus  رو به دکمه میدیم بعد .Interval مربوط  به تایمر رو مقدار دهی میکنیم.توی Private Sub timer1_timer  هم یه x  و y&lt;BR/&gt;به طور تصادفی بدست میاریم توی خط بعد هم با استفاده از تابع مورد نظر  پنجره رو حرکت میدیم.&lt;BR/&gt;حالا بعد از اجرا کردن برنامه کلید  اینتر رو که بزنین برنامه بسته میشه.&lt;BR/&gt;&lt;BR/&gt;2.CreateDirectory&lt;BR/&gt;این تابع واسه ساختن  Folder  بکار میره : &lt;BR/&gt;&lt;BR/&gt;Private Declare Function CreateDirectory Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;CreateDirectoryA&amp;quot; (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول مسر پوشه ای که میخواهیم بسازیم هستش&lt;BR/&gt;دومی  هم یه متغییر از نوع  SECURITY_ATTRIBUTES  که نیازی به مقدار دهی کردنش هم نیست &lt;BR/&gt;&lt;BR/&gt;Private Type SECURITY_ATTRIBUTES&lt;BR/&gt;        nLength As Long&lt;BR/&gt;        lpSecurityDescriptor As Long&lt;BR/&gt;        bInheritHandle As Long &lt;BR/&gt;End Type&lt;BR/&gt;&lt;BR/&gt;برای مثال : &lt;BR/&gt;&lt;BR/&gt;Private Declare Function CreateDirectory Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;CreateDirectoryA&amp;quot; (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long&lt;BR/&gt;Private Type SECURITY_ATTRIBUTES&lt;BR/&gt;        nLength As Long&lt;BR/&gt;        lpSecurityDescriptor As Long&lt;BR/&gt;        bInheritHandle As Long &lt;BR/&gt;End Type &lt;BR/&gt;&lt;BR/&gt;Dim SA as SECURITY_ATTRIBUTES&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;Createdirectory &amp;quot;D:\APItest&amp;quot;,SA&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;3.Sleep&lt;BR/&gt;این تابع برنامه ای که تابع توش فراخوانی شده رو توی زمانی که بش میدیم متوقف میکنه &lt;BR/&gt;آرگومانی که میگیره زمان مورد نظره که بر حسب میلی ثانیه هستش.&lt;BR/&gt;یه دکمه توی فرم بزارین :&lt;BR/&gt;&lt;BR/&gt;Private Declare Sub Sleep Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;Sleep&amp;quot; (ByVal dwMilliseconds As Long) &lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;Sleep 2000  &apos;2000 ms = 2 s&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;4.BlockInput&lt;BR/&gt;این تابع بعد از فراخوانیش موس و کیبرد رو قفل میکنه  یعنی دیگه کلید هایی که میزنین بر پنجره ها اثر نداره و موس رو که تکون میدین کرسرش حرکت نمیکنه:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function BlockInput Lib &amp;quot;user32&amp;quot; (ByVal fBlock As Long) As Long&lt;BR/&gt;&lt;BR/&gt;مقداری که میگیره اگه 0 باشه عمل قفل شدن متوقف میشه و اگه 1 باشه موس و کیبرد قفل میشه.اگه با این تابع موس و کیبرد رو قفل کردین یه فکری هم به فکر آزاد کردن موس و کیبرد باشین :&lt;BR/&gt;یه تایمر توی فرم بزارین : &lt;BR/&gt;&lt;BR/&gt;Private Declare Function BlockInput Lib &amp;quot;user32&amp;quot; (ByVal fBlock As Long) As Long &lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;Timer1.Interval = 5000&lt;BR/&gt;BlockInput True&lt;BR/&gt;End Sub&lt;BR/&gt;Private Sub Timer1_Timer()&lt;BR/&gt;BlockInput False&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;با این کد عمل قفل شدن 5 ثانیه طول میکشه.&lt;BR/&gt;&lt;BR/&gt;***********************&lt;BR/&gt;1.FlashWindow&lt;BR/&gt;&lt;BR/&gt;این تابع واسه آبی کردن و بعد به رنگ معمولی در آوردن (میشه گفت نور انداختن) عنوان و اسم یه (پنجره)فرم توی TaskBar  بکار میره .شاید منظورمو نفهمیده باشین.ازش استفاده کنین تا بفهمین:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function FlashWindow Lib &amp;quot;user32&amp;quot; Alias &amp;quot;FlashWindow&amp;quot; (ByVal hwnd As Long, ByVal bInvert As Long) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول هندل پنجره مورد نظر هست.&lt;BR/&gt;آرگومان دوم رو 1 قرار بدین (اگه صفر قرار بدین عمل  مورد نظر–اگر در حال انجام باشه- متوقف میشه)&lt;BR/&gt;یه دکمه  توی فرم بزارین:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function FlashWindow Lib &amp;quot;user32&amp;quot; Alias &amp;quot;FlashWindow&amp;quot; (ByVal hwnd As Long, ByVal bInvert As Long) As Long &lt;BR/&gt;&lt;BR/&gt;Private sub Command1_Click()&lt;BR/&gt;FlashWindow Me.hWnd , 1&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Delphi:&lt;BR/&gt;&lt;BR/&gt;procedure TForm1.Command1Click(Sender: TObject);&lt;BR/&gt;begin&lt;BR/&gt;FlashWindow(form1.Handle,true);&lt;BR/&gt;end;&lt;BR/&gt;&lt;BR/&gt;توی این کد  من هندل فرم برنامه خودم رو بش دادم.&lt;BR/&gt;&lt;BR/&gt;2.GetForeGroundWindow&lt;BR/&gt;این تابع هندل فرم فعال(که رنگ نوار عنوانش با بقیه فرق داره و معمولا آبیه) رو برمیگردونه:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetForegroundWindow Lib &amp;quot;user32&amp;quot; () As Long&lt;BR/&gt;&lt;BR/&gt;هیچ مقداری هم نیاز نیست بش بدیم.یه تایمر توی فرم بزارین و Interval ش رو 1 بزارین:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetForegroundWindow Lib &amp;quot;user32&amp;quot; () As Long&lt;BR/&gt;Private Sub Timer1_Timer()&lt;BR/&gt;Me.Caption = GetForegroundWindow()&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Delphi:&lt;BR/&gt;&lt;BR/&gt;procedure TForm1.Timer1Timer(Sender: TObject);&lt;BR/&gt;begin&lt;BR/&gt;Form1.Caption := IntToStr(GetForegroundWindow());&lt;BR/&gt;end;&lt;BR/&gt;&lt;BR/&gt;3.GetComputerName&lt;BR/&gt;&lt;BR/&gt;این تابع نام کامپیوتری که برنامه داره توش اجرا میشه رو برمیگردونه.این اسم رو میتونین توی قسمت&lt;BR/&gt; System Properties (راست کلیک روی My Computer  ؛ رفتن به Properties  ) توی قسمت Computer Name ببینین.&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetComputerName Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetComputerNameA&amp;quot; (ByVal lpBuffer As String, nSize As Long) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول یه متغیر هست که تابع نام مورد نظر رو توی این قرار میده و طولش باید از قبل تعیین شده باشه.آرگومان دوم هم مشخص میکنه که چند کاراکتر اول نام کامپیوتر توی متغیر قرار بگیره.این عدد باید با طور متغیر برابر باشه یا کوچکتر.بهتره جفتشون رو 255 قرار بدین.:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetComputerName Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetComputerNameA&amp;quot; (ByVal lpBuffer As String, nSize As Long) As Long &lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;Dim buffer As String * 255&lt;BR/&gt;GetComputerName buffer, 255&lt;BR/&gt;MsgBox &amp;quot;Computer name : &apos;&amp;quot; &amp;amp; Replace(buffer, Chr(0), &amp;quot;&amp;quot;) &amp;amp; &amp;quot;&apos;&amp;quot;&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Delphi:&lt;BR/&gt;&lt;BR/&gt;procedure TForm1.FormCreate(Sender: TObject);&lt;BR/&gt;var Buffer : Array[1..MAX_PATH] of char ;&lt;BR/&gt;var MAX_SIZE : Cardinal;&lt;BR/&gt;begin&lt;BR/&gt;MAX_SIZE := sizeof(buffer) -1 ;&lt;BR/&gt;GetComputerName(@buffer,MAX_SIZE)      ;&lt;BR/&gt;ShowMessage(&apos;Computer Name : &apos; + StrPas(@buffer));&lt;BR/&gt;end;&lt;BR/&gt;&lt;BR/&gt;4.GetCurrentDirectory&lt;BR/&gt;&lt;BR/&gt;این تابع آدرس پوشه ای که برنامه جاری توش داره اجرا میشه رو برمیگردونه.یعنی کار App.path  رو انجام میده: &lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetCurrentDirectory Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetCurrentDirectory&amp;quot; (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long&lt;BR/&gt;&lt;BR/&gt;روش مقدار دادن آرگومان هاش هم شبیه تابع قبلیه فقط جای اونا عوض شده یعنی آرگومان اول برای تعداد کاراکتر &lt;BR/&gt;اول و آرگومان دوم  یه متغییر واسه قرار دادن آدرس توی اون:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetCurrentDirectoryA Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetCurrentDirectory&amp;quot; (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long &lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;Dim buffer As String * 255&lt;BR/&gt;GetCurrentDirectoryA 255,Buffer&lt;BR/&gt;MsgBox &amp;quot;Current Directory : &apos;&amp;quot; &amp;amp; Replace(buffer, Chr(0), &amp;quot;&amp;quot;) &amp;amp; &amp;quot;&apos;&amp;quot;&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Delphi:&lt;BR/&gt;&lt;BR/&gt;procedure TForm1.FormCreate(Sender: TObject);&lt;BR/&gt;var buffer : array[1..MAX_PATH] of char;&lt;BR/&gt;begin&lt;BR/&gt;GetCurrentDirectoryA(sizeof(buffer),@buffer);&lt;BR/&gt;ShowMessage(&apos;Current Directory : &apos; + strpas(@buffer));&lt;BR/&gt;end;&lt;BR/&gt;&lt;BR/&gt;5.GetDoubleClickTime&lt;BR/&gt;این تابع هم زمان Double Click که توی کنترل پنل توی قسمت موس مشخص شده رو برمیگردوونه:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetDoubleClickTime Lib &amp;quot;user32&amp;quot; Alias &amp;quot;GetDoubleClickTime&amp;quot; () As Long&lt;BR/&gt;&lt;BR/&gt;هیچ مقداری هم نمیگیره:&lt;BR/&gt;Private Declare Function GetDoubleClickTime Lib &amp;quot;user32&amp;quot; Alias &amp;quot;GetDoubleClickTime&amp;quot; () As Long&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;Msgbox &amp;quot;DoubleClickTime : &amp;quot; &amp;amp; GetDoubleClickTime()&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Delphi:&lt;BR/&gt;&lt;BR/&gt;procedure TForm1.FormCreate(Sender: TObject);&lt;BR/&gt;begin&lt;BR/&gt;ShowMessage(&apos;DoubleClickTime : &apos; + IntToStr(GetDoubleClickTime()));&lt;BR/&gt;end;&lt;BR/&gt;&lt;BR/&gt;***************************&lt;BR/&gt;1.bitblt &lt;BR/&gt;این تابع واسه گرفتن عکس از یه window هستش.در واقع این تابع یه قسمت یا همه پیکسل های یه پنجره(مبدا) رو داخل یه پنجره دیگه (مقصد) کپی میکنه.ما میتونیم یه picture box که توی برناممون هستش رو مقصد قرار بدیم و بعد از قرار داده شدن تصویر پنجره مبدا توی مقصد با SavePicture عکسی که از پنجره مورد نظر گرفتیم رو ذخیره کنیم:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function BitBlt Lib &amp;quot;gdi32&amp;quot; (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول hDC ی پنجره مقصد هستش.دومی x جایی هستش که میخواهییم رسم شدن روی پنجره مقصد از اونجا شروع بشه&lt;BR/&gt;سومی هم y جاییه که گفتم.بعدی عرض نقطه ای هستش که میخواهیم عکس تا اونجا گرفته بشه.بعدی طول نقطه ای هستش که گفتم.بعدی hDC ی پنجره ی مقصده.بعدی x  نقطه ای هستش که میخواهیم عکس گرفتن از اونجا شروع بشه . بعدی هم y اون نقطه ای هستش که گفتم. آرگومان بعدی هم نوع عکس گرفتن رو نشون میده که مقدار های زیر رو میشه بهش بدیم:&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;Private Const SRCAND = &amp;amp;H8800C6 &lt;BR/&gt;Private Const SRCCOPY = &amp;amp;HCC0020&lt;BR/&gt;Private Const SRCERASE = &amp;amp;H440328&lt;BR/&gt;Private Const SRCINVERT = &amp;amp;H660046&lt;BR/&gt;Private Const SRCPAINT = &amp;amp;HEE0086&lt;BR/&gt;&lt;BR/&gt;به طور معمول  Private Const SRCCOPY = &amp;amp;HCC0020 رو بايد قرار بديم &lt;BR/&gt;یکی از کارهایی که میشه با این تابع کرد عکس گرفتن ازصقحه مانيتوره .یعنی ما با استفاده از تابع getdc ، hdc ی كل صفحه (چیزی که توی مانیتور داره نشون داده میشه) رو به تابع میدیم و با این کار یه عکس از چیزی که توی مانیتور داره نشون داده میشه عکس میگیریم.&lt;BR/&gt;یه دکمه و یه PictureBox توي فرم بزارين خصوصيت autoredraw ش رو true كنين و كد زير رو وارد كنين:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetDC Lib &amp;quot;user32&amp;quot; (ByVal hwnd As Long) As Long&lt;BR/&gt;Private Declare Function BitBlt Lib &amp;quot;gdi32&amp;quot; (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long&lt;BR/&gt;Private Const SRCCOPY = &amp;amp;HCC0020 &apos; (DWORD) dest = source&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;Picture1.Width = Screen.Width&lt;BR/&gt;Picture1.Height = Screen.Height&lt;BR/&gt;Me.Hide&lt;BR/&gt;BitBlt Picture1.hDC, 0, 0, Screen.Width / 15, Screen.Height / 15, GetDC(0), 0, 0, SRCCOPY&lt;BR/&gt;SavePicture Picture1.Image, &amp;quot;D:\test.bmp&amp;quot;&lt;BR/&gt;unload me&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;اول اندازه Picture Box رو برابر با اندازه صفحه مانیتور میکنیم تا بشه از کل صفحه مانیتور عکس گرفت.&lt;BR/&gt;بعد فرم رو پنهان میکنیم تا عکس خود فرم توی تصویر نیفته. بعد با تابعی که گفتم از صفحه عکس میگیریم.ارگومان اول که hdc ی   PictureBox  هستش.دومی و سومی رو 0 قرار دادم تا عکس از نقطه 0،0  یعنی از بالا و سمت چپ picturebox  شروم به رسم شدن بشه.سومی هم طول و عرض صفحه نمایش هست چون میخواهیم از همه صفحه عکس بگیریم.اونا رو بر 15 تقسیم کردم چون توی ویبی به طور پیشفرض این مقدار ها بر حسب twip به ما داده میشه ولی ما باید بر حسب پیکسل به تابع بدیم.بعدی رو هم که توضیح دادم.2 مقدار بعدی رو هم 0 قرار دادم چون میخوام عکس از نقطه 0و0 صفحه نمایش شروع که گرفتن بشه.بعد از اینکه عکس گرفته شد و توی picturebox قرار گرفت اون رو save میکنیم.بعد هم برنامه بسته میشه.&lt;BR/&gt;&lt;BR/&gt;2.StretchBlt&lt;BR/&gt;کار این تابع خیلی شبیه قبلی هستش ولی این تابع علاوه بر اینکه میتونه عکس بگیره عکس مورد نظر رو به نسبتی که بش میدیم میتونه کوچیک و یا بزرگ کنه:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function StretchBlt Lib &amp;quot;gdi32&amp;quot; (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long&lt;BR/&gt;&lt;BR/&gt;همونطور که میبینین 2 تا آرگومان دیگه اضافه شده&lt;BR/&gt;عکسی که گرفته میشه در نهایت طول و عرضش برابر nWidth و nHeight میشه و توی picturebox رسم میشه.یعنی اگه ما عکس رو از کل صفحه نمایش بگیریم و مقدار این 2 آرگومان رو نصف طول و عرض صفحه نمایش قرار بدیم چون عکس باید به این اندازه ها در بیاد  کل عکس به نسبت کوچک میشه در صورتی که توی تابع قبلی برای اینکه به این اندازه ها در بیاد فقط قسمتی از عکس نمایش داده میشد نه همش یعنی اونجا همه عکس رسم نمیشد ولی اینجا همه عکس نشون داده میشه ولی با اندازه متفاوت(بر عکس این حالت هم اگه 2 آرگومان رو 2 برابر صفحه نمایش مقاد دهی کنیم اتفاق میفته و عکس بزرگ میشه البته توی این حالت برای اینکه همه عکس رسم بشه باید اندازه PictureBox رو هم 2 برابر صفحه نمایش کنیم)&lt;BR/&gt;&lt;BR/&gt;حالا اگه نخواهیم از همه صفحه نمایش(یا کلا پنجره مورد نظر) عکس بگیریم به جای اینکه مثل تابع قبلی nWidth و nHeight  رو کم کنیم nSrcWidth و nSrcHeight رو کم میکنیم (باید به عرض و طولی که اول میدیم هم توجه کنین و اوا رو هم کم کنین و اگرنه کار درست انکام نمیشه) در غیر این صورت nSrcWidth و nSrcHeight رو برابر اندازه کل پنجره قرار میدیم .&lt;BR/&gt;شاید این توضیحایی که دادم یکم گیجتون کرده باشه و درست متوجه نشده باشین.خودتون که یکم با تابع کار کنین میفهمین چی میگم.&lt;BR/&gt;یه برنامه مینویسیم که عکس رو از صفحه نمایش بگیره ول اندازه اونو  2 برابر کنه و اونو ذخیره کنه.یه دکمه و یه PictureBox بزارین و  خصوصيت autoredraw ش رو true كنين :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetDC Lib &amp;quot;user32&amp;quot; (ByVal hwnd As Long) As Long&lt;BR/&gt;Private Declare Function StretchBlt Lib &amp;quot;gdi32&amp;quot; (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long&lt;BR/&gt;Private Const SRCCOPY = &amp;amp;HCC0020 &apos; (DWORD) dest = source&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;Picture1.AutoRedraw = True&lt;BR/&gt;Picture1.Width = Screen.Width * 2&lt;BR/&gt;Picture1.Height = Screen.Height * 2&lt;BR/&gt;Me.Hide&lt;BR/&gt;StretchBlt Picture1.hdc, 0, 0, Screen.Width / 7.5, Screen.Height / 7.5, GetDC(0), 0, 0, Screen.Width / 15, Screen.Height / 15, SRCCOPY&lt;BR/&gt;Me.Show&lt;BR/&gt;SavePicture Picture1.Image, &amp;quot;D:\test.bmp&amp;quot;&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;3.TextOut&lt;BR/&gt;این تابع واسه چاپ کردن یه متن روی یه پنجره بکار میره:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function TextOut Lib &amp;quot;gdi32&amp;quot; Alias &amp;quot;TextOutA&amp;quot; (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول hdc ی پنجره مورد نظره.دومی و سومی هم x و y ی مختصات نقطه ای هستش که مخواهیم متن چاپ بشه و اینجا نقطه 0 و 0 بالا سمت چپ پنجره مورد نظره بعدي هم متن مورد نظره بعدی .تعدد کاراکتری هستش که میخواهیم از متنی که به تابع دادیم از سمت چپ جدا بشه و چاب بشه که معمولا چون میخواهیم همه متن چاپ بشه باید این مقدار برار طول متن باشه.در ضمن متن با فونت و رنگ زمینه پنجره ای که hdc ش رو به تابع دادیم رسم میشه: &lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetDC Lib &amp;quot;user32&amp;quot; (ByVal hwnd As Long) As Long&lt;BR/&gt;Private Declare Function TextOut Lib &amp;quot;gdi32&amp;quot; Alias &amp;quot;TextOutA&amp;quot; (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;Dim strText As String, Cnt As Long&lt;BR/&gt;strText = &amp;quot;API : Application programming interface... |&amp;quot;&lt;BR/&gt;For Cnt = 0 To 2&lt;BR/&gt;TextOut GetDC(0), 20 * Cnt * 20, Screen.Height / 30, ByVal strText, Len(strText)&lt;BR/&gt;Next&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;4.این تابع هم کار تابع قبلی رو میکنه با این فرق که متن داخل یه محدوده چهار گوش شکل رسم میشه و میشه مشخص کرد با چه فرمتی(حالتی) این کار انجام بشه:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function DrawText Lib &amp;quot;user32&amp;quot; Alias &amp;quot;DrawTextA&amp;quot; (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان های اول و دوم و سوم رو قبلا توضیح دادم.چهارمی هم یه متغیر از نوع rect که محدوده چهار گوش رو مشخص میکنه.پنجمی هم نوع چاپ شده هستش که مقدار هایی مثل  این هارو میشه به تابع داد :&lt;BR/&gt;&lt;BR/&gt;Private Const DT_BOTTOM = &amp;amp;H8 متن در پایین محدوده rect چاپ میشه&lt;BR/&gt;Private Const DT_CENTER = &amp;amp;H1 متن در وسط محدوده rect چاپ میشه&lt;BR/&gt;Private Const DT_LEFT = &amp;amp;H0 متن در سمت چپ محدوده rect چاپ میشه&lt;BR/&gt;Private Const DT_RIGHT = &amp;amp;H2 متن سمت راست محدوده rect چاپ میشه&lt;BR/&gt;&lt;BR/&gt;به کد زیر توجه کنین:&lt;BR/&gt;&lt;BR/&gt;Private Type RECT&lt;BR/&gt;        Left As Long&lt;BR/&gt;        Top As Long&lt;BR/&gt;        Right As Long&lt;BR/&gt;        Bottom As Long&lt;BR/&gt;End Type&lt;BR/&gt;Private Declare Function GetDC Lib &amp;quot;user32&amp;quot; (ByVal hwnd As Long) As Long&lt;BR/&gt;Private Declare Function DrawText Lib &amp;quot;user32&amp;quot; Alias &amp;quot;DrawTextA&amp;quot; (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long&lt;BR/&gt;Private Const DT_CENTER = &amp;amp;H1&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;Dim strText As String, R As RECT&lt;BR/&gt;R.Bottom = 200&lt;BR/&gt;R.Top = 0&lt;BR/&gt;R.Left = 0&lt;BR/&gt;R.Right = Screen.Width / 15&lt;BR/&gt;strText = &amp;quot;Applicatrion Programming Interface&amp;quot;&lt;BR/&gt;DrawText GetDC(0), ByVal strText, Len(strText), R, &amp;amp;H1&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;توی این کد توی محدوده rect نقطه بالا و چپ 0 و 0 قرار داده شده (گوشه سمت چپ پنجره) و قسمت پایین rect 200 و سمت راست اون به اندازه عرض صفحه نمایش قرار داده شده&lt;BR/&gt;و فرمت هم Center (مرکز) قرار داده شده بنابراین وقتی تابع رو فرخوانی میکنیم y ی چیزی که چاپ شده 0 هستش و چون ما فرمت رو مرکز قرار دادیم x متنی که چاپ شده به اندازه نصف عرض صفحه نمایش هستش و وسطش چاپ میشه.&lt;BR/&gt;&lt;BR/&gt;5.ExtracIcon&lt;BR/&gt;&lt;BR/&gt;اين تابع يه اشاره گر از آیکونی که توی یه فایل (اغلبا .dll) قرار گرفته بر میگردونه که از با استفاده از این اشاره گر میشه تابع رو روی یه پنجره رسم کرد(و ذخیرش کرد) :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function ExtractIcon Lib &amp;quot;shell32.dll&amp;quot; Alias &amp;quot;ExtractIconA&amp;quot; (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول رو 0 قرار بدین.دومی آدرس فایل مورد نظره.سومی هم Index آیکونی هستش که توی فایل قرار گرفته.(آیکون هایی که به این صورت توی فایل ها قرار میگیرن دارای یه Index هستن) &lt;BR/&gt;یکسری از ایکون های ویندوز توی فایل [WinDrive]:\Windows\System\Shell32.dll قرار گرفتن &lt;BR/&gt;مثالش رو توی تابع بعد ببینین.&lt;BR/&gt;&lt;BR/&gt;6.Drawicon &lt;BR/&gt; این تابع hDc ی یه پنجره  و اشاره گر یه آیکون رو میگیره  و اون رو توی پنجره رسم میکنه:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function DrawIcon Lib &amp;quot;user32&amp;quot; Alias &amp;quot;DrawIcon&amp;quot; (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول hdc ی پنجره مقصد هستش.دومی X نقطه شروع رسم و بعدی Y اون نقطه هستش.بعدی هم اشاره گر آیکون مورد نظره.&lt;BR/&gt;ُخصوصیت AutoRedraw  فرم رو True کنین و کد زیر رو وارد کنین:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function DrawIcon Lib &amp;quot;user32&amp;quot; (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long&lt;BR/&gt;Private Declare Function ExtractIcon Lib &amp;quot;shell32.dll&amp;quot; Alias &amp;quot;ExtractIconA&amp;quot; (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long&lt;BR/&gt;Private Declare Function GetSystemDirectory Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetSystemDirectoryA&amp;quot; (ByVal lpBuffer As String, ByVal nSize As Long) As Long&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;Dim strpath As String, Buffer As String * 255, Cnt As Long&lt;BR/&gt;GetSystemDirectory Buffer, 255&lt;BR/&gt;strpath = Replace(Buffer, Chr(0), &amp;quot;&amp;quot;) &amp;amp; &amp;quot;\Shell32.dll&amp;quot;&lt;BR/&gt;&apos;///&lt;BR/&gt;Call DrawIcon(Me.hdc, 0, 0, ExtractIcon(0, ByVal strpath, 20))&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;اول با تابع getsystemdirectory محل پوشه سیستم و بعد محل فایل Shell32.dll رو پیدا میکنیم.بعد هم آیکونی که Index ش 20 هست رو روی فرم رسم میکنیم</description>
<pubDate>Fri, 23 Feb 2007 13:19:18 GMT</pubDate>
<comments>http://commenting.blogfa.com/?blogid=vblog&amp;postid=68</comments>
<dc:creator>vblog</dc:creator>
<guid>http://vblog.blogfa.com/post-68.aspx</guid>
</item>
<item>
<title>اموزش Visual Basic 6.0</title>
<link>http://vblog.blogfa.com/post-67.aspx</link>
<description>مقایسه VB و C++ از نظر سرعت ترجمه&lt;BR/&gt;شاید وقتی یک برنامه ی ساده که عملیات سنگینی نداره رو مینویسیم با مشکل سرعت اجرا مواجه نشیم.اما گاهی یکی از بزرگترین مشکل ها همین سرعت اجرا هستش.مثلا یک بازی کامپیوتری 3 بعدی به خاطر اینکه روون باشه و اصلا بشه باش بازی کرد باید تا اونجا که ممکنه سرعت اجرای کد رو بالا برد.&lt;BR/&gt;&lt;BR/&gt;میخوام یک کد ساده رو با VB و با سی بنویسم و کامپایل کنم و اختلاف زمان اجرای این کد روببینیم.&lt;BR/&gt;کارش ساده هستش.یه حلفه ی معمولی که 1000 بار تکرار میشه و هر بار 0.00001 به یک مقدار double اضافه میکنه.&lt;BR/&gt;&lt;BR/&gt;*** کد VB ***&lt;BR/&gt;Private Declare Function GetTickCount Lib &amp;quot;kernel32&amp;quot; () As Long&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;    Dim start_time As Long: start_time = GetTickCount()&lt;BR/&gt;    Dim i As Double: i = 0&lt;BR/&gt;    Do While (i &amp;lt; 1000)&lt;BR/&gt;        i = i + 0.00001&lt;BR/&gt;    Loop&lt;BR/&gt;    Dim op_time As Long: op_time = GetTickCount() - start_time&lt;BR/&gt;    MsgBox &amp;quot;Elapsed time : &amp;quot; &amp;amp; op_time &amp;amp; &amp;quot;ms&amp;quot;&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;*** كد C++ ***&lt;BR/&gt;#include &amp;quot;stdafx.h&amp;quot;&lt;BR/&gt;#include &amp;quot;windows.h&amp;quot;&lt;BR/&gt;#include &amp;quot;stdio.h&amp;quot;&lt;BR/&gt;#include &amp;quot;conio.h&amp;quot;&lt;BR/&gt;int main(int argc, char* argv[])&lt;BR/&gt;{&lt;BR/&gt; DWORD start_time = GetTickCount(); &lt;BR/&gt; double i=0; &lt;BR/&gt; while (i &amp;lt; 1000) {&lt;BR/&gt;  i += 0.00001;&lt;BR/&gt; }&lt;BR/&gt; DWORD op_time = GetTickCount() - start_time;&lt;BR/&gt; printf(&amp;quot;Elapsed time : %dms\n&amp;quot;,op_time);&lt;BR/&gt; getch();&lt;BR/&gt; return 0;&lt;BR/&gt;}&lt;BR/&gt;&lt;BR/&gt;نتایج :&lt;BR/&gt;C++ : 437 میلی ثانیه&lt;BR/&gt;VB : 2047 میلی ثانیه&lt;BR/&gt;یعنی یه چیزی بیشتر از 5 برابر توی این عملیات سرعت C++ بیشتر هستش.&lt;BR/&gt;&lt;BR/&gt;****************************************&lt;BR/&gt;ایا میدانید ...&lt;BR/&gt;تعداد خطوط برنامه نویسی شده در ویندوز 95 تعداد 11.2 میلیون خط بوده است در حالیكه در ویندوز ویستا ، حداقل 50 میلیون خط برنامه وجود دارد. برای تولید ویندوز 95 دقیقا 200 برنامه نویس مشغول به كار بودند و در ویندوز ویستا 2000 برنامه نویس به صورت همزمان مشغول به كار بوده‌اند.&lt;BR/&gt;&lt;BR/&gt;****************************************&lt;BR/&gt;برنامه نویسی API : ساخت یک Bitmap در حافظه و كار با آن&lt;BR/&gt;فرض كنين در VB يا مثلا در ++C ميخواهين يكسري عمليات گرافيكي مثل رسم خط ِاشكال مختلف و يا يك عكس و غيره رو انجام بدين و نتيجه رو روي پنجره ي اصلي نشون بدين.ميدونين هر پنجره يه  DC يا Device Context داره و با استفاده از هندل اون یعنی hDC ی پنجره ی اصلی میشه روش عملیات گرافیکی رو انجام داد که عملیات همزمان روی پنجره ظاهر میشن.ولی مساله اینه که اگه پنجره رو تکون بدیم و یا پنجره ی دیگه ای روی پنجره مون بیاد محتویات ما تا زمانی که دوباره رسم بشن پاک میشن.توی VB ما واسه رفع این مشکل میتونیم AutoRedraw ی فرممون رو True کنیم ولی در یک برنامه ی Win32 ی معمولی مثل++C یا اسمبلی این طور نیست.در ضمن شاید ما بخواههیم توی VB هم اول کلیه عملیاتمون رو انجام بدیم و بعد روی فرم رسمشون کنیم و یا اصلا چند جا واسه رسم داشته باشیم و هر موقع خواستیم یکدوم رو نشون بدیم.کاری که با استفاده مستقیم از hDC فرم امکان پذیر نیست.&lt;BR/&gt;حالا راه حل چیه؟&lt;BR/&gt;ما میاییم یه بخش از حافظه رو به عنوان جایی که میخواهیم عملیاتمون رو انجام بدیم در نظر میگیریم و هر چیزی میخواهیم توی اون ناحیه انجام میدیم و بعد نتیجه رو روی پنجره نمایش میدیم. تغییراتی که روی حافظه میدیم تا وقتی ما نخواهییم روی پنجره ی اصلی نمایش داده نمیشن.و هربار که مثلا با اومدن یک پنجره روی پنجرمون,محتویاتی که روی پنجره درج شده پاک شدن دوبار تصویر رو روی پنجره رسم میکنیم.در واقع ما از یک واسطه برای رسم روی پنجره استفاده میکنیم تا اطلاعات تصویر رو هیچوقت از دست ندیم.&lt;BR/&gt;خوب! حالا با چه کدی ؟&lt;BR/&gt; ما میخواهیم یک بخش از حافظه رو به عنوان یک Bitmap در نظر بگیریم و عملیات گرافیکی رو روش انجام بدیم.واسه اینکار از تابع CreateCompatibleBitmap استفاده میکنیم و یک Bitmap سازگار با پنجره ی مورد نظرمون درست میکنیم :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function CreateCompatibleBitmap Lib &amp;quot;gdi32&amp;quot; (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول hDC  ی پنجره ایه که میخواهیم رسم نهایی رو روش انجام بدیم.و آرگومان های بعدی هم طول و عرض Bitmap  مورد نظرمون هست.در واقع این تابع یک Bitmap با طول و عرض معین برای ما در حافظه درست میکنه و هندلش رو برگشت میده.&lt;BR/&gt;&lt;BR/&gt;مرحله ی بعدی اینکه که ما باید یکHandle  Device Context برای این بیت مپ داشته باشیم تا بتونیم از طریق اون عملیات رسم رو انجام بدیم.واسه ساختن اون از CreateCompatibleDC استفاده میکنیم :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function CreateCompatibleDC Lib &amp;quot;gdi32&amp;quot; (ByVal hdc As Long) As Long&lt;BR/&gt;&lt;BR/&gt;که آرگومان هم hDC  ی پنجره ی مورد نظره.&lt;BR/&gt;حالا باید Bitmap  ی که ساختیم رو به hDC  ی جدیدمون وصل کنیم.واسه این کار از SelectObject  استفاده میکنیم :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function SelectObject Lib &amp;quot;gdi32&amp;quot; (ByVal hdc As Long, ByVal hObject As Long) As Long&lt;BR/&gt;&lt;BR/&gt;در واقع با این کار هر گونه عملیاتی که روی hDC  ی جدید انجام بشه روی Bitmap  ما اعمال میشه.یادتون باشه بعد از هر Select  کردن, وقتی دیگه نیازی نبود از DeleteObject  استفاده میکنیم و ارتباط این 2 تا رو قطع و حافظه رو آزاد میکنیم :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function DeleteObject Lib &amp;quot;gdi32&amp;quot; (ByVal hObject As Long) As Long&lt;BR/&gt;&lt;BR/&gt;حالا بعد از Select  کردن میتونین هر عملیاتی مانند رسم خط,متن,مستطیل و ... رو روی hDC  ی جدید اعمال کنین و نتیجه روی Bitmap  ما اعمال میشه.در مورد این رسم ها بعدا توضیح میدم.&lt;BR/&gt;&lt;BR/&gt;بعد از اون فقط میمونه انتقال مداومBitmap  از حافظه روی صفحه ی پنجرمون بعد از هر تغییر توی پنجره.&lt;BR/&gt;توی یک W32 Application  توی C++  یا ASM  این کار رو توی Procedure  اصلی و با گرفتن پیغام WM_PAINT  باید انجام داد.البته بین 2 تابع BeginPaint  و EndPaint  : &lt;BR/&gt;&lt;BR/&gt;Private Declare Function BeginPaint Lib &amp;quot;user32&amp;quot; (ByVal hwnd As Long, lpPaint As PAINTSTRUCT) As Long&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;این تابع پنجره رو آماده ی رسم میکنه.آرگومان اول هندل پنجره و دومی یه متغیر از نوع PAINTSTRUCT که نیازی هم به مقدار دهیش نیست.خود تابع اون رو مقدار دهی میکنه و اطلاعات رسم رو توش قرار میده.&lt;BR/&gt;&lt;BR/&gt;Private Declare Function EndPaint Lib &amp;quot;user32&amp;quot; (ByVal hwnd As Long, lpPaint As PAINTSTRUCT) As Long&lt;BR/&gt;&lt;BR/&gt;این تابع  رو هم بعد از عملیات رسم فراخوانی میکنیم.آرگومان اول هندل پنجره و دومی هم همون متغیری که موقع فراخوانی BeginPaint  استفاده کردیم.&lt;BR/&gt;&lt;BR/&gt;ولی توی ویژوال بیسیک لازم به استفاده از این 2 تابع نیست فقط باید AutoRedraw  ی فرم False  باشه.&lt;BR/&gt;عملیات انتقال رو توی روال Form_Paint  انجام میدیم.در واقع بعد از هر تغییر توی محیط پنجره,روال Form_Paint  خود به خود فراخوانی میشه و ما دوباره Bitmap  رو از حافظه روی فرم کپی میکنیم تا تغییری توی چیزی که رسم کرده بودیم ایجاد نشه.&lt;BR/&gt;&lt;BR/&gt;واسه این کار از تابع هایی مثل BitBlt  , StrechBlt  و TransparetBlt  میشه استفاده کرد که ساده ترینشون BitBlt  هستش که قبلا در موردش گفتم,برای کپی کردن محتویات یک DC  روی یک  DC  ی دیگست.کاری که الان میخواهیم بکنیم. یعنی محتویات DC  ی جدیدمون که به Bitmap  ی که ساختیم متصل هست رو توی فرم کپی کنیم.&lt;BR/&gt;&lt;BR/&gt;این یک کد نمونه که کل کاری که تاحالا در موردش نوشتم رو انجام میده و یک Bitmap  خالی 100x100  رو که چون خالیه رنگش مشکیه رو روی فرم رسم میکنه.چون هنوز روش کار با تابع هایی واسه رسم اشکال و ... نگفتم اینجا هم چیزی رسم نمیشه و فقط یک صفحه ی سیاهه:&lt;BR/&gt;&lt;BR/&gt; &lt;BR/&gt;Private Declare Function CreateCompatibleBitmap Lib &amp;quot;gdi32&amp;quot; (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long&lt;BR/&gt;Private Declare Function CreateCompatibleDC Lib &amp;quot;gdi32&amp;quot; (ByVal hdc As Long) As Long&lt;BR/&gt;Private Declare Function BitBlt Lib &amp;quot;gdi32&amp;quot; (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long&lt;BR/&gt;Private Type PAINTSTRUCT&lt;BR/&gt;        hdc As Long&lt;BR/&gt;        fErase As Long&lt;BR/&gt;        rcPaint As RECT&lt;BR/&gt;        fRestore As Long&lt;BR/&gt;        fIncUpdate As Long&lt;BR/&gt;        rgbReserved(32) As Byte&lt;BR/&gt;End Type &lt;BR/&gt;&lt;BR/&gt;Private Declare Function SelectObject Lib &amp;quot;gdi32&amp;quot; (ByVal hdc As Long, ByVal hObject As Long) As Long&lt;BR/&gt;Private Declare Function DeleteObject Lib &amp;quot;gdi32&amp;quot; (ByVal hObject As Long) As Long&lt;BR/&gt;Private Declare Function DeleteDC Lib &amp;quot;gdi32&amp;quot; (ByVal hdc As Long) As Long&lt;BR/&gt;&lt;BR/&gt;Private Const SRCCOPY = &amp;amp;HCC0020 &apos; (DWORD) dest = source&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;Dim hCmpDC As Long, hBmp As Long&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;&lt;BR/&gt;    hCmpDC = CreateCompatibleDC(Me.hdc)&lt;BR/&gt;    hBmp = CreateCompatibleBitmap(Me.hdc, 100, 100)&lt;BR/&gt;    Call SelectObject(hCmpDC, hBmp)&lt;BR/&gt;    &lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Paint()&lt;BR/&gt;&lt;BR/&gt;    Dim ps As PAINTSTRUCT&lt;BR/&gt;    If (hCmpDC) Then&lt;BR/&gt;        Call BitBlt(Me.hdc, 0, 0, 100, 100, hCmpDC, 0, 0, SRCCOPY)&lt;BR/&gt;    End If&lt;BR/&gt;&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Unload(Cancel As Integer)&lt;BR/&gt;&lt;BR/&gt;    DeleteObject (hBmp)&lt;BR/&gt;    DeleteDC (hCmpDC)&lt;BR/&gt;    &lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;البته بهتره بعد از فراخوانی تابع های CreateCompatibleDC/Bitmap چک کنیم که اگه تابع ها با موفقیت کار نکردن برنامه رو متوقف یا مسیرش رو عوض کنیم. این رو از مقدار برگشتی میشه فهمید کافیه یه سر به MSDN بزنین &lt;BR/&gt;&lt;BR/&gt;***********************&lt;BR/&gt;ادامه امــــــــــــــــــــــــــــــــــــــــوزش&lt;BR/&gt;&lt;BR/&gt;الان میخوام کدی رو بگذارم که باهاش میشه اون Bitmap  رو توی یک فایل با فرمت .bmp ذخیره کرد.&lt;BR/&gt;&lt;BR/&gt;وقتی قبلا تابع BitBlt رو توضیح میدادم روش عکس گرفتن از صفحه ی نمایش(Screen Shot) رو توی ویبی و با استفاده از فرم گفتم.توی اون روش با این تابع اول محتویات صفحه ی نمایش توی فرم کپی میشد و بلافاصله با تابع داخلی ویبی یعنی SavePicture اون عکس توی فایل  ذخیره میشد.حالا میخواییم بدون استفاده از اون فرم و درواقع با Bitmap  ی که خودمون توی حافظه درست کردیم اون عکس رو بگیریم و save  کنیم.یه قسمت از کد مثل پست قبله با این فرق که دیگه ما اصلا با فرم کاری نداریم و با صفحه ی نمایش کار داریم واسه همین بجای اینکه فرم رو بستر قرار بدیم و از HDC  ش برای تابع CreateCompatableDC  استفاده کنیم ایندفه با تابع CreateDC  یک Device Context  درست میکنیم و ازش استفاده میکنیم و آخر سر هم  Delete ش میکنیم.برای ساختن یک Device Context  از صفحه ی نمایش و گرفتن یک هندل از اون کافیه آرگومان اول تابع(Driver Name) رو “DISPLAY”  قرار بدین و بقیه رو نال (Byval 0&amp;amp;) . بعد از اون با BitBlt  محتویات رو توی Bitmap  ی که ساختیم کپی میکنیم و اون رو توی فایل Save  میکنیم&lt;BR/&gt;&lt;BR/&gt;Private Const SRCCOPY = &amp;amp;HCC0020 &apos; (DWORD) dest = source &lt;BR/&gt;Private Const BI_bitfields = 3&amp;amp;&lt;BR/&gt; Private Const GENERIC_WRITE = &amp;amp;H40000000&lt;BR/&gt;Private Const CREATE_ALWAYS = 2&lt;BR/&gt;Private Const FILE_ATTRIBUTE_NORMAL = &amp;amp;H80&lt;BR/&gt;Private Const FILE_BEGIN = 0&lt;BR/&gt;Private Const FILE_CURRENT = 1&lt;BR/&gt;Private Const DIB_RGB_COLORS = 0 &apos;  color table in RGBs&lt;BR/&gt;&lt;BR/&gt;Private Type RGBQUAD&lt;BR/&gt;        rgbBlue As Byte&lt;BR/&gt;        rgbGreen As Byte&lt;BR/&gt;        rgbRed As Byte&lt;BR/&gt;        rgbReserved As Byte&lt;BR/&gt;End Type&lt;BR/&gt;&lt;BR/&gt;Private Type BITMAPFILEHEADER&lt;BR/&gt;        bfType As Integer&lt;BR/&gt;        bfSize As Long&lt;BR/&gt;        bfReserved1 As Integer&lt;BR/&gt;        bfReserved2 As Integer&lt;BR/&gt;        bfOffBits As Long&lt;BR/&gt;End Type&lt;BR/&gt;&lt;BR/&gt;Private Type BITMAPINFOHEADER &apos;40 bytes&lt;BR/&gt;        biSize As Long&lt;BR/&gt;        biWidth As Long&lt;BR/&gt;        biHeight As Long&lt;BR/&gt;        biPlanes As Integer&lt;BR/&gt;        biBitCount As Integer&lt;BR/&gt;        biCompression As Long&lt;BR/&gt;        biSizeImage As Long&lt;BR/&gt;        biXPelsPerMeter As Long&lt;BR/&gt;        biYPelsPerMeter As Long&lt;BR/&gt;        biClrUsed As Long&lt;BR/&gt;        biClrImportant As Long&lt;BR/&gt;End Type&lt;BR/&gt;&lt;BR/&gt;Private Type BITMAPINFO&lt;BR/&gt;        bmiHeader As BITMAPINFOHEADER&lt;BR/&gt;        bmiColors(256) As RGBQUAD&lt;BR/&gt;End Type&lt;BR/&gt;&lt;BR/&gt;Private Type SECURITY_ATTRIBUTES&lt;BR/&gt;        nLength As Long&lt;BR/&gt;        lpSecurityDescriptor As Long&lt;BR/&gt;        bInheritHandle As Long&lt;BR/&gt;End Type&lt;BR/&gt;&lt;BR/&gt; Private Declare Sub CopyMemory Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;RtlMoveMemory&amp;quot; (Destination As Any, Source As Any, ByVal Length As Long)&lt;BR/&gt;Private Declare Function GetDIBits Lib &amp;quot;gdi32&amp;quot; (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long&lt;BR/&gt;Private Declare Function CreateFile Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;CreateFileA&amp;quot; (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long&lt;BR/&gt;Private Declare Function CloseHandle Lib &amp;quot;kernel32&amp;quot; (ByVal hObject As Long) As Long&lt;BR/&gt;Private Declare Function SetFilePointer Lib &amp;quot;kernel32&amp;quot; (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long&lt;BR/&gt;Private Declare Function WriteFile Lib &amp;quot;kernel32&amp;quot; (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Long) As Long&lt;BR/&gt;Private Declare Function CreateCompatibleBitmap Lib &amp;quot;gdi32&amp;quot; (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long&lt;BR/&gt;Private Declare Function CreateCompatibleDC Lib &amp;quot;gdi32&amp;quot; (ByVal hdc As Long) As Long&lt;BR/&gt;Private Declare Function BitBlt Lib &amp;quot;gdi32&amp;quot; (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long&lt;BR/&gt;Private Declare Function SelectObject Lib &amp;quot;gdi32&amp;quot; (ByVal hdc As Long, ByVal hObject As Long) As Long&lt;BR/&gt;Private Declare Function DeleteObject Lib &amp;quot;gdi32&amp;quot; (ByVal hObject As Long) As Long&lt;BR/&gt;Private Declare Function DeleteDC Lib &amp;quot;gdi32&amp;quot; (ByVal hdc As Long) As Long&lt;BR/&gt;Private Declare Function CreateDC Lib &amp;quot;gdi32&amp;quot; Alias &amp;quot;CreateDCA&amp;quot; (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Any) As Long&lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;    Dim retval As Long&lt;BR/&gt;    retval = ScreenShot&lt;BR/&gt;    If (retval) Then&lt;BR/&gt;        MsgBox &amp;quot;Error (&amp;quot; &amp;amp; retval &amp;amp; &amp;quot;)&amp;quot;&lt;BR/&gt;    Else&lt;BR/&gt;        MsgBox &amp;quot;Succeed!&amp;quot;, vbInformation&lt;BR/&gt;    End If&lt;BR/&gt;    Unload Me&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Private Function ScreenShot()&lt;BR/&gt;     Dim scrWidth As Long, scrHeight As Long&lt;BR/&gt;    Dim hScreenDC As Long, hCmpDC As Long, hBmp As Long&lt;BR/&gt;    scrWidth = Screen.Width / 15&lt;BR/&gt;    scrHeight = Screen.Height / 15&lt;BR/&gt;    hScreenDC = CreateDC(&amp;quot;DISPLAY&amp;quot;, ByVal 0&amp;amp;, ByVal 0&amp;amp;, ByVal 0&amp;amp;)&lt;BR/&gt;    hCmpDC = CreateCompatibleDC(hScreenDC)&lt;BR/&gt;    hBmp = CreateCompatibleBitmap(hScreenDC, scrWidth, scrHeight)&lt;BR/&gt;    Call SelectObject(hCmpDC, hBmp)&lt;BR/&gt;    BitBlt hCmpDC, 0, 0, scrWidth, scrHeight, hScreenDC, 0, 0, SRCCOPY&lt;BR/&gt;    Call BitmapToFile(hBmp, hCmpDC, Screen.Height / 15, &amp;quot;d:\mm.bmp&amp;quot;)&lt;BR/&gt;    DeleteObject (hBmp)&lt;BR/&gt;    DeleteDC (hCmpDC)&lt;BR/&gt;    DeleteDC (hScreenDC)&lt;BR/&gt;  End Function&lt;BR/&gt;&lt;BR/&gt; Private Function BitmapToFile(hBmp As Long, hCmpDC As Long, nHeight As Long, FileName As String) As Long&lt;BR/&gt;          Dim BInfo As BITMAPINFO&lt;BR/&gt;    BInfo.bmiHeader.biSize = 40&lt;BR/&gt;       If (GetDIBits(hCmpDC, hBmp, 0, nHeight, ByVal 0&amp;amp;, BInfo, DIB_RGB_COLORS) = 0) Then&lt;BR/&gt;        BitmapToFile = 1&lt;BR/&gt;        Exit Function&lt;BR/&gt;    End If&lt;BR/&gt;    Dim BBits() As Byte&lt;BR/&gt;    ReDim BBits(0 To BInfo.bmiHeader.biSizeImage - 1) As Byte&lt;BR/&gt;    If (GetDIBits(hCmpDC, hBmp, 0, nHeight, BBits(0), BInfo, DIB_RGB_COLORS) = 0) Then&lt;BR/&gt;        BitmapToFile = 2&lt;BR/&gt;        Exit Function&lt;BR/&gt;    End If&lt;BR/&gt;    Dim BFheader As BITMAPFILEHEADER&lt;BR/&gt;    BFheader.bfType = 19778&lt;BR/&gt;    BFheader.bfReserved1 = 0&lt;BR/&gt;    BFheader.bfReserved2 = 0&lt;BR/&gt;    Dim hFile As Long: Dim SA As SECURITY_ATTRIBUTES&lt;BR/&gt;    hFile = CreateFile(FileName, GENERIC_WRITE, 0, SA, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, ByVal 0&amp;amp;)&lt;BR/&gt;    If (hFile = -1) Then&lt;BR/&gt;        BitmapToFile = 3&lt;BR/&gt;        Exit Function&lt;BR/&gt;    End If&lt;BR/&gt;    Dim bWritten As Long&lt;BR/&gt;       WriteFile hFile, BFheader, Len(BFheader), bWritten, ByVal 0&amp;amp;&lt;BR/&gt;    WriteFile hFile, BInfo.bmiHeader, 40, bWritten, ByVal 0&amp;amp;&lt;BR/&gt;   Dim nPalette As Long&lt;BR/&gt;   If (BInfo.bmiHeader.biClrUsed) Then&lt;BR/&gt;        nPalette = lbinfo.bmiHeader.biClrUsed&lt;BR/&gt;   Else&lt;BR/&gt;    If (BInfo.bmiHeader.biCompression = BI_bitfields) Then&lt;BR/&gt;        nPalette = 3&lt;BR/&gt;    Else&lt;BR/&gt;        nPalette = IIf(BInfo.bmiHeader.biBitCount &amp;lt;= 8, 2 ^ BInfo.bmiHeader.biBitCount, 0)&lt;BR/&gt;    End If&lt;BR/&gt;  End If&lt;BR/&gt;    If (nPalette) Then&lt;BR/&gt;        WriteFile hFile, BInfo.bmiColors(0), nPalette * 4, bWritten, ByVal 0&amp;amp;&lt;BR/&gt;    End If&lt;BR/&gt;    BFheader.bfOffBits = SetFilePointer(hFile, 0, 0, FILE_CURRENT)&lt;BR/&gt;    WriteFile hFile, BBits(0), BInfo.bmiHeader.biSizeImage, bWritten, ByVal 0&amp;amp;&lt;BR/&gt;    BFheader.bfSize = SetFilePointer(hFile, 0, 0, FILE_CURRENT)&lt;BR/&gt;    Call SetFilePointer(hFile, 0, 0, FILE_BEGIN)&lt;BR/&gt;    WriteFile hFile, BFheader.bfType, Len(BFheader.bfType), bWritten, ByVal 0&amp;amp;&lt;BR/&gt;    Call ReverseWriteLong(hFile, bWritten, BFheader.bfSize)&lt;BR/&gt;    WriteFile hFile, BFheader.bfReserved1, 2, bWritten, ByVal 0&amp;amp;&lt;BR/&gt;    WriteFile hFile, BFheader.bfReserved2, 2, bWritten, ByVal 0&amp;amp;&lt;BR/&gt;    Call ReverseWriteLong(hFile, bWritten, BFheader.bfOffBits)&lt;BR/&gt;closefile:&lt;BR/&gt;    CloseHandle (hFile)&lt;BR/&gt;    BitmapToFile = 0&lt;BR/&gt;End Function&lt;BR/&gt;&lt;BR/&gt;Private Sub ReverseWriteLong(hFile As Long, ByRef bWritten As Long, ByVal DWORD As Long)&lt;BR/&gt;    WriteFile hFile, loWord(DWORD), 2, bWritten, ByVal 0&amp;amp;&lt;BR/&gt;    WriteFile hFile, hiWord(DWORD), 2, bWritten, ByVal 0&amp;amp;&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt; Private Function hiWord(ByVal DWORD As Long) As Integer&lt;BR/&gt;    Dim hWord As Integer&lt;BR/&gt;    Call CopyMemory(hWord, ByVal (VarPtr(DWORD) + 2), 2)&lt;BR/&gt;    hiWord = hWord&lt;BR/&gt;End Function&lt;BR/&gt;&lt;BR/&gt;Private Function loWord(ByVal DWORD As Long) As Integer&lt;BR/&gt;    Dim lWord As Integer&lt;BR/&gt;    Call CopyMemory(lWord, ByVal (VarPtr(DWORD)), 2)&lt;BR/&gt;    loWord = lWord&lt;BR/&gt;End Function&lt;BR/&gt;&lt;BR/&gt;****************************&lt;BR/&gt;برنامه نویسی APi : كار با Joy Stice با API&lt;BR/&gt;	&lt;BR/&gt;اولين تابعي كه ميخوام در موردش توضيح بدم تابع joyGetNumDevs هستش : &lt;BR/&gt;&lt;BR/&gt;Private Declare Function joyGetNumDevs Lib &amp;quot;winmm.dll&amp;quot; () As Long&lt;BR/&gt;&lt;BR/&gt;كه تعداد جوي استيك هايي كه درايور ساپورت ميكنه رو برميگردونه.براي من 16 هستش.&lt;BR/&gt;براي بدست آوردن اطلاعات در مورد جوي استيك از تابع  joyGetDevCaps استفاده ميشه :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function joyGetDevCaps Lib &amp;quot;winmm.dll&amp;quot; Alias &amp;quot;joyGetDevCapsA&amp;quot; (ByVal id As Long, lpCaps As JOYCAPS, ByVal uSize As Long) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول آيدي جوي استيك هستش كه ميتونه يكي از اين 2 مقدار باشه :&lt;BR/&gt;&lt;BR/&gt;Private Const JOYSTICKID1 = 0&lt;BR/&gt;Private Const JOYSTICKID2 = 1&lt;BR/&gt;&lt;BR/&gt;آرگومان دومي متغيري از نوع JOYCAPS هستش كه مشخصات جوي استيك رو تابع درون اين قرار ميده:&lt;BR/&gt;&lt;BR/&gt;Private Type JOYCAPS&lt;BR/&gt;        wMid As Integer&lt;BR/&gt;&apos;مربوط به مايكروسافت ميشه MM_MICROSOFT آيدي توليدي كه جوي استيك رو توليد كرده مثلا &lt;BR/&gt;        wPid As Integer&lt;BR/&gt; &apos;آيدي محصول(جوي استيك)&lt;BR/&gt;        szPname As String * MAXPNAMELEN&lt;BR/&gt; &apos;اسم جوي استيك&lt;BR/&gt;        wXmin As Integer&lt;BR/&gt;        wXmax As Integer&lt;BR/&gt;        wYmin As Integer&lt;BR/&gt;        wYmax As Integer&lt;BR/&gt;        wZmin As Integer&lt;BR/&gt;        wZmax As Integer&lt;BR/&gt; &apos;x,y,z حداقل و حداكثر مختصات جوي استيك توي جهت هاي مختلف&lt;BR/&gt;        wNumButtons As Integer&lt;BR/&gt; &apos;تعداد دكمه هاي جوي استيك&lt;BR/&gt;        wPeriodMin As Integer&lt;BR/&gt;        wPeriodMax As Integer&lt;BR/&gt; &apos; (Polling frequency) حداقل و حداكثر تعداد پيغام هايي كه جوي استيك ميتونه توي 1 صدم ثانيه  به برنامه ارسال كنه&lt;BR/&gt;End Type&lt;BR/&gt;&lt;BR/&gt;البته اين ساختار چند تا متغير ديگه هم آخرش داره اما ايني كه من توي API Viewer ديدم نداشت منم ديگه بيخيال بقيش شدم...&lt;BR/&gt;&lt;BR/&gt;آرگومان بعدي هم طول اين متغير هستش.&lt;BR/&gt;مقدار برگشتي تابع هم نشون ميده كه درست كار كرده يا نه :&lt;BR/&gt;&lt;BR/&gt;JOYERR_NOERROR &apos;هيچ خطايي اتفاق نيفتاده&lt;BR/&gt;MMSYSERR_NODRIVER &apos;(:Pدرايور جوي استيك آماده نيست(اشكال از فرستندس&lt;BR/&gt;MMSYSERR_INVALPARAM &apos;پارامتر هايي كه به تابع ارسال شده مشكل دارن&lt;BR/&gt;&lt;BR/&gt;بعد از فراخواني تابع بايد برين سراغ متغيري كه به تابع ارسال شده و اطلاعات مورد نظر رو دريافت كنين:&lt;BR/&gt;&lt;BR/&gt;Option Explicit&lt;BR/&gt;Private Declare Function joyGetDevCaps Lib &amp;quot;winmm.dll&amp;quot; Alias &amp;quot;joyGetDevCapsA&amp;quot; (ByVal id As Long, lpCaps As JOYCAPS, ByVal uSize As Long) As Long&lt;BR/&gt;Private Declare Function joyGetNumDevs Lib &amp;quot;winmm.dll&amp;quot; () As Long&lt;BR/&gt;Private Const JOYSTICKID1 = 0&lt;BR/&gt;Private Const JOYSTICKID2 = 1&lt;BR/&gt;Private Const JOYERR_NOERROR = (0)  &apos;  no error&lt;BR/&gt;Private Const MMSYSERR_BASE = 0&lt;BR/&gt;Private Const MMSYSERR_INVALPARAM = (MMSYSERR_BASE + 11) &apos;  invalid parameter passed&lt;BR/&gt;Private Const MMSYSERR_NODRIVER = (MMSYSERR_BASE + 6)  &apos;  no device driver present&lt;BR/&gt;Private Const MAXPNAMELEN = 32  &apos;  max product name length (including NULL) &lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;Private Type JOYCAPS&lt;BR/&gt;        wMid As Integer&lt;BR/&gt;        wPid As Integer&lt;BR/&gt;        szPname As String * MAXPNAMELEN&lt;BR/&gt;        wXmin As Integer&lt;BR/&gt;        wXmax As Integer&lt;BR/&gt;        wYmin As Integer&lt;BR/&gt;        wYmax As Integer&lt;BR/&gt;        wZmin As Integer&lt;BR/&gt;        wZmax As Integer&lt;BR/&gt;        wNumButtons As Integer&lt;BR/&gt;        wPeriodMin As Integer&lt;BR/&gt;        wPeriodMax As Integer&lt;BR/&gt;End Type&lt;BR/&gt;Dim JC As JOYCAPS&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;    Me.AutoRedraw = True&lt;BR/&gt;    Print &amp;quot;Number of joys supported : &amp;quot; &amp;amp; joyGetNumDevs&lt;BR/&gt;    Dim jResult As Long&lt;BR/&gt;    jResult = joyGetDevCaps(JOYSTICKID1, JC, Len(JC))&lt;BR/&gt;    If (jResult = JOYERR_NOERROR) Then &apos;succeed&lt;BR/&gt;        Print &amp;quot;Product name : &amp;quot; &amp;amp; Left$(JC.szPname, InStr(1, JC.szPname, Chr(0)) - 1)&lt;BR/&gt;        Print &amp;quot;Manufacture id : &amp;quot; &amp;amp; JC.wMid&lt;BR/&gt;        Print &amp;quot;Number of buttons : &amp;quot; &amp;amp; JC.wNumButtons&lt;BR/&gt;        Print &amp;quot;Period max : &amp;quot; &amp;amp; JC.wPeriodMax&lt;BR/&gt;        Print &amp;quot;Period min : &amp;quot; &amp;amp; JC.wPeriodMin&lt;BR/&gt;        Print &amp;quot;Product id : &amp;quot; &amp;amp; JC.wPid&lt;BR/&gt;        Print &amp;quot;X max : &amp;quot; &amp;amp; JC.wXmax&lt;BR/&gt;        Print &amp;quot;X min : &amp;quot; &amp;amp; JC.wXmin&lt;BR/&gt;        Print &amp;quot;Y max : &amp;quot; &amp;amp; JC.wYmax&lt;BR/&gt;        Print &amp;quot;Y min : &amp;quot; &amp;amp; JC.wYmin&lt;BR/&gt;        Print &amp;quot;Z max : &amp;quot; &amp;amp; JC.wZmax&lt;BR/&gt;        Print &amp;quot;Z min : &amp;quot; &amp;amp; JC.wZmin&lt;BR/&gt;    Else&lt;BR/&gt;        If (jResult = MMSYSERR_NODRIVER) Then&lt;BR/&gt;            Print &amp;quot;Error : Driver is not ready!&amp;quot;&lt;BR/&gt;        ElseIf (jResult = MMSYSERR_INVALPARAM) Then&lt;BR/&gt;            Print &amp;quot;Error : Invalid parameter(s)&amp;quot;&lt;BR/&gt;        Else&lt;BR/&gt;            Print &amp;quot;Error : Unknown error&amp;quot;&lt;BR/&gt;        End If&lt;BR/&gt;    End If&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;تابع بعدي joyGetPos هستش كه براي بدست آوردن وضعيت مكان و دكمه هاي جوي استيك بكار ميره :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function joyGetPos Lib &amp;quot;winmm.dll&amp;quot; Alias &amp;quot;joyGetPos&amp;quot; (ByVal uJoyID As Long, pji As JOYINFO) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول همون آيدي جوي استيك هستش كه در موردش گفتم.دومي هم يه متغير از نوع JOYINFO هستش كه وضعيت حوي استيك توش قرار ميگيره :&lt;BR/&gt;&lt;BR/&gt;Private Type JOYINFO&lt;BR/&gt;        wXpos As Long&lt;BR/&gt;        wYpos As Long&lt;BR/&gt;        wZpos As Long &lt;BR/&gt;        wButtons As Long&lt;BR/&gt;End Type&lt;BR/&gt;&lt;BR/&gt;سه تا متغير اولي كه مشخصه.مربوط به طول و عرض و ارتفاع هستن.دومي هم مربوط به وضعيت دكمه هاست :&lt;BR/&gt;&lt;BR/&gt;JOY_BUTTON1 &apos;دكمه اول فشرده شده&lt;BR/&gt;JOY_BUTTON2 &apos;دكمه ي دوم فشرده شده&lt;BR/&gt;JOY_BUTTON3 &apos;دكمه ي سوم  فشرده شده&lt;BR/&gt;JOY_BUTTON4 &apos;دكمه ي چهارم فشرده شده&lt;BR/&gt;&lt;BR/&gt;مقدار برگشتي هم مثل تابع قبل هستش با اين فرق كه اگه مقدار JOYERR_UNPLUGGED برگشت بشه يعني اينكه جوي استيك به سيستم connect  نشده:&lt;BR/&gt;&lt;BR/&gt;Option Explicit&lt;BR/&gt;Private Type JOYINFO&lt;BR/&gt;        wXpos As Long&lt;BR/&gt;        wYpos As Long&lt;BR/&gt;        wZpos As Long&lt;BR/&gt;        wButtons As Long&lt;BR/&gt;End Type&lt;BR/&gt;Private Declare Function joyGetPos Lib &amp;quot;winmm.dll&amp;quot; (ByVal uJoyID As Long, pji As JOYINFO) As Long&lt;BR/&gt;Private Const JOYSTICKID1 = 0&lt;BR/&gt;Private Const JOYSTICKID2 = 1&lt;BR/&gt;Private Const JOYERR_NOERROR = (0)  &apos;  no error&lt;BR/&gt;Private Const MMSYSERR_BASE = 0&lt;BR/&gt;Private Const MMSYSERR_INVALPARAM = (MMSYSERR_BASE + 11) &apos;  invalid parameter passed&lt;BR/&gt;Private Const MMSYSERR_NODRIVER = (MMSYSERR_BASE + 6)  &apos;  no device driver present&lt;BR/&gt;Private Const JOYERR_BASE = 160&lt;BR/&gt;Private Const JOYERR_UNPLUGGED = (JOYERR_BASE + 7) &apos;  joystick is unplugged &lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;    Dim JI As JOYINFO&lt;BR/&gt;    Dim jResult As Long&lt;BR/&gt;    Me.AutoRedraw = True&lt;BR/&gt;    jResult = joyGetPos(JOYSTICKID1, JI)&lt;BR/&gt;    If (jResult = JOYERR_NOERROR) Then&lt;BR/&gt;        Print &amp;quot;X : &amp;quot; &amp;amp; JI.wXpos&lt;BR/&gt;        Print &amp;quot;Y : &amp;quot; &amp;amp; JI.wYpos&lt;BR/&gt;        Print &amp;quot;Z : &amp;quot; &amp;amp; JI.wZpos&lt;BR/&gt;        Print &amp;quot;Button : &amp;quot; &amp;amp; JI.wButtons&lt;BR/&gt;    Else&lt;BR/&gt;        If (jResult = MMSYSERR_NODRIVER) Then&lt;BR/&gt;            Print &amp;quot;Error : Driver is not ready!&amp;quot;&lt;BR/&gt;        ElseIf (jResult = MMSYSERR_INVALPARAM) Then&lt;BR/&gt;            Print &amp;quot;Error : Invalid parameter(s)&amp;quot;&lt;BR/&gt;        ElseIf (jResult = JOYERR_UNPLUGGED) Then&lt;BR/&gt;             Print &amp;quot;Error : Joystick is not connected!&amp;quot;&lt;BR/&gt;        Else&lt;BR/&gt;            Print &amp;quot;Error : Unknown error&amp;quot;&lt;BR/&gt;        End If&lt;BR/&gt;    End If&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;تابع بعدي joyGetPosEx هستش كه كار تابع قبلي رو  به صورت گستره تري انجام ميده و براي كار كردن با دستگاه هاي پيشرفته مثل دسته هايي كه دكمه زياد دارن يا كلاه ها يا ... بكار ميره.اگه ميخواهين با يه جوي استيك معمولي كار كنين برين سراغ تابع قبلي:&lt;BR/&gt;&lt;BR/&gt; Private Declare Function joyGetPosEx Lib &amp;quot;winmm.dll&amp;quot; Alias &amp;quot;joyGetPosEx&amp;quot; (ByVal uJoyID As Long, pji As JOYINFOEX) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول آيدي جوي استيك و دومي هم يه متغير از نوع JOYINFOEX هستش :&lt;BR/&gt;&lt;BR/&gt;Private Type JOYINFOEX&lt;BR/&gt;        dwSize As Long   &apos;طول ساختار كه بايد قبل از ارسال به تابع مقدار دهيش كنين &lt;BR/&gt;        dwFlags As Long                 &apos;   ي كه با مقدار دهي كردنش بايد مشخص كنيم چه اطلاعاتي رو تابع براي ما برگردونهflag&lt;BR/&gt;        dwXpos As Long                &apos;  xموقيعت &lt;BR/&gt;        dwYpos As Long                &apos;  y موقيعت&lt;BR/&gt;        dwZpos As Long                &apos;  z موقيعت&lt;BR/&gt;        dwRpos As Long                 &apos;  بعد ديد چهارم&lt;BR/&gt;        dwUpos As Long                 &apos;  بعد ديد پنجم&lt;BR/&gt;        dwVpos As Long                 &apos;  بعد ديد ششم &lt;BR/&gt;        dwButtons As Long             &apos;  وضعيت دكمه ها&lt;BR/&gt;        dwButtonNumber As Long        &apos; تعداد دكمه هايي كه فشرده شدن&lt;BR/&gt;        dwPOV As Long                 &apos;  زاويه ديد&lt;BR/&gt;        dwReserved1 As Long                 &apos;  رزور شده&lt;BR/&gt;        dwReserved2 As Long                 &apos; رزرو شده&lt;BR/&gt;End Type&lt;BR/&gt;&lt;BR/&gt;چيزي كه در مورد اين ساختار بايد توجه كنين Flags  هستش كه با دادن مقدار هاي مختلف بايد به تابع گفت كه در چه مورد اطلاعات ميخواهيم كه مقاديري كه بش ميشه داد خيلي زياده و ديگه من بيخيالش ميشم توي MSDN انواع مقدار ها با توضيحاتشون هست...&lt;BR/&gt;كار بااين تابع هم مثل كدي قبلي هستش فقط همونطور كه گفتم بايد قبل از ارسال متغير به تابع مقدار  dwSize رو برابر طول متغير قرار بدين :&lt;BR/&gt;&lt;BR/&gt;JI.dwSize = Len(JI)&lt;BR/&gt;&lt;BR/&gt;مقدار برگشتي هم مثل قبليه  فقط اگه MMSYSERR_BADDEVICEID باشه يعني اينكه آيدي جوي استيك غير قابل قبول هستش... .&lt;BR/&gt;&lt;BR/&gt;حالا ميريم سراغ اصل كاري يعني capture كردن جوي استيك .&lt;BR/&gt;&lt;BR/&gt;كلا روش كلي براي اين كه يك جوي استيك رو كنترل كنيم و بفهميم كي حركت ميكنه يا دكمه هاش فشرده ميشه اينه كه با دادن هندل پنجره به تابع joySetCapture پيغام هايي كه به پنجره مياد رو كنترل كنيم.در واقع تابع joySetCapture باعث ميشه هنگام هر گونه رويداد توسط جوي استيك(يا بطور متناوب) يك پيغام به پنجره اي كه هندلش رو به تابع داديم ارسال بشه و با توجه به تابعي كه ما براي كنترل پنجره نوشتيم ميتونيم نوع رويداد و مشخصات رويداد رو مشخص كنيم.اگه قسمت Messages ها ي اين وبلاگ رو نخوندين بد نيست اول اون رو بخونين تا بهتر اين قضيه رو متوجه بشين.&lt;BR/&gt;پيغام هايي كه توسط جوي استيك به پنجره مورد نظر ارسال ميشه :&lt;BR/&gt;&lt;BR/&gt;MM_JOY1BUTTONDOWN&lt;BR/&gt;&lt;BR/&gt;اين پيغام وقتي ارسال ميشه كه يكي از دكمه هاي جوي استيك اول فشرده بشه.همونطور كه ميدونين وقتي يه پيغام به يه پنجره ارسال ميشه 2 تا مقدار هم به عنوان wParam  و lParam  به پنجره ارسال ميشن.در اين حالت مقدار wParam  نشون ميده كه وضعيت كدوم يكي از دكمه هاي جوي استيك تغيير كرده :&lt;BR/&gt;&lt;BR/&gt;JOY_BUTTON1CHG &apos;دكمه ي اول&lt;BR/&gt;JOY_BUTTON2CHG &apos;دكمه ي دوم&lt;BR/&gt;JOY_BUTTON3CHG &apos;دكمه ي سوم&lt;BR/&gt;JOY_BUTTON4CHG &apos;دكمه ي چهارم&lt;BR/&gt;&lt;BR/&gt;و كدوم دكمه ها فشرده شدن(2 سري مقدار بصورت تركيبي بكارميرن) :&lt;BR/&gt;&lt;BR/&gt;JOY_BUTTON1  &apos;دكمه ي اول &lt;BR/&gt;JOY_BUTTON2 &apos;دكمه ي دوم &lt;BR/&gt;JOY_BUTTON3 &apos;دكمه ي سوم &lt;BR/&gt;JOY_BUTTON4 &apos;دكمه ي چهارم&lt;BR/&gt;&lt;BR/&gt;و توي lParam  هم مختصات x و y  جوي استيك قرار داره.به اين صورت كه توي دوبايت پاييني مختصات x و توي 2 بايت بالايي y&lt;BR/&gt;&lt;BR/&gt;MM_JOY1BUTTONUP&lt;BR/&gt;&lt;BR/&gt;مثل قبلي فقط براي رها شدن دكمه ي جوي استيك اول &lt;BR/&gt;&lt;BR/&gt;MM_JOY1MOVE&lt;BR/&gt;&lt;BR/&gt;اين پيغام وقتي ارسال ميشه كه جوي استيك اول حركت كنه&lt;BR/&gt;مقدار wParam دكمه هايي كه فشرده شدن رو نشون ميده :&lt;BR/&gt;&lt;BR/&gt;JOY_BUTTON1  &apos;دكمه ي اول &lt;BR/&gt;JOY_BUTTON2 &apos;دكمه ي دوم &lt;BR/&gt;JOY_BUTTON3 &apos;دكمه ي سوم &lt;BR/&gt;JOY_BUTTON4 &apos;دكمه ي چهارم&lt;BR/&gt;&lt;BR/&gt;مقدار lParam  مثل قبلي هستش.&lt;BR/&gt;&lt;BR/&gt;MM_JOY1ZMOVE&lt;BR/&gt;&lt;BR/&gt;اين پيغام وقتي ارسال ميشه كه  جوي استيك توي محور z ها مكانش تغيير كنه.&lt;BR/&gt;مقدار wParam  مثل قبلي هستش و توي 2  بايت بالايي lParam  هم مختصات z جوي استيك قرار ميگيره.&lt;BR/&gt;&lt;BR/&gt;MM_JOY2BUTTONDOWN&lt;BR/&gt;&lt;BR/&gt;مثل قبلي فقط براي جوي استيك دوم&lt;BR/&gt;&lt;BR/&gt;MM_JOY2BUTTONUP&lt;BR/&gt;&lt;BR/&gt;مثل قبلي فقط براي جوي استيك دوم&lt;BR/&gt;&lt;BR/&gt;MM_JOY2MOVE&lt;BR/&gt;&lt;BR/&gt;مثل قبلي فقط براي جوي استيك دوم&lt;BR/&gt;&lt;BR/&gt;MM_JOY2ZMOVE&lt;BR/&gt;&lt;BR/&gt;مثل قبلي فقط براي جوي استيك دوم&lt;BR/&gt;&lt;BR/&gt;حالا ميريم سراغ خود تابع ها:&lt;BR/&gt;&lt;BR/&gt;با تابع joySetThreshold ميشه تعيين كرد كه براي فرستادن پيغام به پنجره حداقل مكان جوي استيك چقدر تغيير كنه.يعني ما به با اين تابع به تابع joySetCapture  ميگين كه تا وقتي كه جوي استيك اينقدر تغيير مكان نداده پيغام هاي مربوط به حركت (MM_JOY1MOVE, MM_JOY1ZMOVE, MM_JOY2MOVE, or MM_JOY2ZMOVE) رو  براي پنجره ي ما نفرسته:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function joySetThreshold Lib &amp;quot;winmm.dll&amp;quot; Alias &amp;quot;joySetThreshold&amp;quot; (ByVal id As Long, ByVal uThreshold As Long) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول آيدي جوي استيك و دومي مقدار مورد نظر هستش.مقدار برگشتيش هم مثل تابع joyGetDevCaps هستش&lt;BR/&gt;&lt;BR/&gt;تابع joyGetThreshold هم مثل  قبلي هستش با اين تفاوت كه براي گرفتن مقدار Threshold  استفاده ميشه:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function joyGetThreshold Lib &amp;quot;winmm.dll&amp;quot; Alias &amp;quot;joyGetThreshold&amp;quot; (ByVal id As Long, lpuThreshold As Long) As Long&lt;BR/&gt;&lt;BR/&gt;حالا ميريم سراغ تابع اصل كاري يعني joySetCapture كه توضيح كليش رو دادم :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function joySetCapture Lib &amp;quot;winmm.dll&amp;quot; Alias &amp;quot;joySetCapture&amp;quot; (ByVal hwnd As Long, ByVal uID As Long, ByVal uPeriod As Long, ByVal bChanged As Long) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول هندل پنجره ي مورد نظر هستش.دومي آيدي جوي استيك سومي همون تعدادي هستش كه اول كار با تابع joyGetDevCaps مقدار حداقل و حداكثرش رو بدست آورديم يعني حداقل و حداكثر تعداد پيغام هايي كه جوي استيك ميتونه توي 1 صدم ثانيه  به برنامه ارسال كنه  (Polling frequency).&lt;BR/&gt;&lt;BR/&gt;آرگومان آخر هم اگه True  باشه تابع پيغام هاي حركتي رو فقط وقتي ارسال ميكنه كه تغيير حركت موس بيشتر از مقدار Threshold ي باشه كه با تابع joySetThreshold تنظيم كرديم.اگه False باشه به طور متناوب و بسته به مقدار Polling frequency تابع  به پنجره ي ما پيغام ارسال ميكنه.در واقع اگه مقدار Threshold  رو تنظيم كردين اين رو True بگذارين و گر نه False.&lt;BR/&gt;&lt;BR/&gt;اگه كار تابع موفقيت آميز باشه مقدار برگشتي JOYERR_NOERROR هستش. در غير اين صورت :&lt;BR/&gt;&lt;BR/&gt;MMSYSERR_NODRIVER &apos;درايور جوي استيك آماده نيست &lt;BR/&gt;JOYERR_NOCANDO &apos;يه مشكلي تو كار هستش(اينطور كه مايكروسافت گفته مثلا تايمر ويندوز فراهم نيست&lt;BR/&gt;JOYERR_UNPLUGGED &apos;نشده Connect جوي استيك به سيسيتم &lt;BR/&gt;&lt;BR/&gt;اين رو هم بگم كه اگه از قبل تابع joySetCapture  رو فراخواني كرده باشين و بخواهين دوباره فراخوانيش كنين تابع كار نميكنه.قبل از فراخواني دوباره بايد تابع joyReleaseCapture رو فراخواني كنين :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function joyReleaseCapture Lib &amp;quot;winmm.dll&amp;quot; Alias &amp;quot;joyReleaseCapture&amp;quot; (ByVal id As Long) As Long&lt;BR/&gt;&lt;BR/&gt;در واقع وقتي كه ميخواهين تابع joySetCapture بيخيال پنجره ي شما بشه و ديگه كاري با جوي استيك ندارين و نميخواهين كنترلش كنين اين تابع رو بايد فراخواني كنين.آرگومانش هم همون آيدي جوي استيك هستش.&lt;BR/&gt;&lt;BR/&gt;حالا بريم سراغ نوشتن تابع كنترل پيغام ها.&lt;BR/&gt;توي محيط اسمبلي يا مثلا C++ Visual سيستم كلي كد نويسي و كنترل پيغام ها توسط به تابع (Window Prodedure)هستش و اگه شما توي اين محيط ها بخواهين پيغام هاي فرستاده شده رو كنترل كنين كارتون خيلي راحته چون عملا دارين كد مربوط به كنترل پيغام ها رو ميبينين.اما توي محيط ويژوال بيسيك اين عمليات از برنامه نويس پنهان شده و شما فقط يكسري Event هاي از پيش تعيين شده مثل OnClick  يا OnMouseDown يا ... رو ميبينين و دسترسي به پيغام هاي ديگه ندارين.اما حالا بايد چكار كرد؟ &lt;BR/&gt;اگه ميخواهين يك بازي درست و حسابي درست كنين بهتره همين الان بيخيال ويبي شين و برين سراغ  Visual C++. اما براي ويبي هم راه هايي پيدا ميشه :&lt;BR/&gt;&lt;BR/&gt;يك راهش استفاده از توابع Hook و راه ديگش هم استفاده از تابع SetWindowLong هستش.اينجا من از روش دوم استفاده ميكنم اما صرفا قصد ندارم در مورد كنترل كردن پيغام هاي پنجره توضيح بدم و اين كار رو ميگذارم واسه يه پست ديگه.&lt;BR/&gt;اول با استفاده از تابع SetWindowLong تابع مربوط به كنترل پيغام ها رو كه بايد توي يك ماژول هم باشه مشخص ميكنيم:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function SetWindowLong Lib &amp;quot;user32&amp;quot; Alias &amp;quot;SetWindowLongA&amp;quot; (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long&lt;BR/&gt;&lt;BR/&gt;و در همين حين آدرس تابع قبلي رو هم از تابع ميگيريم چون بعد از اينكه كارمون تموم شد ميخوايم وضعيت رو به حالت عادي برگردونيم. بعد يه تابع به صورت زير براي كنترل پيغام ها درست ميكنيم :&lt;BR/&gt;&lt;BR/&gt;Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long&lt;BR/&gt;    WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)&lt;BR/&gt;   &lt;BR/&gt;   &apos;Control messages here ... &lt;BR/&gt;&lt;BR/&gt;End Function&lt;BR/&gt;&lt;BR/&gt;تابع CallWindowProc رو هم براي اين استفاده ميكنيم كه پيغامي كه فرستاده ميشه رو به تابع كنترل اصلي(قبلي) هم بفرستيم و بعد كار كنترل پيغام هايي كه توسط تابع اصلي قابل كنترل نيستن رو انجام ميديم.&lt;BR/&gt;&lt;BR/&gt;بعد هم دوباره  با تابع SetWindowLong آدرس قبلي رو براي كنترل پيغام ها تعيين ميكنيم :&lt;BR/&gt;&lt;BR/&gt;SetWindowLong Form1.hwnd, GWL_WNDPROC, PrevProc&lt;BR/&gt;&lt;BR/&gt;براي مثال كد كلي ما براي كنترل پيغام هايي كه به از جوي استيك(1) براي فشرده شدن دكمه ها ارسال ميشه به اين صورت ميشه :&lt;BR/&gt;&lt;BR/&gt;توي فرم 2 تا دكمه (يكي براي شروع و يكي براي پايان) بگذارين و اين كد رو وارد كنين :&lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;    joySetCapture Form1.hwnd, JOYSTICKID1, 100, False&lt;BR/&gt;    start&lt;BR/&gt;End Sub &lt;BR/&gt;&lt;BR/&gt;Private Sub Command2_Click()&lt;BR/&gt;     joyReleaseCapture JOYSTICKID1&lt;BR/&gt;     finish&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;و توي يك ماژول هم اين رو بگذارين :&lt;BR/&gt;&lt;BR/&gt;Private Declare Sub CopyMemory Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;RtlMoveMemory&amp;quot; (Destination As Any, Source As Any, ByVal Length As Long)&lt;BR/&gt;Public Declare Function joySetCapture Lib &amp;quot;winmm.dll&amp;quot; (ByVal hwnd As Long, ByVal uID As Long, ByVal uPeriod As Long, ByVal bChanged As Long) As Long&lt;BR/&gt;Public Declare Function joyReleaseCapture Lib &amp;quot;winmm.dll&amp;quot; (ByVal id As Long) As Long&lt;BR/&gt;Declare Function SetWindowLong Lib &amp;quot;user32&amp;quot; Alias &amp;quot;SetWindowLongA&amp;quot; (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long&lt;BR/&gt;Declare Function CallWindowProc Lib &amp;quot;user32&amp;quot; Alias &amp;quot;CallWindowProcA&amp;quot; (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long&lt;BR/&gt;Public Const GWL_WNDPROC = (-4)&lt;BR/&gt;Public Const WM_KEYDOWN = &amp;amp;H100&lt;BR/&gt;Public Const JOY_BUTTON1 = &amp;amp;H1&lt;BR/&gt;Public Const JOY_BUTTON3 = &amp;amp;H4&lt;BR/&gt;Public Const JOY_BUTTON2 = &amp;amp;H2&lt;BR/&gt;Public Const JOY_BUTTON4 = &amp;amp;H8&lt;BR/&gt;Public Const JOY_BUTTON1CHG = &amp;amp;H100&lt;BR/&gt;Public Const JOY_BUTTON2CHG = &amp;amp;H200&lt;BR/&gt;Public Const JOY_BUTTON3CHG = &amp;amp;H400&lt;BR/&gt;Public Const JOY_BUTTON4CHG = &amp;amp;H800&lt;BR/&gt;Public Const JOYSTICKID1 = 0&lt;BR/&gt;Public Const JOYSTICKID2 = 1&lt;BR/&gt;Dim PrevProc As Long&lt;BR/&gt;Public Const MM_JOY1BUTTONDOWN = &amp;amp;H3B5&lt;BR/&gt;Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long&lt;BR/&gt;    WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)&lt;BR/&gt;    If uMsg = MM_JOY1BUTTONDOWN Then&lt;BR/&gt;        Form1.Print&lt;BR/&gt;        Form1.Print &amp;quot;Joystick(1),Button down event occured : &amp;quot;&lt;BR/&gt;        Form1.Print &amp;quot;Button changed : &amp;quot;;&lt;BR/&gt;        If wParam And JOY_BUTTON1CHG Then&lt;BR/&gt;            Form1.Print &amp;quot;one&amp;quot;&lt;BR/&gt;        ElseIf wParam And JOY_BUTTON2CHG Then&lt;BR/&gt;            Form1.Print &amp;quot;two&amp;quot;&lt;BR/&gt;        ElseIf wParam And JOY_BUTTON3CHG Then&lt;BR/&gt;            Form1.Print &amp;quot;three&amp;quot;&lt;BR/&gt;        ElseIf wParam And JOY_BUTTON4CHG Then&lt;BR/&gt;            Form1.Print &amp;quot;four&amp;quot;&lt;BR/&gt;        End If&lt;BR/&gt;        Form1.Print &amp;quot;Button(s) are pressed : &amp;quot;;&lt;BR/&gt;        If wParam And JOY_BUTTON1 Then Form1.Print &amp;quot;one &amp;quot;;&lt;BR/&gt;        If wParam And JOY_BUTTON2 Then Form1.Print &amp;quot;two &amp;quot;;&lt;BR/&gt;        If wParam And JOY_BUTTON3 Then Form1.Print &amp;quot;three &amp;quot;;&lt;BR/&gt;        If wParam And JOY_BUTTON4 Then Form1.Print &amp;quot;four &amp;quot;&lt;BR/&gt;        Form1.Print&lt;BR/&gt;        Form1.Print &amp;quot;X : &amp;quot; &amp;amp; Get_LoWord(lParam) &amp;amp; &amp;quot; Y : &amp;quot; &amp;amp; Get_HiWord(lParam)&lt;BR/&gt;    End If&lt;BR/&gt;End Function&lt;BR/&gt;Public Sub start()&lt;BR/&gt;      PrevProc = SetWindowLong(Form1.hwnd, GWL_WNDPROC, AddressOf WindowProc)&lt;BR/&gt;End Sub&lt;BR/&gt;Public Sub finish()&lt;BR/&gt;    Call SetWindowLong(Form1.hwnd, GWL_WNDPROC, PrevProc)&lt;BR/&gt;End Sub&lt;BR/&gt;Function Get_LoWord(ByRef dword As Long) As Integer&lt;BR/&gt;    CopyMemory Get_LoWord, ByVal VarPtr(dword), 2&lt;BR/&gt;End Function&lt;BR/&gt;Public Function Get_HiWord(ByRef dword As Long) As Integer&lt;BR/&gt;    CopyMemory Get_HiWord, ByVal VarPtr(dword) + 2, 2&lt;BR/&gt;End Function&lt;BR/&gt;&lt;BR/&gt;در ضمن 2 تا تابع آخر هم براي بدست آوردن دو بايت بالايي و دوبايت پاييني lParam  استفاده ميشن&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;***************************&lt;BR/&gt;امــــــــــــــــــــــــــــــــــــــــــــوزش Process توسط API&lt;BR/&gt;امروز ميخوام در مورد كار با Process ها يكم بنويسم.مخصوصن در مورد بستن Process برنامه ها.&lt;BR/&gt;&lt;BR/&gt;واسه بستن  Processيه فايل اجرايي(طبق اين راهي كه من بلدم) :&lt;BR/&gt;اول بايد آيدي اون Process رو بدست بياريم.&lt;BR/&gt;بعد بايد با تابع OpenProcess يه هندل از اون Process بدست بياريم.&lt;BR/&gt;بعد با تابع TerminateProcess اون رو ببنديم .&lt;BR/&gt;&lt;BR/&gt;واسه بدست آوردن آيدي Process با توجه به اطلاعاتي كه ما از اون برنامه داريم چند تا راه هست كه من 2 تاشو ميگم.&lt;BR/&gt;يكيش با استفاده از اسم يا مسير اون فايلي كه در حال اجراست.&lt;BR/&gt;يكيش با استفاده از داشتن هندل يكي از پنجره هاي اون برنامه.&lt;BR/&gt;&lt;BR/&gt;توي راه اول ما با 3 تا تابع ليست Process ها و آيدي اونها رو بدست مياريم.هر كدوم اسمش با اسم مورد نظر ما يكي بود از آيديش استفاده ميكنيم و اون رو ميبنديم.&lt;BR/&gt;&lt;BR/&gt;فعلا همينو ميگم بعد ميرم سراغ راه بعدي.&lt;BR/&gt;واسه ي كاري كه گفتم اول بايد با تابع CreateToolhelp32Snapshot (كه واسه بدست آوردن ليست Process ها و يا heap  ها ، Module  ها و... ي  Process بكار ميره) يه هندل ليست از   Process  ها بدست بدست بياريم:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function CreateToolhelp32Snapshot Lib &amp;quot;kernel32&amp;quot; (ByVal lFlags As Long, ByVal lProcessID As Long) As Long&lt;BR/&gt;&lt;BR/&gt;بعد با تابع Process32First و Process32Next اطلاعاتي در مورد هر كدوم از Process ها مثل نام فايل و ProcessID  و ... كه با بقيش فعلا كاري بدست بياريم:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function Process32First Lib &amp;quot;kernel32.dll&amp;quot; (ByVal hSnapshot As Long, Uprocess As PROCESSENTRY32) As Long&lt;BR/&gt;Private Declare Function Process32Next Lib &amp;quot;kernel32.dll&amp;quot; (ByVal hSnapshot As Long, Uprocess As PROCESSENTRY32) As Long&lt;BR/&gt;&lt;BR/&gt;البته اين روش تا اين مرحله فقط اسم فايل رو به ما ميده مثل (notepad.exe) نه آدرس كامل اون رو كه در مورد بدست آوردن آدرس كامل هم توضيح ميدم.&lt;BR/&gt;&lt;BR/&gt;آرگومان اول تابع CreateToolhelp32Snapshot بستگي به ليستي كه ميخواهيم بدست بياريم داره كه ما اينجا چون ميخواهيم ليست همه ي Process هاي سيستم رو بدست بياريم اون رو Private Const TH32CS_SNAPPROCESS = &amp;amp;H2 ميگذاريم.&lt;BR/&gt;&lt;BR/&gt;آرگومان بعدي هم  آيدي Process يه كه ميخواهيم در موردش اطلاعات بدست بياريم كه چون ما اينجا نميخواهيم  اطلاعاتي (ليست Module  ها و ...) در مورد Process خاصي بدست بياريم (چون هنوز IDيي نداريم) و فعلا ميخواهيم خود ليست Process ها رو بدست بياريم و آرگومان اول رو هم TH32CS_SNAPPROCESS قرار داديم اينجا هرچي بگذاريم فرقي نداره. آرگومان دوم براي وقتيه كه آرگومان اول رو چيز ديگه اي بغير از ايني كه ما الان گذشتيم بگذاريم...(فكر كنم زيادي توضيح دادم!!!!)&lt;BR/&gt;&lt;BR/&gt;حالا براي شروع بدست آوردن اطلاعات مورد نظرمون از Process32First استفاده ميكنيم.آرگومان اول هندليه كه با تابع قبلي بدست آورديم.بعدي يه متغير از نوع PROCESSENTRY32 هستش كه تابع اطلاعات مورد نظر رو توي اين قرار ميده:&lt;BR/&gt;&lt;BR/&gt;CONST MAX_PATH = 260&lt;BR/&gt;Private Type PROCESSENTRY32&lt;BR/&gt;  dwSize As Long&lt;BR/&gt;  cntUsage As Long&lt;BR/&gt;  th32ProcessID As Long&lt;BR/&gt;  th32DefaultHeapID As Long&lt;BR/&gt;  th32ModuleID As Long&lt;BR/&gt;  cntThreads As Long&lt;BR/&gt;  th32ParentProcessID As Long&lt;BR/&gt;  pcPriClassBase As Long&lt;BR/&gt;  dwFlags As Long&lt;BR/&gt;  szExeFile As String * MAX_PATH&lt;BR/&gt;End Type&lt;BR/&gt;&lt;BR/&gt;توي اين  szExeFile ٬Type  اسم فايل ، th32ProcessID هم همون آيدي مورد نظرمونه.با بقيش هم همونطور كه گفتم كاري نداريم.&lt;BR/&gt;(آرگومان هاي تابع Process3Next هم طبعا مثل Process32First هستش.)&lt;BR/&gt;بعد با يك حلقه تا زماني كه مقدار برگشتي تابع Process32Next  صفر نباشه به فراخواني اين تابع ادامه ميديم و توي هر بار فراخواني اطلاعات يكي از Process ها رو بدست مياريم.(وقتي كه تابع صفر برگردونه يعني به انتهاي ليست رسيديم)&lt;BR/&gt;بعد از بدست آوردن اطلاعات مورد نظر بايد هندلي كه با تابع CreateToolhelp32Snapshot بدست آورديم رو ببنديم :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function CloseHandle Lib &amp;quot;kernel32.dll&amp;quot; (ByVal hObject As Long) As Long&lt;BR/&gt;&lt;BR/&gt;خوب ميريم سراغ كد :&lt;BR/&gt;&lt;BR/&gt;Private Const MAX_PATH = 260&lt;BR/&gt;Private Const TH32CS_SNAPPROCESS = &amp;amp;H2 &lt;BR/&gt;&lt;BR/&gt;Private Type PROCESSENTRY32&lt;BR/&gt;  dwSize As Long&lt;BR/&gt;  cntUsage As Long&lt;BR/&gt;  th32ProcessID As Long&lt;BR/&gt;  th32DefaultHeapID As Long&lt;BR/&gt;  th32ModuleID As Long&lt;BR/&gt;  cntThreads As Long&lt;BR/&gt;  th32ParentProcessID As Long&lt;BR/&gt;  pcPriClassBase As Long&lt;BR/&gt;  dwFlags As Long&lt;BR/&gt;  szExeFile As String * MAX_PATH&lt;BR/&gt;End Type&lt;BR/&gt;Private Declare Function CreateToolhelp32Snapshot Lib &amp;quot;kernel32&amp;quot; (ByVal lFlags As Long, ByVal lProcessID As Long) As Long&lt;BR/&gt;Private Declare Function Process32First Lib &amp;quot;kernel32.dll&amp;quot; (ByVal hSnapshot As Long, Uprocess As PROCESSENTRY32) As Long&lt;BR/&gt;Private Declare Function Process32Next Lib &amp;quot;kernel32.dll&amp;quot; (ByVal hSnapshot As Long, Uprocess As PROCESSENTRY32) As Long&lt;BR/&gt;Private Declare Function CloseHandle Lib &amp;quot;kernel32.dll&amp;quot; (ByVal hObject As Long) As Long&lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;Dim hSnap As Long, pResult As Long, Process As PROCESSENTRY32&lt;BR/&gt;    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)&lt;BR/&gt;    Process.dwSize = Len(Process)&lt;BR/&gt;    pResult = Process32First(hSnap, Process)&lt;BR/&gt;    Do While pResult &amp;lt;&amp;gt; 0&lt;BR/&gt;List1.AddItem Left$(Process.szExeFile, InStr(1, Process.szExeFile, Chr(0)) - 1) &amp;amp; &amp;quot; : &amp;quot; &amp;amp; Process.th32ProcessID &lt;BR/&gt;pResult = Process32Next(hSnap, Process)&lt;BR/&gt;    Loop&lt;BR/&gt;    CloseHandle hSnap&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;همه چيزه اين كد رو به غير از 2 چيز كوچيك توضيح دادم.يكي ايكنه براي اينكه ميخواهيم متغير Process  كه از نوع  PROCESSENTRY32 هستش رو به تابع ارسال كنيم بايد طولش رو توي عضو .dwSize اون قرار بديم.(اين موضوع فقط مال اين تابع و اين نوع نيست...)&lt;BR/&gt;بعدي اينكه  از نام فايل اون مقدار مورد نظر رو كه ميخواهيم جدا كنيم و كاراكتر هاي (0) رو از اسم فايل جدا كنيم از Left  و Instr استفاده كرديم .مثل كاري كه توي پست قبلي توضيح دادم.(قبلا از Replace  استفاده ميكردم اما تابلوه كه اين روش سرعتش بيشتره) &lt;BR/&gt;&lt;BR/&gt;خوب تا اينجا فعلا ليست اسم ها و آيدي Process ها رو بدست آورديم.با اين روش و با تابعي كه ميگم ميتونيم  برنامه  اي اسم فايل اجراييش رو داشته باشيم ببنديم.اما چون ممكنه فايل اجرايي 2 تا برنامه ي جدا 1 اسم داشته باشن ميتونه مشكل پيش بياد و بهتره با استفاده از مسير فايل ها كارمون رو انجام بديم كه هنوز روش بدست آوردن مسير رو نگفتم.&lt;BR/&gt;الان روش بستن Process به همين روش رو توضيح ميدم بعد ميرم سراغ بدست آوردن مسير...&lt;BR/&gt;&lt;BR/&gt;همونطور كه اول گفتم بايد با OpenProcess يه هندل از Process  ايجاد كنيم :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function OpenProcess Lib &amp;quot;kernel32&amp;quot; (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول نوع دسترسي هستش كه ما  PROCESS_ALL_ACCESS = &amp;amp;H1F0FFF (همه ي دسترسي ها) رو ميگذاريم و خيال خودمون رو راحت ميكنيم.&lt;BR/&gt;&lt;BR/&gt;آرگومان بعدي رو هم True بگذارين(تاثيري تو كار ما نداره).بعد هم همون آيديه  Process  هستش . حالا بايد مقدار  برگشتي رو به تابع TerminateProcess بديم :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function TerminateProcess Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;TerminateProcess&amp;quot; (ByVal hProcess As Long, ByVal uExitCode As Long) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول همون هندله.دومي رو هم 0 قرار بدين.&lt;BR/&gt;حالا ميخواهيم يه برنامه بنوسيم كه هرچي برنامه ي NotePad كه در حال اجراس رو ببنده.(يا هر فايلي كه اسمش notepad.exe باشه ) :&lt;BR/&gt;&lt;BR/&gt;Private Const MAX_PATH = 260&lt;BR/&gt;Private Const TH32CS_SNAPPROCESS = &amp;amp;H2&lt;BR/&gt;Private Const PROCESS_ALL_ACCESS = &amp;amp;H1F0FFF&lt;BR/&gt;Private Type PROCESSENTRY32&lt;BR/&gt;  dwSize As Long&lt;BR/&gt;  cntUsage As Long&lt;BR/&gt;  th32ProcessID As Long&lt;BR/&gt;  th32DefaultHeapID As Long&lt;BR/&gt;  th32ModuleID As Long&lt;BR/&gt;  cntThreads As Long&lt;BR/&gt;  th32ParentProcessID As Long&lt;BR/&gt;  pcPriClassBase As Long&lt;BR/&gt;  dwFlags As Long&lt;BR/&gt;  szExeFile As String * MAX_PATH&lt;BR/&gt;End Type&lt;BR/&gt;Private Declare Function CreateToolhelp32Snapshot Lib &amp;quot;kernel32&amp;quot; (ByVal lFlags As Long, ByVal lProcessID As Long) As Long&lt;BR/&gt;Private Declare Function OpenProcess Lib &amp;quot;kernel32&amp;quot; (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long&lt;BR/&gt;Private Declare Function Process32First Lib &amp;quot;kernel32.dll&amp;quot; (ByVal hSnapshot As Long, Uprocess As PROCESSENTRY32) As Long&lt;BR/&gt;Private Declare Function Process32Next Lib &amp;quot;kernel32.dll&amp;quot; (ByVal hSnapshot As Long, Uprocess As PROCESSENTRY32) As Long&lt;BR/&gt;Private Declare Function CloseHandle Lib &amp;quot;kernel32.dll&amp;quot; (ByVal hObject As Long) As Long&lt;BR/&gt;Private Declare Function TerminateProcess Lib &amp;quot;kernel32&amp;quot; (ByVal hProcess As Long, ByVal uExitCode As Long) As Long&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;Dim hSnap As Long, pResult As Long, Process As PROCESSENTRY32&lt;BR/&gt;Dim AppName As String, pID As Long, hProcess As Long &lt;BR/&gt;&lt;BR/&gt;    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)&lt;BR/&gt;    Process.dwSize = Len(Process)&lt;BR/&gt;    pResult = Process32First(hSnap, Process)&lt;BR/&gt;    Do While pResult &amp;lt;&amp;gt; 0&lt;BR/&gt;        AppName = Left$(Process.szExeFile, InStr(1, Process.szExeFile, Chr(0)) – 1)&lt;BR/&gt;        If StrComp(AppName, &amp;quot;notepad.exe&amp;quot;, vbTextCompare) = 0 Then &apos;file name = notepad.exe  ?&lt;BR/&gt;            pID = Process.th32ProcessID&lt;BR/&gt;            hProcess = OpenProcess(PROCESS_ALL_ACCESS, True, pID)&lt;BR/&gt;            TerminateProcess hProcess, 0&lt;BR/&gt;            CloseHandle hProcess&lt;BR/&gt;        End If&lt;BR/&gt;        pResult = Process32Next(hSnap, Process)&lt;BR/&gt;        &lt;BR/&gt;    Loop&lt;BR/&gt;    CloseHandle hSnap&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;در ضمن بعد از اينكه Process رو بستيم هندل رو هم  با CloseHandle ميبنديم.&lt;BR/&gt;&lt;BR/&gt;خوب حالا مياييم سراغ بدست آوردن آدرس كامل فايل هاي در حال اجرا.&lt;BR/&gt;اگه يادتون باشه واسه بدست آوردن يك ليست از كل Process ها وقتي از تابع CreateToolhelp32Snapshot استفاده كرديم آرگومان اول رو  TH32CS_SNAPPROCESS قرار داديم و چون با Process خاصي كار نداشتيم آرگومان دوم رو 0 گذاشتيم.براي اينكه بتونيم اطلاعات ديگه اي از Process ها مانند  اطلاعاتModule  هايي(dll  ها ocx  ها و ...) كه Process داره ازشون استفاده ميكنه (و مسير كامل فايل كه اين هم خودش آدرس يكي از همون Module هاست) رو بدست بياريم بايد روي يك Process تمركز كنيم و مثل دفعه قبل نيست كه با يك حلقه اطلاعاتي رو در مورد همه ي Process ها بدست بياريم.براي اين كار بعد از بدست آوردن آيدي هر  Process ،آرگومان اول تابع رو  Private Const TH32CS_SNAPMODULE = &amp;amp;H8 قرار ميديم و آرگومان دوم رو  هم آيدي اون رو.&lt;BR/&gt;حالا به جاي استفاده از Process32First و Process32Next از Module32First و Module32Next استفاده ميكنيم:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function Module32First Lib &amp;quot;kernel32&amp;quot; (ByVal hSnapshot As Long, uProcess As MODULEENTRY32) As Long&lt;BR/&gt;Private Declare Function Module32Next Lib &amp;quot;kernel32&amp;quot; (ByVal hSnapshot As Long, uProcess As MODULEENTRY32) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول كه ميدونين چيه.دومي يه متغير از نوع  MODULEENTRY32 هستش كه اطلاعات Module ها توش قرار ميگيره:&lt;BR/&gt;&lt;BR/&gt;Private Const MAX_PATH = 260&lt;BR/&gt;Private Type MODULEENTRY32&lt;BR/&gt;  dwSize As Long&lt;BR/&gt;  th32ModuleID As Long&lt;BR/&gt;  th32ProcessID As Long&lt;BR/&gt;  GlblcntUsage As Long&lt;BR/&gt;  ProccntUsage As Long&lt;BR/&gt;  modBaseAddr As Long&lt;BR/&gt;  modBaseSize As Long&lt;BR/&gt;  hModule As Long&lt;BR/&gt;  szModule As String * 256&lt;BR/&gt;  szExePath As String * MAX_PATH&lt;BR/&gt;End Type&lt;BR/&gt;&lt;BR/&gt;اوني كه ما باش كار داريم szExePath هستش كه مسير اون Module  هستش چون فايلي كه ما ميخواهيم آدرسش رو بدست بياريم هم يكي از همين Module  هاست(اولين Module كه توسط تابع Module32First  برگردونه ميشه) بنابر اين آدرس همون آدرسيه كه ما دنبالشيم.البته szModule  هم فقط اسم Module هستش(بدون مسير)&lt;BR/&gt;&lt;BR/&gt;چون ما اينجا فقط ميخوايم آدرس اولين Module كه همون آدرس فايل Exe هستش رو بدست بياريم و با بقيه  Module  ها كاري نداريم ديگه واسه Module  ها از حلقه استفاده نميكنيم.شما اگه خواستين اين كار رو بكنين فرم كار مثل كد قبيليه كه گذشتم.&lt;BR/&gt;كد ما براي بدست آوردن آدرس همه ي فايل هاي در حال اجرا اينطوري ميشه :&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;Option Explicit&lt;BR/&gt;Private Const MAX_PATH = 260&lt;BR/&gt;Private Const TH32CS_SNAPPROCESS = &amp;amp;H2&lt;BR/&gt;Private Const TH32CS_SNAPMODULE = &amp;amp;H8&lt;BR/&gt;Private Type PROCESSENTRY32&lt;BR/&gt;  dwSize As Long&lt;BR/&gt;  cntUsage As Long&lt;BR/&gt;  th32ProcessID As Long&lt;BR/&gt;  th32DefaultHeapID As Long&lt;BR/&gt;  th32ModuleID As Long&lt;BR/&gt;  cntThreads As Long&lt;BR/&gt;  th32ParentProcessID As Long&lt;BR/&gt;  pcPriClassBase As Long&lt;BR/&gt;  dwFlags As Long&lt;BR/&gt;  szExeFile As String * MAX_PATH&lt;BR/&gt;End Type&lt;BR/&gt;Private Type MODULEENTRY32&lt;BR/&gt;  dwSize As Long&lt;BR/&gt;  th32ModuleID As Long&lt;BR/&gt;  th32ProcessID As Long&lt;BR/&gt;  GlblcntUsage As Long&lt;BR/&gt;  ProccntUsage As Long&lt;BR/&gt;  modBaseAddr As Long&lt;BR/&gt;  modBaseSize As Long&lt;BR/&gt;  hModule As Long&lt;BR/&gt;  szModule As String * 256&lt;BR/&gt;  szExePath As String * 260&lt;BR/&gt;End Type&lt;BR/&gt;Private Declare Function Module32First Lib &amp;quot;kernel32&amp;quot; (ByVal hSnapshot As Long, uProcess As MODULEENTRY32) As Long&lt;BR/&gt;Private Declare Function Module32Next Lib &amp;quot;kernel32&amp;quot; (ByVal hSnapshot As Long, uProcess As MODULEENTRY32) As Long&lt;BR/&gt;Private Declare Function CreateToolhelp32Snapshot Lib &amp;quot;kernel32&amp;quot; (ByVal lFlags As Long, ByVal lProcessID As Long) As Long&lt;BR/&gt;Private Declare Function Process32First Lib &amp;quot;kernel32.dll&amp;quot; (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long&lt;BR/&gt;Private Declare Function Process32Next Lib &amp;quot;kernel32.dll&amp;quot; (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long&lt;BR/&gt;Private Declare Function CloseHandle Lib &amp;quot;kernel32.dll&amp;quot; (ByVal hObject As Long) As Long&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;&apos;Process :&lt;BR/&gt;Dim hSnap As Long, pResult As Long, Process As PROCESSENTRY32&lt;BR/&gt;Dim pID As Long&lt;BR/&gt;&apos;Module :&lt;BR/&gt;Dim hSnapM As Long, Module As MODULEENTRY32&lt;BR/&gt;    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0(&lt;BR/&gt;    Process.dwSize = Len(Process(&lt;BR/&gt;    pResult = Process32First(hSnap, Process)&lt;BR/&gt;    Do While pResult &amp;lt;&amp;gt; 0&lt;BR/&gt;        pID = Process.th32ProcessID&lt;BR/&gt;&apos;&lt;BR/&gt;        hSnapM = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pID)&lt;BR/&gt;        Module.dwSize = Len(Module)&lt;BR/&gt;        Call Module32First(hSnapM, Module)&lt;BR/&gt;        List1.AddItem Left$(Module.szExePath, InStr(1, Module.szExePath, Chr(0)) – 1)&lt;BR/&gt;        CloseHandle hSnapM&lt;BR/&gt;&apos;&lt;BR/&gt;        pResult = Process32Next(hSnap, Process)&lt;BR/&gt;        &lt;BR/&gt;    Loop&lt;BR/&gt;    CloseHandle hSnap&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;البته با اين روش به دليلي كه نميدونم آدرس كامل يكسري از فايل ها كه تا اونجايي كه چك كردم Process  اون ها از نوع System  بود و آدرسون هم توي دايركتوريه سيستم(مثل svchost.exe) رو تابع برنميگردونه و فقط اسم اون ها رو برميگردونه!&lt;BR/&gt;بگذريم.حالا ميخواهيم برنامه اي كه قبل از اين نوشتيم رو با روش جديدي كه گفتم بنويسيم.يعني بجاي اينكه همه ي فايل هايي كه در حال اجرا هستن و اسمشون notepad.exe هستش رو ببنديم همه ي اونهايي كه آدرسشون c:\windows\systtem32\notepad.exe هست رو ببنديم.كدمون چيز جديدي نداره :&lt;BR/&gt;&lt;BR/&gt;Option Explicit&lt;BR/&gt;Private Const MAX_PATH = 260&lt;BR/&gt;Private Const TH32CS_SNAPPROCESS = &amp;amp;H2&lt;BR/&gt;Private Const TH32CS_SNAPMODULE = &amp;amp;H8&lt;BR/&gt;Private Const PROCESS_ALL_ACCESS = &amp;amp;H1F0FFF&lt;BR/&gt;Private Type PROCESSENTRY32&lt;BR/&gt;  dwSize As Long&lt;BR/&gt;  cntUsage As Long&lt;BR/&gt;  th32ProcessID As Long&lt;BR/&gt;  th32DefaultHeapID As Long&lt;BR/&gt;  th32ModuleID As Long&lt;BR/&gt;  cntThreads As Long&lt;BR/&gt;  th32ParentProcessID As Long&lt;BR/&gt;  pcPriClassBase As Long&lt;BR/&gt;  dwFlags As Long&lt;BR/&gt;  szExeFile As String * MAX_PATH&lt;BR/&gt;End Type&lt;BR/&gt;Private Type MODULEENTRY32&lt;BR/&gt;  dwSize As Long&lt;BR/&gt;  th32ModuleID As Long&lt;BR/&gt;  th32ProcessID As Long&lt;BR/&gt;  GlblcntUsage As Long&lt;BR/&gt;  ProccntUsage As Long&lt;BR/&gt;  modBaseAddr As Long&lt;BR/&gt;  modBaseSize As Long&lt;BR/&gt;  hModule As Long&lt;BR/&gt;  szModule As String * 256&lt;BR/&gt;  szExePath As String * 260&lt;BR/&gt;End Type&lt;BR/&gt;Private Declare Function Module32First Lib &amp;quot;kernel32&amp;quot; (ByVal hSnapshot As Long, uProcess As MODULEENTRY32) As Long&lt;BR/&gt;Private Declare Function Module32Next Lib &amp;quot;kernel32&amp;quot; (ByVal hSnapshot As Long, uProcess As MODULEENTRY32) As Long&lt;BR/&gt;Private Declare Function CreateToolhelp32Snapshot Lib &amp;quot;kernel32&amp;quot; (ByVal lFlags As Long, ByVal lProcessID As Long) As Long&lt;BR/&gt;Private Declare Function OpenProcess Lib &amp;quot;kernel32&amp;quot; (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long&lt;BR/&gt;Private Declare Function Process32First Lib &amp;quot;kernel32.dll&amp;quot; (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long&lt;BR/&gt;Private Declare Function Process32Next Lib &amp;quot;kernel32.dll&amp;quot; (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long&lt;BR/&gt;Private Declare Function CloseHandle Lib &amp;quot;kernel32.dll&amp;quot; (ByVal hObject As Long) As Long&lt;BR/&gt;Private Declare Function TerminateProcess Lib &amp;quot;kernel32&amp;quot; (ByVal hProcess As Long, ByVal uExitCode As Long) As Long&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;&apos;Process :&lt;BR/&gt;Dim hSnap As Long, pResult As Long, Process As PROCESSENTRY32&lt;BR/&gt;Dim pID As Long, hProcess As Long, appPath As String&lt;BR/&gt;&apos;Module :&lt;BR/&gt;Dim hSnapM As Long, Module As MODULEENTRY32&lt;BR/&gt;    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)&lt;BR/&gt;    Process.dwSize = Len(Process)&lt;BR/&gt;    pResult = Process32First(hSnap, Process)&lt;BR/&gt;    Do While pResult &amp;lt;&amp;gt; 0&lt;BR/&gt;        pID = Process.th32ProcessID&lt;BR/&gt;&apos;&lt;BR/&gt;        hSnapM = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pID)&lt;BR/&gt;        Module.dwSize = Len(Modul(&lt;BR/&gt;        Call Module32First(hSnapM, Module)&lt;BR/&gt;        appPath = Left$(Module.szExePath, InStr(1, Module.szExePath, Chr(0)) – 1)&lt;BR/&gt;        If StrComp(appPath, &amp;quot;c:\windows\system32\notepad.exe&amp;quot;, vbTextCompare) = 0 Then &apos;file name = notepad.exe &lt;BR/&gt;            pID = Module.th32ProcessID&lt;BR/&gt;            hProcess = OpenProcess(PROCESS_ALL_ACCESS, True, pID)&lt;BR/&gt;            TerminateProcess hProcess, 0&lt;BR/&gt;            CloseHandle hProcess&lt;BR/&gt;        End If &lt;BR/&gt;&lt;BR/&gt;        CloseHandle hSnapM&lt;BR/&gt;&apos;&lt;BR/&gt;        pResult = Process32Next(hSnap, Process)&lt;BR/&gt;        &lt;BR/&gt;    Loop&lt;BR/&gt;    CloseHandle hSnap&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;براي تست برنامه فايل notepad.exe رو يكبار از پوشه ي سيستم يبار  هم  از پوشه ي ويندوز باز كنين.برنامه رو اجرا كنين ميبينين فقط اوني كه توي پوشه ي سيستم هستش بسته ميشه.&lt;BR/&gt;اينهايي كه تاحالا گفتم در مورد روش اول بدست آوردن ProcessID بود.راه ديگش همونطور كه اول كار اشاره كردم استفاده از هندل يكي از پنجره هاي برنامه هستش.با اين روش مثلا ميتونين برنامه اي كه موس روش هست رو ببندين.واسه اين كار از تابع GetWindowThreadProcessId  استفاده ميكنيم تا آيديه Process  رو بدست بياريم :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetWindowThreadProcessId Lib &amp;quot;user32&amp;quot; (ByVal hwnd As Long, lpdwProcessId As Long) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول هندل مورد نظر هست.دومي هم يك متغير از نوع Long  كه تابع آيديه Process رو توش قرار ميده .(مقدار برگشتي هم آيديه Thread هستش كه كاري باش نداريم)  &lt;BR/&gt;بعد از بدست آوردن آيديه Process رو بدست آورديم مثل قبل عمل ميكنيم و برنامه مورد نظر رو ميبنديم.&lt;BR/&gt;ميخواهيم برنامه اي بنوسيم كه وقتي روي يك دكمه فشار داده ميشه برنامه اي كه موس روشه بسته بشه.واسه اين كار با تابع هاي GetCursorPos و WindowFromPoint كه قبلا در موردشون گفتم(به آرشيو مراجعه كنين) هندل پنجره اي كه موس روشه رو بدست مياريم و با روشي كه گفتم ميبنديمش :&lt;BR/&gt;&lt;BR/&gt;Option Explicit&lt;BR/&gt;Private Declare Function GetWindowThreadProcessId Lib &amp;quot;user32&amp;quot; (ByVal hwnd As Long, lpdwProcessId As Long) As Long&lt;BR/&gt;Private Declare Function OpenProcess Lib &amp;quot;kernel32&amp;quot; (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long&lt;BR/&gt;Private Declare Function CloseHandle Lib &amp;quot;kernel32.dll&amp;quot; (ByVal hObject As Long) As Long&lt;BR/&gt;Private Declare Function TerminateProcess Lib &amp;quot;kernel32&amp;quot; (ByVal hProcess As Long, ByVal uExitCode As Long) As Long&lt;BR/&gt;Private Declare Function WindowFromPoint Lib &amp;quot;user32&amp;quot; (ByVal xPoint As Long, ByVal yPoint As Long) As Long&lt;BR/&gt;Private Type POINTAPI&lt;BR/&gt;        x As Long&lt;BR/&gt;        y As Long&lt;BR/&gt;End Type&lt;BR/&gt;Private Declare Function GetCursorPos Lib &amp;quot;user32&amp;quot; (lpPoint As POINTAPI) As Long &lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;Dim wHandle As Long, PAPI As POINTAPI, pID As Long, hProcess As Long&lt;BR/&gt;    GetCursorPos PAPI&lt;BR/&gt;   wHandle = WindowFromPoint(PAPI.x, PAPI.y)&lt;BR/&gt;   GetWindowThreadProcessId wHandle, pID&lt;BR/&gt;   hProcess = OpenProcess(PROCESS_ALL_ACCESS, True, pID)&lt;BR/&gt;   TerminateProcess hProcess, 0&lt;BR/&gt;   CloseHandle hProcess&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;توي اين كد چون بايد موس روي برنامه اي باشه كه بايد بسته بشه با خود موس نميتونين روي دكمه كليك كنين چون برنامه ي خودتون بسته ميشه!!! Focus رو بهش بدين و با Enter كردن اونو فشار بدين!!!!!  :پي&lt;BR/&gt;&lt;BR/&gt;توي اين پست روش هايي واسه بستن Processبرنامه ها  رو گفتم.هدف من از گفتن اين مطلب ها فقط راه بستن Process نبود..با بدست آوردن ProcessID كارهاي زيادي در مورد Process ها و Thread ها و .. ميشه كرد كه اينجا 2 تا روش براي اين كار گفتم&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;*****************************&lt;BR/&gt;اموزش برنامه نویسی یک Consol توسط API&lt;BR/&gt;&lt;BR/&gt;ميخوام در مورد درست كردن يه برنامه Console توي ويژوال بيسيك با API توضيح بدم(البته خيلي مختصر).خود ويبي امكان درست كردن Console Application رو نداره.&lt;BR/&gt;&lt;BR/&gt;درسته كه برنامه هاي Console  ي كه توي Windows32 درست ميكنيم ظاهرا خيلي فرقي با برنامه هاي تحت داس ندارن اما در محيط داس قابل اجرا نيستن و فقط توي محيط ويندوز ميشه ازشون استفاده كرد.&lt;BR/&gt;&lt;BR/&gt;كارهايي كه كلا بايد انجام بديم اينه كه اول يه instance از پنجره ي كنسول درست كنيم و  قسمتي از حافظه رو  به كنسول مورد نظرمون اختصاص بديم...يه هندل واسه نوشتن،يه هندل واسه خواندن و يه هندل براي دستگيري خطا درست كنيم و عمل خواندن و نوشتن رو  توي كنسول انجام بديم.وقتي اعمال خواندن و نوشتن اطلاعات (تبادل اطلاعات متني بين برنامه و كاربر كه تنها كاريه كه يه كنسول ميتونه بكنه!) تموم شد طبيعتا برنامه كنسول ما بايد تموم بشه پس اون رو ميبنديم و حافظه اي كه بش اختصاص داده شده رو آزاد ميكنيم. &lt;BR/&gt;&lt;BR/&gt;پس براي اولين مرحله تابع AllocConsole  رو فراخواني ميكنيم :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function AllocConsole Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;AllocConsole&amp;quot; () As Long&lt;BR/&gt;&lt;BR/&gt;كه آرگوماني هم نداره.&lt;BR/&gt;آخرين مرحله هم آزاد كردن كنسول هست كه از تابع FreeConsole  استفاده ميشه :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function FreeConsole Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;FreeConsole&amp;quot; () As Long&lt;BR/&gt;&lt;BR/&gt;حالا براي مثال ما فقط ميخواهيم با لود شدن فرم يك كنسول رو نشون بديم  و با كليك كردن روي دكمه اون رو ببنديم قبل از اينکه اين کد رو توی پروژتون وارد کنين بخاطر مشکلاتی که ممکنه پيش بياد و ويژوال بيسيک ناگهانی بسته بشه(اند ضدحال) و هنگ کنه و اينا اگه به جای اينکه واسه اجرای برنامه از ديباگ استفاده کنين ٬ فايل Exe درست کنين و اونو اجرا کنين بهتره:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function FreeConsole Lib &amp;quot;kernel32&amp;quot; () As Long&lt;BR/&gt;Private Declare Function AllocConsole Lib &amp;quot;kernel32&amp;quot; () As Long &lt;BR/&gt;&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;    FreeConsole&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;    AllocConsole&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;خوب اين كنسول ما هيچ كاري انجام نميده.ميريم سراغ عمل نوشتن و خواندن.&lt;BR/&gt;همونطور كه گفتم براي خواندن بايد يه هندل ايجاد كنيم.براي اين كار از تابع  GetSTDHandle استفاده ميشه:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function GetStdHandle Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;GetStdHandle&amp;quot; (ByVal nStdHandle As Long) As Long&lt;BR/&gt;&lt;BR/&gt;اين تابع 1 آرگومان ميگيره كه يكي از اين ها ميتونه  باشه :&lt;BR/&gt;&lt;BR/&gt;STD_ERROR_HANDLE  دستگيره براي خطا&lt;BR/&gt;STD_INPUT_HANDLE   دستگيره براي خواندن&lt;BR/&gt;STD_OUTPUT_HANDLE  دستگيره براي نوشتن&lt;BR/&gt;&lt;BR/&gt;بعد از ايجاد هندل براي نوشتن توي كنسول از تابع WriteConsole  استفاده ميشه: &lt;BR/&gt;&lt;BR/&gt;Private Declare Function WriteConsole Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;WriteConsoleA&amp;quot; (ByVal hConsoleOutput As Long, lpBuffer As Any, ByVal nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten As Long, lpReserved As Any) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول همون هندل براي نوشتنه.دومي متني كه ميخواهيم چاپ بشه.بعدي تعداد كاراكتريه كه ميخواهيم چاپ بشه كه ما به طور پيشفرض طول متني كه ميخواهيم چاپ بشه رو ميگذاريم.2 تا آرگومان بعدي رو هم vbNull قرار بدين.&lt;BR/&gt;&lt;BR/&gt;حالا همون برنامه ي قبلي رو طوري تغيير ميديم كه وقتي پنجره ي كنسول نشون داده شد يك متن چاپ بشه :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function WriteConsole Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;WriteConsoleA&amp;quot; (ByVal hConsoleOutput As Long, lpBuffer As Any, ByVal nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten As Long, lpReserved As Any) As Long&lt;BR/&gt;Private Declare Function AllocConsole Lib &amp;quot;kernel32&amp;quot; () As Long&lt;BR/&gt;Private Declare Function FreeConsole Lib &amp;quot;kernel32&amp;quot; () As Long&lt;BR/&gt;Private Declare Function GetStdHandle Lib &amp;quot;kernel32&amp;quot; (ByVal nStdHandle As Long) As Long&lt;BR/&gt;Private Const STD_ERROR_HANDLE = -12&amp;amp;&lt;BR/&gt;Private Const STD_INPUT_HANDLE = -10&amp;amp;&lt;BR/&gt;Private Const STD_OUTPUT_HANDLE = -11&amp;amp; &lt;BR/&gt;&lt;BR/&gt;Dim whandle As Long&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;    FreeConsole&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;    AllocConsole&lt;BR/&gt;    whandle = GetStdHandle(STD_OUTPUT_HANDLE)&lt;BR/&gt;SendOutPut &amp;quot;This is a w32 console application!&amp;quot;&lt;BR/&gt;End Sub&lt;BR/&gt;Sub SendOutPut(strOutPut As String)&lt;BR/&gt;     WriteConsole whandle, ByVal strOutPut, Len(strOutPut), vbNull, vbNull&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;توي اين كد من براي نوشتن يه تابع جدا درست كردم.در ضمن به چگونگي ارسال متن به تابع توجه كنين.&lt;BR/&gt;&lt;BR/&gt;حالا ميريم سراغ خوندن.اول با همون تابع GetSTDHandle و دادن آرگومان  STD_INPUT_HANDLEيه هندل واسه خواندن درست ميكنيم.بعد با تابع  ReadConsole يه متن رو ميخونيم:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function ReadConsole Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;ReadConsoleA&amp;quot; (ByVal hConsoleInput As Long, lpBuffer As Any, ByVal nNumberOfCharsToRead As Long, lpNumberOfCharsRead As Long, lpReserved As Any) As Long&lt;BR/&gt;&lt;BR/&gt;آرگومان اول هندل ايجاد شدس.دومي يه متغير هستش كه متن خونده شده توش قرار ميگيره.سومي حداكثر تعداد كاراكتريه كه ميخواهيم خونده بشه و طبيعتا از طول متغيري كه به عنوان آرگومان دوم به تابع داديم نبايد بيشتر باشه.2 تاي ديگه رو هم vbNull  بزارين. &lt;BR/&gt;&lt;BR/&gt;حالا برنامه رو طوري تغيير ميديم كه توي اون پنجره ي كنسول يه متن رو بخونه.بعد از خوندن متن يه پيغام كه حاوي متن هستش نشون داده بشه:&lt;BR/&gt;&lt;BR/&gt;Private Declare Function ReadConsole Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;ReadConsoleA&amp;quot; (ByVal hConsoleInput As Long, lpBuffer As Any, ByVal nNumberOfCharsToRead As Long, lpNumberOfCharsRead As Long, lpReserved As Any) As Long&lt;BR/&gt;Private Declare Function WriteConsole Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;WriteConsoleA&amp;quot; (ByVal hConsoleOutput As Long, lpBuffer As Any, ByVal nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten As Long, lpReserved As Any) As Long&lt;BR/&gt;Private Declare Function AllocConsole Lib &amp;quot;kernel32&amp;quot; () As Long&lt;BR/&gt;Private Declare Function FreeConsole Lib &amp;quot;kernel32&amp;quot; () As Long&lt;BR/&gt;Private Declare Function GetStdHandle Lib &amp;quot;kernel32&amp;quot; (ByVal nStdHandle As Long) As Long&lt;BR/&gt;Private Const STD_ERROR_HANDLE = -12&amp;amp;&lt;BR/&gt;Private Const STD_INPUT_HANDLE = -10&amp;amp;&lt;BR/&gt;Private Const STD_OUTPUT_HANDLE = -11&amp;amp; &lt;BR/&gt;&lt;BR/&gt;Dim whandle As Long&lt;BR/&gt;Dim rhandle As Long&lt;BR/&gt;Dim Result As String&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;    AllocConsole&lt;BR/&gt;    whandle = GetStdHandle(STD_OUTPUT_HANDLE(&lt;BR/&gt;    rhandle = GetStdHandle(STD_INPUT_HANDLE(&lt;BR/&gt;    SendOutPut &amp;quot;This is a w32 console application! , Enter a text :&amp;quot; &amp;amp; vbCrLf&lt;BR/&gt;     Result = GetinPut&lt;BR/&gt;     MsgBox Result,vbSystemModal&lt;BR/&gt;     FreeConsole&lt;BR/&gt;End Sub&lt;BR/&gt;Sub SendOutPut(strOutPut As String(&lt;BR/&gt;     WriteConsole whandle, ByVal strOutPut, Len(strOutPut), vbNull, vbNull&lt;BR/&gt;End Sub&lt;BR/&gt;Function GetinPut() As String&lt;BR/&gt;    Dim strInput As String * 256&lt;BR/&gt;    ReadConsole rhandle, ByVal strInput, Len(strInput), vbNull, vbNull&lt;BR/&gt;    GetinPut =  Left(strInput, InStr(strInput,Chr(0)) - 3)&lt;BR/&gt;End Function&lt;BR/&gt;&lt;BR/&gt;چون ما نميدونيم مقداري كه كاربر وارد ميكنه طولش چقدره يه مقدار پيشفرض در نظر ميگيريم(اينجا 256)  كه اين مقدار رو  به دلخواه ميتونيم تغيير بديم.&lt;BR/&gt;باز هم به چگونگي ارسال متغير -ي كه متن توش قرار ميگيره- كه به تابع ارسال ميشه توجه كنين.&lt;BR/&gt;البته متني كه خونده ميشه  كاراكتر هاي اضافه داره.همونطور كه گفتم چون ما طول رشته اي كه كاربر ميخواد  وارد كنه رو نميدونيم  يه طول پيشفرض در نظر گرفتيم و رشته رو از يه كاراكتر خاص پر كرديم مثلا از كاراكتر نال (كد اسكي 0)  .علاوه بر اين كاراكتر ها 2 تا كاراكتر اضافه ي ديگه هم به آخر وردوي اضافه ميشن.يكي كاراكتر با كد اسكي 13 و بعدي 10 (همون Newline  و Return و يا vbCrLf) مثلا اگه اول كار رشته اي كه به تابع داديم مقدارش توي حافظه اين بوده :&lt;BR/&gt;&lt;BR/&gt;00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00&lt;BR/&gt;&lt;BR/&gt;و وروديه كاربر متن API  بوده باشه رشته بعد از خوندن ميشه: &lt;BR/&gt;&lt;BR/&gt;65 80 73 13 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00&lt;BR/&gt;&lt;BR/&gt;كه ما با يه Left و ۳InStr تا كاراكتر اول رو جدا ميكنيم.&lt;BR/&gt;&lt;BR/&gt;حالا با تركيب عمل خوندن و نوشتن يه برنامه مينويسيم كه يكي از سه مقدار  C B A  رو بگيره و در مقابل مقدار گرفته شده به ترتيب زمان ، تاريخ و يا هر دو رو چاپ كنه.اگه مقدار وارد شده چيزه ديگه اي بود، برنامه بسته بشه.&lt;BR/&gt;در ضمن اينجا ديگه از فرم استفاده نميكنيم چون ميخواهيم برنامه مثل يه Console  واقعي بشه.پس فرم رو حذف كنيد و يه Module  به پروژه اضافه كنين و كد زير رو توي Module  وارد كنين :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function ReadConsole Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;ReadConsoleA&amp;quot; (ByVal hConsoleInput As Long, lpBuffer As Any, ByVal nNumberOfCharsToRead As Long, lpNumberOfCharsRead As Long, lpReserved As Any) As Long&lt;BR/&gt;Private Declare Function WriteConsole Lib &amp;quot;kernel32&amp;quot; Alias &amp;quot;WriteConsoleA&amp;quot; (ByVal hConsoleOutput As Long, lpBuffer As Any, ByVal nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten As Long, lpReserved As Any) As Long&lt;BR/&gt;Private Declare Function AllocConsole Lib &amp;quot;kernel32&amp;quot; () As Long&lt;BR/&gt;Private Declare Function FreeConsole Lib &amp;quot;kernel32&amp;quot; () As Long&lt;BR/&gt;Private Declare Function GetStdHandle Lib &amp;quot;kernel32&amp;quot; (ByVal nStdHandle As Long) As Long&lt;BR/&gt;Private Const STD_ERROR_HANDLE = -12&amp;amp;&lt;BR/&gt;Private Const STD_INPUT_HANDLE = -10&amp;amp;&lt;BR/&gt;Private Const STD_OUTPUT_HANDLE = -11&amp;amp; &lt;BR/&gt;&lt;BR/&gt;Dim whandle As Long&lt;BR/&gt;Dim rhandle As Long&lt;BR/&gt;Dim Result As String&lt;BR/&gt;Private Sub Main()&lt;BR/&gt;    AllocConsole&lt;BR/&gt;    whandle = GetStdHandle(STD_OUTPUT_HANDLE)&lt;BR/&gt;    rhandle = GetStdHandle(STD_INPUT_HANDLE)&lt;BR/&gt;    SendOutPut &amp;quot;Press one of the following keys,any other key to exit :&amp;quot; &amp;amp; vbCrLf &amp;amp; _&lt;BR/&gt;        &amp;quot;A to get time&amp;quot; &amp;amp; vbCrLf &amp;amp; _&lt;BR/&gt;        &amp;quot;B to get date&amp;quot; &amp;amp; vbCrLf &amp;amp; _&lt;BR/&gt;        &amp;quot;C to get both&amp;quot; &amp;amp; vbCrLf&lt;BR/&gt;    While True&lt;BR/&gt;     Result = UCase(GetinPut)&lt;BR/&gt;     Select Case Result&lt;BR/&gt;        Case &amp;quot;A&amp;quot;&lt;BR/&gt;            SendOutPut &amp;quot;Time is &amp;quot; &amp;amp; CStr(Time) &amp;amp; vbCrLf&lt;BR/&gt;        Case &amp;quot;B&amp;quot;&lt;BR/&gt;            SendOutPut &amp;quot;Date is &amp;quot; &amp;amp; CStr(Date) &amp;amp; vbCrLf&lt;BR/&gt;        Case &amp;quot;C&amp;quot;&lt;BR/&gt;            SendOutPut &amp;quot;Now is &amp;quot; &amp;amp; CStr(Now) &amp;amp; vbCrLf&lt;BR/&gt;        Case Else&lt;BR/&gt;            FreeConsole&lt;BR/&gt;            End&lt;BR/&gt;    End Select&lt;BR/&gt;    Wend&lt;BR/&gt;End Sub&lt;BR/&gt;Sub SendOutPut(strOutPut As String)&lt;BR/&gt;     WriteConsole whandle, ByVal strOutPut, Len(strOutPut), vbNull, vbNull&lt;BR/&gt;End Sub&lt;BR/&gt;Function GetinPut() As String&lt;BR/&gt;    Dim strInput As String * 256&lt;BR/&gt;    ReadConsole rhandle, ByVal strInput, Len(strInput), vbNull, vbNull&lt;BR/&gt;    GetinPut = Left(strInput, InStr(strInput, Chr(0)) - 3)&lt;BR/&gt;End Function&lt;BR/&gt;&lt;BR/&gt;خوب! اينم از اين مبحث.البته توابع مختلفي واسه كار با Console  ها هست مثلا واسه رنگي نوشتن و ...</description>
<pubDate>Fri, 23 Feb 2007 13:17:09 GMT</pubDate>
<comments>http://commenting.blogfa.com/?blogid=vblog&amp;postid=67</comments>
<dc:creator>vblog</dc:creator>
<guid>http://vblog.blogfa.com/post-67.aspx</guid>
</item>
<item>
<title>اموزش ویژوال بیسیک</title>
<link>http://vblog.blogfa.com/post-66.aspx</link>
<description>اینم یک مثال برای اقا حمید که راست به چپ کردن ListView را خواسته بودند&lt;BR/&gt;http://www.sharemation.com/MahdiVB678/right%20to%20left%20list%20view%20in%20vb.rar?uniq=6zshb6&lt;BR/&gt;فقط ادرس بالا رو در ادرس بار مرورگرت کپی کن و اینتر کن&lt;BR/&gt;موفق باشی&lt;BR/&gt;&lt;BR/&gt;سلام دوستان اینم توضیح بعضی فایلهای اساسی ویندوز که خواسته بودید&lt;BR/&gt;Ntoskrnl.exe : فایلی است که می توانیم عکس موردنظر را به جای لوگوی ویندوز عوض کنیم&lt;BR/&gt;Autoexec.bat : این فایل سیستمی در ویندوزهای 2000 ، me ، xp و 98 مورد استفاده قرار می گیرد . مکان این فایل معمولاً پوشه ی windows می باشد فایل مذکور یک فایل متنی بوده و حاوی فرمانهایی است که در طی عمل راه اندازی سیستم (خصوصاً سیستم عامل های قدیمی تر ) اجرا می شوند&lt;BR/&gt;Boot.ini : این فایل سیستمی در ویندوزهای xp ، 2000 استفاده دارد و امکان آن نیز معمولاً پوشه ی windows می باشد . این فایل فهرستی از تمام سیستم عامل های موجود را نشان می دهد و به کاربر اجازه می دهد از میان آنها ، سیستم عاملی را که می خواهد راه اندازی شود را انتخاب کند&lt;BR/&gt;Cidaemon.exe : از این فایل سیستمی در ویندوزهای 2000 و xp استفاده می شود مکان این فایل پوشه ی system32 می باشد فایل مذکور معرف microsaft indexing service است و از آن برای به فهرست در آوردن فایل در ویندوزهای 2000 و xp استفاده می شود&lt;BR/&gt;سرویسی که این فایل ارائه می دهد indexing service content نام دارد این فایل به کنترل حافظه ی سیستم پرداخته و از استفاده بیش از حد حافظه توسط فایل cidaemon.exe جلوگیری می کند&lt;BR/&gt;Cmd.exe : این فایل سیستمی در ویندوزهای xp و 2000 کاربرد دارد . مکان این فایل پوشه ی system32 است . این فایل یک مفسرفرمان 32 بیتی می باشد&lt;BR/&gt;Command.com : این فایل سیستمی در ویندوزهای me ,98 استفاده می باشد . این فایل بر روی پوشه ی windows قرار دارد . این فایل یک مفسر فرمان 16 بیتی است&lt;BR/&gt;Config.sys : از این فایل در ویندوزهای 2000 ، me ، xpو 98 استفاده می شود . این فایل متنی بر روی پوشه windows قرار دارد و حاوی فرمانهای است که راه اندازها را بارگزاری کرده و پسوندهای اجرایی را در حین راه اندازی سیستم عامل فعال می سازد . &lt;BR/&gt;Csrss.exe : این فایل سیستمی در ویندوزهای xp,2000 کاربرد دارد . این فایل در پوشه ی system32 قرار گرفته است . این فایل معرف client server runtime subsystem است و از آن برای برقراری ارتباط ویندوز استفاده می شود&lt;BR/&gt;Drvspace.bin : از این فایل سیستمی در ویندوزهای 98 , me استفاده می شود . این فایل در پوشه ی windows قرار گرفته است . این فایل پوسته گرافیکی ویندوز است و ویژگی های مختلفی چون منوی start و نوار وظیفه را فراهم می کند&lt;BR/&gt;Io.sys : از این فایل درویندوزهای 2000 ، me ، xpو 98 استفاده می شود . این فایل در پوشه ی windows قرار دارد . این فایل در حقیقت سیستم عامل اولیه ای 16 بیتی است که عمل راه اندازی کامپیوتر را شروع می کند و بخش 32 بیتی ویندوز اجازه می دهد که بالا بیاید&lt;BR/&gt;Kernel32.du : این فایل در ویندوزهای 2000 ، xpو 98 کاربرد دارد . مکان این فایل در پوشه ی system32 و یا system است . این فایل سرویسهای هسته ای ویندوز را برای مدیریت حافظه ، منابع سیستم و ... فراهم می کند&lt;BR/&gt;&lt;BR/&gt;برنامه ای برای هک کردن ID و کارت اینترنت که اسمش TAK-ps  BETA است&lt;BR/&gt;golha.net\ghasem\tak-ps.zip&lt;BR/&gt;&lt;BR/&gt;برنامه ای برای یافتن پسورد ادمین ویندوز XP&lt;BR/&gt;http://www.mdvirus.persiangig.com/Hack-%20Admin/XP%20Admin%20Cracker.zip&lt;BR/&gt;&lt;BR/&gt;کامپایل اکسپلویت با VC++&lt;BR/&gt;http://nasser-desperado.persiangig.com/video/Compile-exploit-c.rar&lt;BR/&gt;&lt;BR/&gt;برنامه ای برای چک کردن پروفایل&lt;BR/&gt;ID خود را بنویسید بعد همه مشخصات پروفایل را نگاه کنید&lt;BR/&gt;http://www.mdvirus.persiangig.com/Saftwere%20Yahoo/Get%20ID%20Profile.exe&lt;BR/&gt;&lt;BR/&gt;برنامه ای برای پاک کردن انتی ویروس در سیستم NOD32&lt;BR/&gt;http://www.mdvirus.persiangig.com/kill%20%20%20(NOD32)/ANTINOD32.exe&lt;BR/&gt;&lt;BR/&gt;اضافه کردن ایکون به منو &lt;BR/&gt;http://iranvig.com/upload/program/userprog/1123311821Project1.zip&lt;BR/&gt;&lt;BR/&gt;سورس دیکشنری&lt;BR/&gt;http://iranvig.com/upload/program/userprog/1122546317SkinControl.zip&lt;BR/&gt;&lt;BR/&gt;نشان دادن فونت های سیستم به شکل خودشون در Combo Box&lt;BR/&gt;http://iranvig.com/upload/program/userprog/1143060394Font.zip&lt;BR/&gt;&lt;BR/&gt;تبدیل فایل های فلش SWF به SCR  ( محافظ صفحه نمايش )&lt;BR/&gt;http://iranvig.com/upload/program/userprog/1137787767SWF2SCR.zip&lt;BR/&gt;&lt;BR/&gt;با این کد از صفحه نمایش فیلم بگیرید&lt;BR/&gt;http://iranvig.com/upload/program/userprog/1134081859Fi%20a%20acr.zip&lt;BR/&gt;&lt;BR/&gt;این سورس عکس رو به AVI  تبديل ميکنه&lt;BR/&gt;http://iranvig.com/upload/program/userprog/1133124378PIC2AVI.zip&lt;BR/&gt;&lt;BR/&gt;اين سورس صداي فايل swf  رو جدا ميكنه  مثل كليپ ها و ...&lt;BR/&gt;http://iranvig.com/upload/program/userprog/1131909071SWFs.zip&lt;BR/&gt;&lt;BR/&gt;این سورس فایل های صوتی رو اجرا میکنه مثل MP3  کاربرد زياد داره&lt;BR/&gt;http://iranvig.com/upload/program/userprog/1131617424Mp3.zip&lt;BR/&gt;&lt;BR/&gt;ویروس VBLove&lt;BR/&gt;امکاناتی مثل مخفی کردن نشانه گر ماوس و مخفی کردن آیکن های Desktop  و . . .&lt;BR/&gt;http://iranvig.com/upload/program/userprog/1130803460VBLOVE.zip&lt;BR/&gt;&lt;BR/&gt;اين هم يک کد توپ برای بانک اطلاعاتي  &lt;BR/&gt;وصل شدن به بانک اطلاعاتي با کد نويسي و جستجو و ....&lt;BR/&gt;http://iranvig.com/upload/program/userprog/1138481745Anbar2.zip&lt;BR/&gt;&lt;BR/&gt;با این برنامه یک پیغام رو میتونید تو عکس بزارید&lt;BR/&gt;یا پیغامی رو که دوست شما تو یه عکس گذاشته رو با این برنامه بخونی&lt;BR/&gt;یعنی هر دو باید این برنامه رو داشته باشین&lt;BR/&gt;http://iranvig.com/upload/program/userprog/1138481511MS2Pic.zip&lt;BR/&gt;&lt;BR/&gt;یک سورس برای تبدیل  FAT32  2  NTFS &lt;BR/&gt;http://iranvig.com/upload/program/userprog/1127221140FAT%202%20NTFS.zip&lt;BR/&gt;&lt;BR/&gt;یک برنامه برای ویرایش و تبدیل فرمت انواع عکس&lt;BR/&gt;http://www.iranvig.com/upload/program/userprog/1121060957Photo%20Editor%201.0.zip&lt;BR/&gt;&lt;BR/&gt;این برنامه برای ساخت درایو مجازی استفاده می شود&lt;BR/&gt;http://www.iranvig.com/upload/program/userprog/1136751292dr.zip&lt;BR/&gt;&lt;BR/&gt;تبدیل عکس به Exe&lt;BR/&gt;http://www.iranvig.com/upload/program/userprog/1125514646Picture%20to%20exe.zip&lt;BR/&gt;&lt;BR/&gt;این سورس برای قرار دادن یک قاب زیبا دور یک عکس و گرفتن عکس از فرم به کار میره&lt;BR/&gt;http://www.iranvig.com/upload/program/userprog/11252098111.zip&lt;BR/&gt;&lt;BR/&gt;Res فايل ( چند فایل در یک فایل ) اين هم عکس در فايل رس با VB6&lt;BR/&gt;http://www.iranvig.com/upload/program/userprog/1124883004Res.Zip&lt;BR/&gt;&lt;BR/&gt;Jpg to Swf &lt;BR/&gt;http://www.iranvig.com/upload/program/userprog/1124700167J2S.zip&lt;BR/&gt;&lt;BR/&gt;اين برنامه يک سري اطلاعات سيستم را به شما ميده&lt;BR/&gt;مانند : هارد....  و اطلاعات رو به صورت عکس ذخیره میکنه&lt;BR/&gt;http://www.iranvig.com/upload/program/userprog/1123438559Infi.zip&lt;BR/&gt;&lt;BR/&gt;ساخت اشیا مثل ( تکست باکس و دکمه و ..... ) با کد نویسی&lt;BR/&gt;http://www.iranvig.com/modules.php?name=News&amp;amp;file=log&amp;amp;sid=3029&amp;amp;kind=1&lt;BR/&gt;&lt;BR/&gt;یه ویروس جالب&lt;BR/&gt;محدود کردن بعضی از نقاط سیستم &lt;BR/&gt;1 - خاموش کردن  regedit&lt;BR/&gt;- 2 خاموش کردن add\remove&lt;BR/&gt;3 - خاموش کردن mmc&lt;BR/&gt;4 - خاموش کردن Screen Saver&lt;BR/&gt;توصیه میکنم اجرا نکیند&lt;BR/&gt;http://www.mina-eilia.persiangig.com/IH@TEYOU.zip&lt;BR/&gt;پسوردش هم 12 است&lt;BR/&gt;&lt;BR/&gt;برنامه ای برای فقل کردن پوشه ها &lt;BR/&gt;برنامه ای برای مدیرت پوشه ها &lt;BR/&gt;این برنامه می تونه پوشه شما رو در حالت disbale , control pannel  غيره.... کند&lt;BR/&gt;ویژگی های برنامه :گذاشتن پسورد برای برنامه ,خاصيت آيكون روي پوشه ,خاصيت خاموش كردن پوشه&lt;BR/&gt;گذاشتن ايكن كنترل پنل بر روي پوشه و خاصيت سطل زباله ويندوز وغيره&lt;BR/&gt;http://www.mina-eilia.persiangig.com/LockFolderXP.zip&lt;BR/&gt;&lt;BR/&gt;اموزش ساخت loading... برای شما &lt;BR/&gt;اول یک متغیر درست می کنیم&lt;BR/&gt;Dim i As Integer&lt;BR/&gt;روی فرم کلیک می کنیم&lt;BR/&gt;Private Sub Form_Activate &lt;BR/&gt;startup.Enabled = True&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;بعد دو کلید  ctrl+t با هم فشار می هیم &lt;BR/&gt;شما باید این گزینه microsoft windows common controls 6.0 را فعال کنید بعد ok  کنید&lt;BR/&gt;و یک ProgressBar1 را به فرم اضافه کنید&lt;BR/&gt;و بعد یه timer  درست می کنیم با نام startup &lt;BR/&gt;و بعد در قسمت خصوصیات timer &lt;BR/&gt;enbale=false  &lt;BR/&gt;interval =170 &lt;BR/&gt;left =6360&lt;BR/&gt;top=5160  قرار میدهیم  &lt;BR/&gt;روی timer در فرم دوبار کلیک می کنیم و این کد را وارد می کنیم &lt;BR/&gt;&lt;BR/&gt;Private Sub STARTRUN_Timer &lt;BR/&gt;If i = 99 Then&lt;BR/&gt;Unload Me&lt;BR/&gt;STARTup.Enabled = False&lt;BR/&gt;End If&lt;BR/&gt;i = i + 1&lt;BR/&gt;ProgressBar1.Value = ProgressBar1.Value + 1&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;بچه ها در یکی از پست های پایین ( اواسط وبلاگ ) با عنوان ترفند مطالب جدیدی رو نوشتم &lt;BR/&gt;چون بچه ها در نظر سنجی بیشتر خواهان اموزش ساخت ویروس بودند&lt;BR/&gt;اموزش ساخت  ویروس رو گذاشتم و منتظر سری جدید ویروس ها باشید&lt;BR/&gt;&lt;BR/&gt;سلام اقا امیر&lt;BR/&gt;اقا امیر فکر میکنم شما باید برنامه خودتون رو به ویندوز بشناسونین تا از این به بعد برنامه شما به جای برنامه پیش فرض ویندوز اجرا بشه که برای این کار ابتدا وارد Folder Option ویندوز شوید و وارد سر برگ File Type شوید و فرمت تصویری مورد نظرتون رو انتخاب کنید و سپس روی دکمه Change کلیک کنید و در پنجره ظاهر شده دکمه Browse رو بزنید و برنامه خودتون رو انتخاب کنید و اگر میخواهید که این کار برای همیشه باشد گزینه Always .... رو در اون پنچره فعال کنید و Ok کنید حالا تصویر مورد نظرتون رو اجرا کنید و نتیجه را به من بگید&lt;BR/&gt;&lt;BR/&gt;جواب اقا حسام عزیز&lt;BR/&gt;httpwww.sharemation.comMahdiVB678SocketProgramming.zipuniq=-8v8jiu&lt;BR/&gt;&lt;BR/&gt;خانم ریسی ایمیلتون رو دریافت کردم اینم جوابتون&lt;BR/&gt;http://iranvig.com/upload/program/userprog/1138481745Anbar2.zip&lt;BR/&gt;&lt;BR/&gt;جواب یک ناشناس که اموزش فایل های res رو خواسته بودند&lt;BR/&gt;http://cuinl.tripod.com/tutorials.htm&lt;BR/&gt;&lt;BR/&gt;جواب اقا حامد عزیز&lt;BR/&gt;http://www.sharemation.com/MahdiVB678/new2/pic%20copy.rar?uniq=-goka35&lt;BR/&gt;&lt;BR/&gt;جواب حسین اقا&lt;BR/&gt;http://www.sharemation.com/MahdiVB678/new2/amoozeshgah.rar?uniq=-goka2z&lt;BR/&gt;&lt;BR/&gt;جواب اقا امیر عزیز&lt;BR/&gt;برای قرار دادن علامت سوال روی نوار عنوان ابتدا باید border style فرم رو در حالت 3 قرار دهی و سپس&lt;BR/&gt;در قسمت پایین پنجره خصوصیات خصوصیت What this button رو true کنی و بعد از منوی پروژه گزینه اخر&lt;BR/&gt;را انتخاب کنی و یک فایل راهنما که قبلا درست کردی به برنامه اضافه کنی و بعد هر شی که روی فرم قرار&lt;BR/&gt;دادی help contex id اون رو به شماره مورد نظر که در فایل راهنتمات طراحی کردی ( که امیدوارم بلد باشی)&lt;BR/&gt;که ساخت این فایل ها با برنامه های مخصوصش است که اگه نمیدونستی بگو تا نامشونو بگم و یه توضیح&lt;BR/&gt;مختصر بدم .... تغییر بدیو بعد برنامه رو اجرا کنی و روی علامت سوال کلیک و سپس روی شی کلیک کنی&lt;BR/&gt;که توضیح درون فایل راهنمات به صورت tool tip اجرا میشود&lt;BR/&gt;&lt;BR/&gt;سوال دوم در مورد اجرای برنامه ها امیر اقا (از دست من ناراحت نشو عزیزم وقت نکردم)&lt;BR/&gt;Option Explicit&lt;BR/&gt;Dim c As New Shell&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;&apos; in refrence select microsoft shell control and automasion&lt;BR/&gt;Dim a As String&lt;BR/&gt;Dim b As String&lt;BR/&gt;a = Environ(&amp;quot;windir&amp;quot;)&lt;BR/&gt;b = &amp;quot;\regedit.exe&amp;quot;&lt;BR/&gt;b = a + b&lt;BR/&gt;MsgBox b&lt;BR/&gt;c.Open b&lt;BR/&gt;End Sub&lt;BR/&gt;براي اجراي هر برنامه فقط قسمت اخر ادرس اونو را مثل من در کدها قرار بده  بعد برنامه خودش مسير ويندوز رو تشخيص ميدهد و اجراش مي کند&lt;BR/&gt;&lt;BR/&gt;سوالی در مورد کار با اسکنر و دريافت تصوير از آن در ويژوال بيسيک&lt;BR/&gt;بايد از کتابخانه هايی که برای اين منظور ارائه شده اند استفاده کنيد .يکی از اين کتابخانه ها EZ Twain می باشد .برای دريافت dll مربوط به اين کتابخانه و نيز دريافت يک برنامه نمونه کار با اين dll در وي بي اینجا http://www.geocities.com/smigman.geo/mci/eztwain.zip را کليک کنيد &lt;BR/&gt;&lt;BR/&gt;يکی از دوستان در مورد نحوه ايجاد فايلهای exe توسط وِيژوال بيسيک سوال کرده اند&lt;BR/&gt;برای ايجاد يک فايل exe توسط برنامه های وي بي بايستی با ساختارهای فايلهای اجرايی آشنا باشيد . برای مثال در مورد Winzip که سوال کرديد چگونه يک Self Extractor می سازد بايد گفت که احتمالاً Winzip يک برنامه اجرايی آماده دارد که يک داده خاص را که در بخش مشخصی از ساختار فايل آن قراردارد extract می کند . در زمان ساخت فايل extractor داده های مربوط به فايلهای zip شما را در فايل اجرايی و در آن محل مشخص بعنوان داده قرار می دهد .&lt;BR/&gt;برای آشنايی با ساختار فايلهای اجرايی به کتابهای windows system programming مراجعه کنيد&lt;BR/&gt;&lt;BR/&gt;چگونه برای MP3 Player خودم در وي بي رقص نور مانند Winamp درست کنم ؟&lt;BR/&gt;پاسخ : بایستی از ترکیبی از الگوریتم های ریاضی و گرافیکی استفاده کنید . این روشها بسیار متنوع بوده است . اگر در اینترنت کمی بگردید به جواب خواهید رسید.من خودم یه نمونه از اینترنت پیدا کردم&lt;BR/&gt;&lt;BR/&gt;لطفاً در مورد hwnd یا همان هندل فرمها توضیح کامل بدهید .&lt;BR/&gt;پاسخ : هر فرم در یک برنامه کاربردی در ویندوز با استفاده از الحاق یک دستگیره یا هندل به آن مشخص می شود . این هندل را با hWnd ( یا HWindow ) نیز نشان می دهیم . برخی توابع کتابخانه ای ویندوز به خاصین هندل فرم جاری بعنوان یک آرگومان نیاز دارند تا عملی را بر روی آن فرم انجام دهند . بعبارت دیگر توسط هندل یک فرم می توان به مشخصات و خصوصیات آن فرم دسترسی داشت . خاصیت هندل فرم در ویژوال بيسيک خاصیتی فقط خواندنی است .&lt;BR/&gt;باید توجه داشت که هندل یک فرم با هندل زمینه دستگاه آن متفات است . &lt;BR/&gt;زمینه دستگاه یا device context یکی دیگر از مشخصات یک فرم می باشد . در ویندوز هر سطحی که عمل رسم بر روی آن انجام می شود یک زمینه دستگاه نام دارد . برای دسترسی به زمینه دستگاه هر فرم از هندلی به اسم hDC استفاده می شود . &lt;BR/&gt;&lt;BR/&gt;چگونه می توان skin هایی را که با استفاده از وی بی ایجاد می کنیم به سیستممان اضافه کنیم ؟&lt;BR/&gt;پاسخ : دوست عزیزی جواب این سوال را داده اند : &amp;quot; شما ميتونيد از برنامه زيبا و توانمند ActiveSkin استفاده کنی که ورژن 4.3 اون رو ميتونی از ZDnet دانلود کنی&lt;BR/&gt;&lt;BR/&gt;چگونه می توان یک فرم را در حالت Always on Top قرار داد ؟&lt;BR/&gt;پاسخ : حالت Always on Top حالتی است که در آن همیشه فرم برنامه شما قابل مشاهده در صفحه ویندوز باشد . ( حتی اگر برنامه دیگری انتخاب شده و فعال باشد ) . برای قرار دادن فرم در این حالت از یک API موجود در کتابخانه user32 با نام SetWindowPos استفاده می شود . چگونگی declare کردن این تابع بصورت زیر است ( اين declare را در بالای کدهای مربوط به فرمتان قرار دهيد ) :&lt;BR/&gt;&lt;BR/&gt;Private Declare Function SetWindowPos Lib &amp;quot;user32&amp;quot; (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&lt;BR/&gt;&lt;BR/&gt;همچنین ثابتهای زیر را در بالای کدتان تعریف کنید :&lt;BR/&gt;&lt;BR/&gt;Const SWP_NOMOVE = 2&lt;BR/&gt;Const SWP_NOSIZE = 1&lt;BR/&gt;Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE&lt;BR/&gt;Const HWND_TOPMOST = -1&lt;BR/&gt;Const HWND_NOTOPMOST = -2&lt;BR/&gt;&lt;BR/&gt;یک تایمر با Interval ای برابر 1 در فرمتان قرار دهید و کد زیر را برای متد Timer آن بنویسید تا فرم در این حالت قرار بگیرد :&lt;BR/&gt;&lt;BR/&gt;Dim result As Long&lt;BR/&gt;result = SetWindowPos(Form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)&lt;BR/&gt;&lt;BR/&gt;برای غیر فعال کردن این حالت کد زیر را در برنامه تان بنویسید :&lt;BR/&gt;&lt;BR/&gt;Timer1.Enabled = False&lt;BR/&gt;Dim result As Long&lt;BR/&gt;result = SetWindowPos(Form1.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS)&lt;BR/&gt;&lt;BR/&gt;برای فعال کردن مجدد این حالت کافیست خاصیت Enabled تایمر را True کنید&lt;BR/&gt;&lt;BR/&gt;چگونه می توان از طریق وي بي با اسکنر ارتباط برقرار نموده و عکس را از آن گرفت و در بانک اطلاعاتی ذخیره نمود .&lt;BR/&gt;پاسخ : در مورد بخش آخر سوال که ذخیره عکس در بانک اطلاعاتی می باشد قبلاً مطالبی در این وبلاگ نوشته ام . اما در مورد قسمت اول بایستی از یکسری OCX برای اینکار استفاده کنید مانند Twain Scanning ocx و يا Kodak Image Control ocx&lt;BR/&gt;&lt;BR/&gt;وقتی که یک فرم جهت ورود اطلاعات ساخته می شود باستی از طریق دکمه Tab به فیلدهای بعدی رفت . چگونه می توان کاری کرد که با زدن کلید Enter در هر فیلد به فیلد بعدی رفت ؟&lt;BR/&gt;پاسخ :  یک روش اینست که در متد KeyPress هر کادر متنی ( یا فیلد ورود اطلاعات ) کدی بنویسید که تشخیص دهد اگر دکمه Enter فشرده شده فوکوس را به فیلد بعدی مورد نظر شما منتقل کند . برای مثال اگر فرض کنید دو کادر متنی با نامهای Text1 و Text2 در فرمتان دارید کد زیر را برای متد KeyPress کادر متنی Text1 بنویسید :&lt;BR/&gt;&lt;BR/&gt;Private Sub Text1_KeyPress(KeyAscii As Integer)&lt;BR/&gt;  If KeyAscii = 13 Then Text2.SetFocus&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;Platform SDK که در سایت Msdn از آن اسم برده می شود چيست ؟ آيا همان سی دی های Msdn است ؟&lt;BR/&gt;پاسخ : SDK يا همان source development kit ، شامل يکسری مطلب آموزشی و نمونه کد است که در مورد یک زمینه برنامه نويسی خاص توسط مایکروسافت منتشر می شود . برخی از اين SDK ها قابل دانلود از سايت مايکروسافت ( مثلاً DirectX SDK  ) و برخی دیگر فروشی هستند (Windows Driver Model SDK )&lt;BR/&gt;&lt;BR/&gt;پاسخ اقا امیر&lt;BR/&gt;http://www.sharemation.com/MahdiVB678/mack%20db.rar?uniq=hz0542&lt;BR/&gt;پاسخ اقا محمد&lt;BR/&gt;http://www.sharemation.com/MahdiVB678/pass.rar?uniq=hz053q&lt;BR/&gt;&lt;BR/&gt;جواب سوال اقا محمد عزیزم&lt;BR/&gt;اقا محمد ما هم اوایل که داشتیم VB یاد میگرفتیم از این سوالات زیاد تو ذهنم میومد ولی شما بگو دقیقا چی کار میخوای بکنی تا راه حلشو بهت بگم برای این کارها راه حل های خیلی ساده ای وجود داره که باید با تکنیک های VB اشنایی کامل داشته باشی. من خودم عاشق سوالات سختم.&lt;BR/&gt;&lt;BR/&gt;جواب اقا مجتبی عزیزم&lt;BR/&gt;قسمت اول : اگر منظورتون ارتباط دادن VB با Access جدول های اونه که بخون :&lt;BR/&gt;آشنایی با ابزار مخصوص برقراری ارتباط با پایگاه داده&lt;BR/&gt;دو کنترلی که امکان ایجاد این ارتباط را به ما می دهند عبارتند از : &lt;BR/&gt;&lt;BR/&gt;1- Data Control : این کنترل که به طور پیشفرض در جعبه ابزار یا Tool Box وی بی وجود دارد یکی از ابزارهای قدرتمند VB در زمینه کار با پایگاه داده است . در واقع این کنترل نماینده پایگاه داده در VB است و کارهایی از قبیل مدیریت جداول و اندیکس ها و همچنین ایجاد و حذف جدول و رکورد و جستجو و فیلتر سازی و غیره را به عهده دارد . کارایی این کنترل بسیار گسترده و وسیع است و می تواند بهترین انتخاب برای نوشتن برنامه هایی باشد که قرار است فقط روی یک کامپیوتر به طور مستقل اجرا گردند .&lt;BR/&gt;&lt;BR/&gt;2- ADO Objects : این کنترل ابزار دیگری برای ایجاد ارتباط با پایگاه داده است و گستردگی کمتری نسبت به Data Control دارد . از این کنترل معمولا برای ایجاد ارتباط سریع و آسان با پایگاه داده استفاده می شود . همچنین این کنترل توانایی برقراری ارتباط با پایگاه داده واقع در مکانی دیگر با استفاده از سیستم شبکه ای را دارد . ولی این کنترل در جعبه ابزار وجود ندارد و باید به آن اضافه گردد که بعدا خود این کنترل به طور کامل توضیح داده خواهد شد .&lt;BR/&gt;&lt;BR/&gt;برای کار با پایگاه داده فقط ایجاد ارتباط با آن کافی نیست . بلکه ما نیاز داریم که اطلاعات درون جدول ها و رکوردها را مشاهده کنیم و بر روی آنها پردازش انجام دهیم که این کار مستلزم استفاده از ابزارها و کنترل های دیگر است . برای نمونه اگر ما بخواهیم اطلاعات درون یک رکورد که نام یک شخص در آن ذخیره شده است را ببینیم باید آن را توسط یک کنترل که با پیوندی به یکی از کنترل های ایجاد کننده ارتباط با پایگاه داده متصل است به نمایش در آوریم . برای مثال ازکنترل Label استفاده کنیم . حال اگر بخواهیم بر روی این مقدار پردازش هم انجام دهیم باید آن را توسط کنترل Text Box نمایش دهیم چون درون آن را می توانیم ویرایش کنیم.&lt;BR/&gt;&lt;BR/&gt;برای شروع ما با Data Control کار خواهیم کرد.خصوصیت های مهم شی ء Data Control :&lt;BR/&gt;&lt;BR/&gt;Connect&lt;BR/&gt;این خصوصیت مشخص کننده نوع پایگاه داده که قرار است ارتباط با آن برقرار گردد و به طور پیشفرض Access تعیین شده است.&lt;BR/&gt;&lt;BR/&gt;DataBaseName&lt;BR/&gt;این خصوصیت مهمترین خصوصیت کنترل Data به شمار می رود که مسیر و نام پایگاه داده را در خود جای می دهد .&lt;BR/&gt;&lt;BR/&gt;ReadyOnly&lt;BR/&gt;این خاصیت مشخص می کند که آیا پایگاه داده میتواند پردازش شود یا باید هیچ تغییری در آن ثبت نشود . که به طور پیشفرض False یعنی قابل پردازش میباشد .&lt;BR/&gt;&lt;BR/&gt;RecordSetType&lt;BR/&gt;نوع رکوردست کاری را مشخص می کند که در صورت لزوم توضیح داده خواهدشد .&lt;BR/&gt;&lt;BR/&gt;DataSource&lt;BR/&gt;این خصوصیت بعد از تکمیل خصوصیت DataBaseName قابل استفاده است و نام جدول ها و بازجست های ( Query ) موجود در پایگاه داده را به صورت لیست کشویی برای ما نمایش می دهد که ما می توانیم یکی از آنها را انتخاب کنیم .&lt;BR/&gt;&lt;BR/&gt;نکته : در واقع مهمترین مشکل وی بی در کار با پایگاه داده Access این است که اگر شما از کنترل Data برای برقراری ارتباط استفاده کنید و فرمت پایگاه داده شما بالاتر از Access 97 باشد یعنی ( 2000 ، XP ، 2003 ) با خطایی مبنی بر عدم پشتیبانی یا شناسایی مواجه خواهید شد . یا به عبارتی شما در صورتی میتوانید از کنترل Data برای برقراری ارتباط با پایگاه داده Access استفاده نمایید که فرمت پایگاه داده شما Access 97 یا همان ( Office 97 ) باشد . برای حل این مشکل چند راه حل وجود دارد :&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;راه 1 : از کنترل ADO یا Adodc به جای Data استفاده کنید که این کار در بیشتر مواقع نمی تواند به صرفه باشد .&lt;BR/&gt;&lt;BR/&gt;راه 2 : فرمت پایگاه داده شما Access 97 باشد یعنی باید از برنامه Access موجود در Office 97 استفاده کنید که در این صورت مجبور خواهید بود با ویندوز 98 کار کنید . چون XP قادر به پشتیبانیAccess 97 نخواهد بود .&lt;BR/&gt;&lt;BR/&gt;یک مثـــــــــــــــــــــــــــــــال برای اقا مجتبی : استفاده از کنترل Data&lt;BR/&gt;یک پروژه از نوع استاندارد ایجاد نمایید Form1&lt;BR/&gt;&lt;BR/&gt;اضافه کردن کنترل داده : برای این کار از جعبه ابزار بر روی کنترل Data دو بار کلیک کنید تا در وسط فرم قرار گیرد و یا آن را انتخاب کرده و بر روی فرم خود بکشید تا بر روی فرم قرار گیرد . البته اندازه و محل قرار گیری این فرم بستگی به سلیقه و نظر برنامه نویس دارد . &lt;BR/&gt;&lt;BR/&gt;تنظیم خواص DataBaseName و RecordSource : برای این کار خاصیت مربوط به Data1 را با انتخاب پایگاه داده خود تنظیم کنید . برای مثال اگر پایگاه داده شما در C:\Test VB\Test.mdb قرار داشته باشد پس از انتخاب پایگاه داده مورد نظر مقابل خاصیت DataBaseName شما برابر با این آدرس خواهد شد . حال روی خاصیت RecordSource کلیک کنید تا لیست جداول برای شما نمایش داده شود . شما جدول Simple را انتخاب کنید . حال 3 عدد TextBox روی فرم خود قرار دهید و خاصیت های آنها را به صورت زیر تنظیم کنید :&lt;BR/&gt;&lt;BR/&gt;نام کنترل        خاصیت DataSource         خاصیت DataField&lt;BR/&gt;&lt;BR/&gt;Text1                    Data1                               ID&lt;BR/&gt;&lt;BR/&gt;Text2                   Data1                             Name&lt;BR/&gt;&lt;BR/&gt;Text3                   Data1                             Family&lt;BR/&gt; &lt;BR/&gt;همانطور که در تصویر می بینید با استفاده از کنترل Label می توانید برچسب مربوط به فیلد خود را برای کاربر نمایش دهید تا کاربر درک درستی از برنامه داشته باشد .&lt;BR/&gt;&lt;BR/&gt;همانطور که در تصویر دیده می شود خاصیت Enabled مربوط به TextBox فیلد شماره False است یعنی فقط کاربر قادر به دیدن شماره می باشد و نمی تواند آن را تغییر دهد ، این به این دلیل است که این شماره چون از نوع Autonumber در نظر گرفته شده و برنامه به طور خودکار برای هر رکوردی که ایجاد می شود یک شماره تولید می کند پس کاربر حق تغییر آن را نخواهد داشت مگر در شرایطی خاص . &lt;BR/&gt;&lt;BR/&gt;همانگونه که دیدید کارهایی را که شما انجام دادید مانند انتخاب پایگاه داده و تنظیم جدول حالتی دستی یا ویژوال داشت . حال روش استفاده از کد نویسی برای بار کردن پایگاه داده در برنامه :&lt;BR/&gt;&lt;BR/&gt;برای این کار تقریبا مانند قبل عمل خواهیم کرد با این تفاوت که نه پایگاه داده خود را برای کنترل Data انتخاب خواهیم کرد و نه خاصیت DataField را برای TextBox های خود . بلکه این کار ها را با کد نویسی انجام خواهیم داد.&lt;BR/&gt;&lt;BR/&gt;نکته : خاصیت DataSource مربوط به TextBox ها را باید در هنگام طراحی تنظیم کنیم . چون امکان تنظیم آن با کد نویسی وجود ندارد .&lt;BR/&gt;&lt;BR/&gt;حال شما در Form_Load برنامه این کد ها را باید بنویسید :&lt;BR/&gt;&lt;BR/&gt;بار کردن پایگاه داده :&lt;BR/&gt;&lt;BR/&gt;&amp;quot;Data1.DatabaseName = &amp;quot;C:\Test VB\Test.mdb&lt;BR/&gt;&lt;BR/&gt;تنظیم جدول مورد نظر :&lt;BR/&gt;&lt;BR/&gt;&amp;quot;Data1.RecordSource = &amp;quot;Simple&lt;BR/&gt;&lt;BR/&gt;تنظیم فیلدها برای TextBox ها :&lt;BR/&gt;&lt;BR/&gt;&amp;quot;Text1.DataField = &amp;quot;ID&lt;BR/&gt;&amp;quot;Text2.DataField = &amp;quot;Name&lt;BR/&gt;&amp;quot;Text3.DataField = &amp;quot;Family&lt;BR/&gt;&lt;BR/&gt;کد کامل برنامه :&lt;BR/&gt;&lt;BR/&gt;()Private Sub Form_Load&lt;BR/&gt;&amp;quot;Data1.DatabaseName = &amp;quot;C:\Test VB\Test.mdb&lt;BR/&gt;&amp;quot;Data1.RecordSource = &amp;quot;Simple&lt;BR/&gt;Data1.Refresh&lt;BR/&gt;&amp;quot;Text1.DataField = &amp;quot;ID&lt;BR/&gt;&amp;quot;Text2.DataField = &amp;quot;Name&lt;BR/&gt;&amp;quot;Text3.DataField = &amp;quot;Family&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;از متد Refresh برای باز سازی پایگاه داده استفاده می شود و یکی از متد های اصلی کنترل Data میباشد .&lt;BR/&gt;چند روز دیگه چند تا مثال مرتبط با پایگاه داده برات اپلود میکنم&lt;BR/&gt;&lt;BR/&gt;برای یافتن پاسخ قسمت دوم سوالت به وبلاگ اقا ناصر که لینکش رو در پیوند ها گذاشتم برو و اموزش Crack1 رو به روشی که گفته دانلود کن و لذت ببر&lt;BR/&gt;موفق باشی&lt;BR/&gt;&lt;BR/&gt;سوال علی اقا:&lt;BR/&gt;نکته : میخوام یه ادعا کنم که نمی تونید سوالی کنید که نتونم جواب بدم. امتحان کنید&lt;BR/&gt;برنامه اي كه در ورودي پسورد دريافت مي كند و در صورت برابر بودن با پسورد ذخيره شده در فايل Dll موجود در حافظه اجازه ورود به قسمت ديگري از برنامه را دهد&lt;BR/&gt;نكته :&lt;BR/&gt;1 ) اين برنامه توانايي تغيير پسورد را داشته باشد&lt;BR/&gt;2 ) پسوردي را كه از كاربر براي ذخيره كردن دريافت مي كند ، پس از اعمال تغييراتي در آن ، در فايل Dll ذخيره كند ( به نحوي كه اگر شخصي فايل Dll برنامه را باز كرد نتواند پسورد را بخواند )&lt;BR/&gt;&lt;BR/&gt;جواب :&lt;BR/&gt;براي ساخت اين چنين برنامه اي بايد با نحوه ايجاد فايل در وي بي آشنا شويم&lt;BR/&gt;براي سخت فايل در VB ابتدا فايل را در محلي از هارد ديسك باز كرده ، پس از آن شروع به نوشتن و خواندن در فايل مي كنند .&lt;BR/&gt;ما در اين برنامه نياز داريم كه از قبل يك پسورد در اين فايل ذخيره كند ، براي اين چنين كاري از قطعه برنامه زير استفاده مي كنيم :&lt;BR/&gt;نكته : اين قطعه برنامه فقط براي ايجاد يك پسورد در فايل مربوطه به كار مي رود و پس از ايجاد اين فايب بايد پاك شود .&lt;BR/&gt;Private Sub Form_Load()&lt;BR/&gt;N$=&amp;quot;ali&amp;quot;&lt;BR/&gt;Fir i= 1 to len(n$) &lt;BR/&gt;a = Mid(n$, i, 1(&lt;BR/&gt;r = Asc(a(&lt;BR/&gt;r = r + 70&lt;BR/&gt;c$ = c$ + Chr(r(&lt;BR/&gt;Next&lt;BR/&gt;Open &amp;quot;d:\p.dll&amp;quot; For Output As #1&lt;BR/&gt;Write #1, c$&lt;BR/&gt;Close&lt;BR/&gt;End Sub&lt;BR/&gt;همانگونه كه ملاحظه نموديد ، ما پسورد پيش فرض ali را براي اين برنامه انتخاب نموديم و با استفاده از يك حلقه تكرار و تابع Mid به تك تك كاراكتر هاي آن دسترسي پيدا كرديم و در هر دسترسي آن را به كد اسكي آن كاراكتر تبديل نموده و براي ايجاد امنيت به گونه اي كه كسي توان خواندن پسورد را با باز كردن فايل Dll نداشته باشد ، 70 عدد به كد اسكي آن اضافه نموديم و سپس با تابع Chr به يك كاركتر تبديل نموديم ، همانطور كه مي بينيد اين كاراكتر ها جمع شده و در متغير C$ به صورت يك رشته جمع شده اند . در پايان اين قطعه فايلي با استفاده از دستور Open در دايو D ايجاد و باز مي شود و رشته C$ در آن نوشته مي شود . در انتها هم فايل بشته مي شود .&lt;BR/&gt;براي ايجاد اين فايل كافي است كه يك بار برنامه را اجرا كنيد .&lt;BR/&gt;تذكر : پس از اتمام اين كار اين قطعه برنامه را پاك كنيد .&lt;BR/&gt;&lt;BR/&gt;طراحي :&lt;BR/&gt;اين پروژه شامل دو فرم مي باشد كه وظيفه فرم اول دريافت پسورد از كاربر و چك كردن آن با پسورد ذخيره شده در فايل Dll است ، اگر پسوردها يكسان نبودند ، كاربر با پيام I&apos;m Sorry مواجه مي شود و اگر دو پسورد يكسان بودند ، برنامه پس از فرستادن پيام Ok ، فرم دوم را ظاهر مي كند كه در آن كاربر مي تواند پسورد درون فايل Dll را تغيير دهد .&lt;BR/&gt;&lt;BR/&gt;برنامه نويسي فرم اول :&lt;BR/&gt;در اين فرم از يك شي Text Box و يك شي Command Button استفاده مي كنيم .&lt;BR/&gt;در Command 1 اين قطعه را وارد مي كنيم :&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;Open &amp;quot;d:\p.dll&amp;quot; For Input As #1&lt;BR/&gt;Input #1, c$&lt;BR/&gt;For i = 1 To Len(c$)&lt;BR/&gt;a = Mid(c$, i, 1)&lt;BR/&gt;r = Asc(a)&lt;BR/&gt;r = r - 70&lt;BR/&gt;d$ = d$ + Chr(r)&lt;BR/&gt;Next&lt;BR/&gt;If d$ = Text1.Text Then&lt;BR/&gt;MsgBox (&amp;quot; Ok Your Password Is Correct &amp;quot;)&lt;BR/&gt;Form2.Show&lt;BR/&gt;Form1.Hide&lt;BR/&gt;Else&lt;BR/&gt;MsgBox (&amp;quot; I&apos;m Sorry , Your Password Is Correct &amp;quot;)&lt;BR/&gt;End If&lt;BR/&gt;Close&lt;BR/&gt;End Sub&lt;BR/&gt;در خط يك برنامه فايل Dll براي خواندن باز مي شود . &lt;BR/&gt;در خط دوم برنامه تمام محتويات فايل Dll در متغير C$ قرار داده مي شود .&lt;BR/&gt;حال با يك حلقه تكرار و استفاده از تابع Mid به تك تك كاراكتر هاي برنامه دسترسي پيدا مي كنيم ، در خطوط بعدي اين كاراكترهاي رشته اي به كد اسكي تبديل شده و از اين كاراكترها 70 عدد كم مي كنيم ( چون در ابتدا 70 تا براي امنيت به كاراكترها اضافه كرده بوديم ) . در آخر حلقه هم ، كدهاي اسكي را به كاراكتر تبديل كرده و در يك متغير رشته اي D$ ذخيره مي كنيم .&lt;BR/&gt;شرط ها هم مطابق بودن يا نا مطابق بودن دو پسورد را چك مي كند .كه اگر يكسان بودند ، پيام Ok را ارسال و فرم دوم را ظاهر مي كند .&lt;BR/&gt;&lt;BR/&gt;برنامه نويسي فرم دوم :&lt;BR/&gt;ما ، در اين فرم از سه Command button تحت عنوان هاي Change Password ، Sign Out ، Quit و يك Textbox استفاده مي كنيم .&lt;BR/&gt;اصل برنامه ما در دكمه تغيير پسورد است يا Change Password است ، قطعه برنامه زير را در قسمت برنامه نويسي اين Command Button استفاده مي كنيم :&lt;BR/&gt;Private Sub Command1_Click()&lt;BR/&gt;For i = 1 To Len(Text1.Text)&lt;BR/&gt;a = Mid(Text1.Text, i, 1)&lt;BR/&gt;r = Asc(a)&lt;BR/&gt;r = r + 70&lt;BR/&gt;c$ = c$ + Chr(r)&lt;BR/&gt;Next&lt;BR/&gt;Open &amp;quot;d:\p.dll&amp;quot; For Output As #1&lt;BR/&gt;Write #1, c$&lt;BR/&gt;Close&lt;BR/&gt;End Sub&lt;BR/&gt;در اين قطعه كد يك پسورد از ورودي دريافت مي شود و همانطور كه قبلا نيز توضيح داده شد ، پس از اعمال تغييراتي براي حفظ امنيت پسورد در يك فايل Dll ذخيره مي شود .&lt;BR/&gt;&lt;BR/&gt;قطعه كد كليد Sign Out :&lt;BR/&gt;Private Sub Command2_Click()&lt;BR/&gt;Form1.Show&lt;BR/&gt;Form2.Hide&lt;BR/&gt;End Sub&lt;BR/&gt;قطعه كد كليد Quit : &lt;BR/&gt;Private Sub Command3_Click()&lt;BR/&gt;End&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;سوال سخت : ( اقا حمیـــــــــــــــــــــــــــــــد )&lt;BR/&gt;چطور ميشه کنترلي نوشت که اگه چند تا از اونها رو توي فرم بندازيم بتونن همديگرو پيدا کنن مثله Raido Button&lt;BR/&gt;&lt;BR/&gt;جواب :&lt;BR/&gt;   Dim c As Control&lt;BR/&gt;   For Each c In UserControl.Parent.Controls&lt;BR/&gt;      If TypeOf c Is UserControl1 Then&lt;BR/&gt;         MsgBox c.Name&lt;BR/&gt;         &apos; Put your code here&lt;BR/&gt;      End If&lt;BR/&gt;   Next&lt;BR/&gt;&lt;BR/&gt;ترفــــــــــــــــــــــــــــــند :&lt;BR/&gt;اگه موقع اجرای برنامه ها در محیط ویژوال بیسیک برنامه در یک حلقه گیر کرد یا هنگ کرد میتونید با زدن کلید های control + Pause break برنامه رو متوقف کنید.</description>
<pubDate>Sun, 11 Feb 2007 07:26:18 GMT</pubDate>
<comments>http://commenting.blogfa.com/?blogid=vblog&amp;postid=66</comments>
<dc:creator>vblog</dc:creator>
<guid>http://vblog.blogfa.com/post-66.aspx</guid>
</item>
<item>
<title>اموزش درخواستی</title>
<link>http://vblog.blogfa.com/post-65.aspx</link>
<description>اموزش مقدماتی کامل برای مبتدیان&lt;BR/&gt;&lt;BR/&gt;http://www.schoolnet.ir/tutorial/vb/&lt;BR/&gt;&lt;BR/&gt;اشاره : &lt;BR/&gt;يك بازي كامپيوتري را روي كامپيوترتان اجرا مي‌كنيد. فعلا‌ً كارت گرافيك شما روي اسلا‌تAGP سوار مي‌شود، پردازشگر سلرون داريد و ... پس از چند ماه يا چند سال كامپيوتر جديدي مي‌خريد. اكنون اسلا‌ت كارت گرافيكي شما PCI Express است و يك پردازشگر 64 بيتي داريد. همان بازي را روي اين كامپيوتر هم نصب و اجرامي‌كنيد! شايد به نظر طبيعي ميآيد كه همه چيز بايد همين‌طور باشد. اما چگونه يك بازي روي كامپيوترهايي با تراشه‌ها و سخت‌افزارهاي مختلف و گاه فناوري متفاوت اجرا مي‌شود؟ API‌هاي گرافيكي يا همان رابط‌هاي برنامه‌نويسي، بخش بزرگي از اين مشكل را حل مي‌كنند و امكانات گسترده ديگري را نيز در اختيار برنامه‌نويسان و توسعه‌دهندگان بازي و برنامه‌هاي چندرسانه‌اي قرارمي‌دهند. OpenGL وDirectX، دو مجموعه API گرافيكي و صوتي هستند كه براي آسان‌تر ساختن توسعه بازي‌ها و نرم‌افزارهاي چندرسانه‌اي طراحي شده‌اند. &lt;BR/&gt;&lt;BR/&gt;API گرافيكي چيست؟ &lt;BR/&gt;API درواقع بين برنامه و سخت‌افزاري كه برنامه روي آن اجرا مي‌شود، نقش يك هماهنگ‌كننده را دارد و مانند پلي ميان سخت‌افزار و نرم‌افزار ارتباط ايجاد‌مي‌كند. يعني برنامه‌نويس كدهايي مي‌نويسد كه داده‌هاي گرافيكي خود را به وسيله دستورهاي استانداردي به درايور API مي‌فرستد نه مستقيماً به خود سخت‌افزار. سپس درايوري كه شركت سازنده سخت‌افزار توليد‌كرده است، اين كداستاندارد توليدشده را به فرمت بومي و ويژه‌اي كه براي آن مدل خاص سخت‌افزار قابل شناسايي است، ترجمه مي‌كند. &lt;BR/&gt;&lt;BR/&gt;Microsoft DirectX &lt;BR/&gt;شركت مايكروسافت در سال 1995 DirectX را ساخته و توسعه داده‌است. اين نرم‌افزار شامل مجموعه‌ يكپارچه‌اي از ابزارهاي برنامه‌نويسي است كه به توسعه‌دهندگان امكان مي‌دهد انواع مختلف نرم‌افزارهاي مالتي‌مديا را روي پلتفرم ويندوز توليد كنند. DirectX به برنامه‌اي كه بر پايه آن طراحي شده امكان مي‌دهد به آساني قابليت‌هاي سخت‌افزار كامپيوتر را شناسايي كند و پارامترهاي برنامه را با آن هماهنگ سازد. &lt;BR/&gt;&lt;BR/&gt;DirectX شامل APIهايي است كه دسترسي به بخش‌هاي ويژه‌اي از سخت‌افزار مانند تراشه‌هاي شتاب‌دهنده گرافيك سه‌بعدي و كارت صوتي را ميسرمي‌كند. اين APIها كنترل توابع سطح پايين، يعني نزديك به سخت‌افزار، شامل شتاب‌دهنده گرافيكي دو بعدي، پشتيباني از دستگاه‌هاي ورودي مانند دسته بازي، صفحه‌كليد و ماوس، و كنترل ميكس و خروجي صدا را انجام مي‌دهند. &lt;BR/&gt;&lt;BR/&gt;DirectX 7.0 در سال 1999 با شش كامپوننت عرضه شد كه عبارت بودند از: Direct3D،DirectDraw ،DirectSound ،DirectPlay ،DirectInput و DirectMusic.&lt;BR/&gt;&lt;BR/&gt;در اواخر سال 2000 ميلا‌دي، DirectX 8.0 عرضه شد كه در آن كامپوننت‌هاي DirectSound و DirectMusic با هم ادغام شدند و با نام كامپوننت Direct Audio معرفي شدند. &lt;BR/&gt;&lt;BR/&gt;Direct3D و DirectDraw نيز با هم ادغام شدند و يك كامپوننت با نام DirectX Graphics را ساختند. DirectShow نيز به صورت يك API جداگانه پياده‌سازي شد و به يكي از كامپوننت‌هاي DirectX تبديل گرديد. &lt;BR/&gt;&lt;BR/&gt;DirectX 9.0 در ژانويه سال 2003 عرضه شد. ويژگي‌هاي خاص اين نسخه عبارتند از: &lt;BR/&gt;&lt;BR/&gt;- قابليت‌هاي صوتي جديد در DirectSound  &lt;BR/&gt;- سخت‌افزار رندركننده ويديويي با شتاب بيشتر &lt;BR/&gt;- بهبود قابليت برنامه‌ريزي گرافيكي &lt;BR/&gt;&lt;BR/&gt;APIهاي همه كامپوننت‌هاي DirectX برپايه COM يا Component Object Model هستند. در ادامه به بررسي هفت كامپوننت DirectX 9.0 مي‌پردازيم كه عبارتند از: DirectDraw ،Direct3D ،DirectShow ،DirectSound ،DirectMusic ،DirectInput و DirectPlay.&lt;BR/&gt;&lt;BR/&gt;1- DirectDraw&lt;BR/&gt; DirectDraw، كامپوننتي ويژه طراحي دوبعدي است كه به برنامه‌نويس اجازه مي‌دهد مستقيماً به حافظه كارت گرافيك دسترسي يابد، صحنه‌ها و فريم‌ها را با هم تركيب نمايد يا bitmapها را در آنجا ذخيره كند. همچنين، براي برنامه‌ها امكان دسترسي به سخت‌افزارهاي ويژه نمايش را مستقل از نوع سخت‌افزار فراهم مي‌كند. &lt;BR/&gt;هر برنامه كاربردي DirectDraw الگوي يكساني دارد كه عبارت است از: &lt;BR/&gt;&lt;BR/&gt;- ايجاد يك شي &lt;BR/&gt;- شروع حلقه &lt;BR/&gt;- انتقال به مانتيور &lt;BR/&gt;- پايان حلقه &lt;BR/&gt;- پاك كردن آن شي‌&lt;BR/&gt;&lt;BR/&gt;منظور از واژه &amp;lt;يك شي&amp;gt; مي‌تواند هر تصوير دوبعدي‌اي باشد و منظور از حلقه، حلقه‌اي است كه در برنامه‌نويسي هنگام تكرار منظم دسته‌اي از داده‌ها يا دستورها به كار مي‌بريم. تصوير ايجاد‌شده پس از مدتي پاك مي‌شود و جاي خود را به تصوير ديگري مي‌دهد. &lt;BR/&gt;&lt;BR/&gt;2- Direct3D &lt;BR/&gt;اين كامپوننت، دسترسي به توابع رندركننده گرافيك سه‌بعدي تعبيه شده در بيشتر كارت‌هاي گرافيك را فراهم مي‌كند. Direct3D يك API سطح پايين سه‌بعدي است كه به نرم‌افزار امكان مي‌دهد مستقل از سخت‌افزار، با سخت‌افزار شتاب‌دهنده ارتباط برقرار كند. لا‌يه‌اي كه براي توسعه‌دهندگان بازي و گرافيك كامپيوتري امكان طراحي و ساخت بازي‌ها را مستقل از سخت‌افزار كامپيوترها فراهم مي‌كند، لا‌يه‌اي به نام&lt;BR/&gt;Hardware Abstraction Layer) HAL) است.&lt;BR/&gt; &lt;BR/&gt;HAL با قابليت‌هايي كه به صورت گسترده در سخت‌افزارهاي گرافيك سه‌بعدي پياده‌سازي شده‌اند ارتباط ايجاد مي‌كند و به سازندگان امكان‌مي‌دهد درايورهايي را توليد كنند كه لا‌يه HAL را به سخت‌افزار پيوند دهد. اين كار باعث مي‌شود برنامه‌هاي كاربردي Direct 3D بدون اين‌كه براي نوع خاصي از قطعه سخت‌افزاري نوشته شده باشد، از ويژگي‌هاي بخش‌هاي خاص آن قطعه سخت‌افزاري بهره‌ببرد. در شكل يك چگونگي ارتباط لا‌يه HAL با سخت‌افزار و نرم‌افزارهاي مرتبط نشان داده شده است. &lt;BR/&gt;&lt;BR/&gt;شكل - چگونگي ارتباط لا‌يه HAL با كارت گرافيك و نرم‌افزارهاي مرتبط&lt;BR/&gt;http://www.shabakeh-mag.com/Data/Gallery/s63_gpl_1_s.jpg&lt;BR/&gt;&lt;BR/&gt;همان‌گونه كه در شكل يك، نشان داده شده، نرم‌افزار بازي بالا‌ترين سطح است و پس از آن كامپوننت‌هاي ترسيم دوبعدي و سه بعدي، يعني DirectDraw و Direct3D قرار دارند. لا‌يه HAL يك رابط ميان كامپوننت‌هاي DirectX و كارت گرافيك است. &lt;BR/&gt;&lt;BR/&gt;در سيستم رندر Direct3D، ساختار اشياي سه‌بعدي پيش از آن‌كه شتاب‌دهنده سه‌بعدي، يك صحنه سه‌بعدي را رندر نمايد و آن را به مانيتور منتقل كند، به وسيله CPU پردازش مي‌شود. نسخه ششم كامپوننت Direct3D از قابليت‌هاي كارت‌هاي گرافيك جديدتر پشتيباني مي‌نمايد و در هر گذر، چندين بافت را با هم رندر مي‌كند. &lt;BR/&gt;&lt;BR/&gt;كاهش زمان رندر به استفاده از نقشه بافت‌ها نياز دارد. اين نسخه تكنيك‌هايي براي افزودن جلوه‌اي واقعي‌تر به صحنه‌هاي سه بعدي را نيز دربردارد.&lt;BR/&gt; &lt;BR/&gt;مانند anistropic filtering كه عنصر عمق را به trilinear filtering و نقشه برجسته‌سازي مي‌افزايد كه موجب ايجاد شباهت بيشتر بافت‌ها و نيز منابع نور تابيده شده بر سطوح مسطح با نمونه‌هاي واقعي آن‌ها مي‌شود. &lt;BR/&gt;&lt;BR/&gt;نسخه هفتم DirectX نسبت به نسخه‌هاي پيش از خود بيست درصد سريع‌تر و شامل چند ويژگي ديگر بود. مهم‌ترين آن‌ها پشتيباني از تغييرات شتاب سخت‌افزاري و نوردهي (T&amp;amp;L) به وسيله اغلب كارت‌هاي گرافيك سه‌بعدي آن‌زمان به ويژه كارت‌هايي است كه برپايه تراشه‌هاي nVidia Geforce 256 و S3 Savage 2000 ساخته شده‌اند. از زماني كه T&amp;amp;L عرضه شد، وقت‌گيرترين وظيفه CPU هنگام اجراي بازي‌هاي پيشرفته به شتاب‌دهنده سه‌بعدي داده شد و بخش بزرگي از ظرفيت پردازنده اصلي به  كارهاي ديگر مانند هوش‌مصنوعي بازي اختصاص داده شد و توسعه‌دهندگان بازي توانستند رندر را با جزئيات بيشتر انجام دهند و جلوه‌هاي ويژه پيچيده‌تري را در بازي‌ها به‌كار ببرند.&lt;BR/&gt;&lt;BR/&gt;3- DirectShow&lt;BR/&gt;اين كامپوننت از بسياري از فرمت‌هاي صوتي و ويديويي شامل AVI ،MPEG ،ASF ،WMA/WMV ،DV و MP3 و DirectX پشتيباني مي‌كند و روي ويندوزهاي 98، 2000، اكس‌پي و نرم‌افزار اينترنت اكسپلورر عرضه شده است.DirectShow پروسه كارهاي مالتي‌مديا مانند نمايش فايل ويديويي را به مجموعه‌اي از مراحل كه با نام&lt;BR/&gt;filter شناخته مي‌شوند تقسيم مي‌كند.&lt;BR/&gt;&lt;BR/&gt;فيلترها تعدادي pin ورودي و خروجي دارند كه آن‌ها را به هم متصل مي‌كند. طراحي كلي سازوكار اتصال به اين صورت است كه فيلترها مي‌توانند به روش‌هاي مختلف به هم متصل شوند كه هر نوع از اين اتصال‌ها به معني انجام دادن يك كار است و توسعه‌دهندگان نرم‌افزار مي‌توانند افكت‌هاي خود يا فيلترهاي ديگري را به بخشي از اين گراف براي انجام كار ويژه‌اي بيفزايند. گراف فيلتر DirectShow به صورت گسترده در ضبط صدا و فيلم، و ويرايش آن‌ها به كار مي‌رود. &lt;BR/&gt;&lt;BR/&gt;شكل - يك گراف فيلتر كه كار نمايش يك فايل MPEG را نشان مي‌دهد. &lt;BR/&gt;&lt;BR/&gt;در شكل دو، يك گراف نمايش براي فايل فيلمي از نوع MPEG نشان داده شده است. برنامه‌هاي كاربردي DirectShow، براي پردازش داده‌هاي مالتي‌مديا، از اين گراف استفاده مي‌كنند.&lt;BR/&gt; &lt;BR/&gt;داده‌هاي چند رسانه‌اي در اين گراف (در حالي كه كارها به وسيله برنامه كاربردي كنترل مي‌شوند) از فايل منبع به سمت مقصد كه مي‌تواند يك قطعه سخت‌افزاري باشد حركت مي‌كنند. &lt;BR/&gt;&lt;BR/&gt;ولي در برخي مواقع، برنامه كاربردي علا‌وه بر كنترل گراف، دريافت‌كننده يا فرستنده داده نيز هست. &lt;BR/&gt;&lt;BR/&gt;هر گره اين گراف، همانگونه كه گفته شد، يك فيلتر است و كار ويژه خود را انجام مي‌دهد. فيلتر source، داده‌ها را از يك فايل يا URL مي‌خواند. فيلتر Parser، بخش‌هايي از داده‌هاي صوتي و ويديويي را به رمزگشاي مناسب مي‌فرستد. رمزگشاها، داده‌هاي صوتي و ويديويي را رمزگشايي مي‌نمايند يا از حالت فشردگي خارج مي‌كنند. &lt;BR/&gt;فيلتر رندركننده، داده‌هاي دريافت شده صوتي و ويديويي از رمزگشا را پخش مي‌كند يا آن‌ها را نمايش مي‌دهد. &lt;BR/&gt;&lt;BR/&gt;4- DirectSound &lt;BR/&gt;اين كامپوننت همزمان با ساخت ويندوز 95، زماني كه درايورهاي صوتي از نوع VXD بودند به DirectX افزوده شد. در اين كامپوننت APIهاي ويژه‌اي ايجاد شد كه نويسندگان درايورهاي صوتي مي‌بايست آن‌ها را به محصولا‌ت خود، كه فرمت VXD داشت، مي‌افزودند تا به درستي با DirectSound كار كند. &lt;BR/&gt;&lt;BR/&gt;برنامه‌هاي چندرسانه‌اي با اين كامپوننت به سخت‌افزارهاي صوتي مانند كارت صوتي دسترسي پيدامي‌كنند. از مهم‌ترين ويژگي‌هاي اين API، تركيب صدا و كنترل سطح آن است. &lt;BR/&gt;&lt;BR/&gt;DirectSound همچنين اجازه مي‌دهد چندين برنامه كاربردي، بدون پيش آوردن وقفه، همزمان به كارت صوتي دسترسي داشته باشند. ايجاد افكت‌هاي صوتي از ديگر توانايي‌هاي DirectSound است. پس از سال‌ها توسعه، اكنون DirectSound يك API پخته و كامل است و بسياري قابليت‌هاي ديگر را نيز فراهم مي‌كند؛ مانند قابليت پخش صداهاي چند كاناله با وضوح و دقت بالا‌.&lt;BR/&gt;&lt;BR/&gt;5- DirectMusic &lt;BR/&gt;تاكنون بازي‌هايي را تجربه كرده‌ايد كه در تمام مدت يك مرحله، موسيقي يكنواخت و ثابتي دارند؟ بازي‌اي را در نظر بگيريد كه برنامه‌نويسان آن مي‌خواهند يك آهنگ، در تمام مدت، در يك مرحله از آن به صدا دربيايد. با استفاده از برنامه DirectMusic Producer، آن‌ها مي‌توانند در آن مرحله براي آهنگ، يك درجه در نظر بگيرند.&lt;BR/&gt; &lt;BR/&gt;اين درجه مي‌تواند بسته به نوع عملكرد شخصيت بازي، تغيير كند. اگر شخصيت بازي در حال راه رفتن است، آهنگ آرام و هنگامي كه با دشمن خود مبارزه مي‌كند، آهنگ تندتر مي‌شود و يا نوع آهنگ تغيير مي‌كند و هنگامي كه مبارزه تمام مي‌شود، آهنگ دوباره آرام مي‌شود. اين تغييرها بدون ايجاد وقفه، به صورت پويا و بدون دخالت كاربر انجام مي‌شود. چون براساس DirecMusic، آهنگ به صورت شناور و بدون وقفه با نواختن وارياسيون‌هاي مختلف با قابليت واكنش به رويدادهاي بازي توليد مي‌شود. &lt;BR/&gt;&lt;BR/&gt;DirectMusic، با داده‌هاي موسيقي براساس پيام‌هاي حاوي اطلا‌عات  كار مي‌كند. يك آهنگ مي‌تواند در داخل سخت‌افزار و با نرم‌افزارهاي آهنگ‌ساز مانند Microsoft ‌Synthesizer ساخته شود. DirectMusic از استانداردهايMIDI و DLS پشتيباني مي‌كند. &lt;BR/&gt; &lt;BR/&gt;6- DirectInput&lt;BR/&gt;اين كامپوننت، سازوكار مشتركي را براي دسترسي به بسياري از كنترل‌كننده‌هاي بازي مانند دسته بازي، گيم‌پد، صفحه كليد و ماوس فراهم مي‌آورد. مهم‌ترين تغييري كه هنگام عرضه DirectX8 در DirectInput ايجاد شد، آمدنaction map بود. action map از توابعي مانند راندن يك وسيله يا شليك يك گلوله (كه به‌وسيله دستگاه‌هاي ورودي ايجاد مي‌شود) استفاده مي‌كند. زماني كه يك سخت‌افزار ورودي مانند دسته بازي را مي‌خريد، معمولا ‌ًaction mapنيز براي بسياري از انواع رايج بازي‌ها مانند شبيه‌ساز پرواز، تيراندازي اول شخص و بازي‌هاي مسابقه‌اي در آن پياده‌سازي شده است. &lt;BR/&gt;&lt;BR/&gt;7- DirectPlay &lt;BR/&gt;اين كامپوننت امكان بازي چند نفر را در بازي‌هاي چندنفره فراهم مي‌آورد، دسترسي به سرويس‌هاي ارتباطي را آسان مي‌سازد و راهي را براي بازي‌ها فراهم مي‌كند تا مستقل از پروتكل يا نوع سرويس آنلا‌ين با يكديگر در ارتباط باشند. همچنين از پروتكل‌هاي ارتباطي مطمئن پشتيباني‌مي‌كند تا مانع از گم شدن داده‌هاي مهم بازي روي شبكه شود. در واقع DirectPlay به صورت لا‌يه‌اي است كه روي پروتكل‌هاي معمول شبكه مانند IPX ،TCP/IP و ... قرار دارد. &lt;BR/&gt;&lt;BR/&gt;در واقع يك session يا جلسه در DirectPlay يك كانال ارتباطي بين چندين كامپيوتر است. يك برنامه كاربردي پيش از آن‌كه بتواند با سيستم‌هاي ديگر ارتباط برقرار كند، بايد در يك Session يا جلسه باشد. هر جلسه تنها يك ميزبان دارد و آن برنامه كاربردي‌اي است كه آن جلسه را ايجاد كرده‌است. تنها ميزبان مي‌تواند ويژگي‌هاي يك Session را تغيير دهد. &lt;BR/&gt;&lt;BR/&gt;DirectX 9.0  &lt;BR/&gt;اين كامپوننت، آخرين نسخه DirectX تا پيش از عرضه رسمي ويندوز ويستا است. مهم‌ترين چيزي كه همراه DirectX 9.0 عرضه شد، High-Level Shader Language) HLSL) است. زبان HLSL جايگزين زبان اسمبلي براي نوشتن pixel shaderها و vertex shaderها در DirectX است. پيش از ارائه DirectX 9.0 توسعه‌دهندگان بازي بايدshader‌ها را با استفاده از يك زبان اسمبلي سطح پايين توسعه مي‌دادند. HLSL با فراهم‌آوردن يك محيط برنامه‌نويسي توسعه‌دهنده ساده، توسعه همه بخش‌هاي نرم‌افزار مانند انيميشن و برنامه‌نويسي افكت‌ها را آسان مي‌كند. &lt;BR/&gt;&lt;BR/&gt;HLSL با همه پردازشگرهاي گرافيكي (GPU) سازگار با DirectX كار مي‌كند و به توسعه‌دهندگان امكان مي‌دهد افكت‌هاي بصري را روي گستره وسيع‌تري از پلتفرم‌ها ايجاد كنند؛ بدون اين‌كه نياز داشته باشند به جزئيات سخت‌افزار گرافيكي توجه كنند. &lt;BR/&gt;&lt;BR/&gt;DirectX 9.0 روي ويندوز 95 نصب نمي‌شود. چون بازي‌هايي كه به DirectX 9.0 نياز دارند، به كامپيوترهاي جديدتر و قوي‌تري هم نياز دارند كه ويندوز 98 يا نسخه‌هاي جديدتر روي آن‌ها نصب مي‌شود. تاكنون نسخه‌هاي a ،b و c از DirectX 9.0 ارائه شده است. هر نسخه جديدتر از DirectX داراي امنيت، كارايي و سيستم رفع خطاي بهتري است. &lt;BR/&gt;&lt;BR/&gt;DirectX 10&lt;BR/&gt;دوستداران بازي بايد خوشحال باشند از اين‌كه بدانند شركت مايكروسافت DirectX  را نيز توليد كرده است و همراه پيش توزيع Direct3D 10 عرضه خواهد شد. همچنين نرم‌افزارMicrosoft Windows Game Explorer نيز عرضه شده‌ كه به برنامه‌نويسان و توسعه‌دهندگان امكان مي‌دهد امكانات بروزكردن خودكار (auto-updating) را به بازي‌هايشان بيفزايند. مايكروسافت مي‌خواهد DirectX 9.0 و DirectX 10 را روي ويندوز ويستا عرضه كند. به گفته Rodolph Balaz از برنامه‌نويسان توسعه‌‌دهنده Direct3D و OpenGL در مايكروسافت، DirectX 10 تنها با سيستم‌عامل‌هاي جديد كار خواهد كرد و در حال حاضر مايكروسافت، برنامه‌اي براي پشتيباني ويندوز اكس‌پي از آن ندارد. &lt;BR/&gt;&lt;BR/&gt;تا زمان نوشته شدن اين مقاله هنوز نسخه رسمي ويندوز ويستا عرضه نشده است. ولي به نظر مي‌آيد اين ويندوز، هم از DirectX 10 و هم از DirectX 9.0 پشتيباني خواهد كرد. &lt;BR/&gt;&lt;BR/&gt;SGL OpenGL&lt;BR/&gt;شركت سيليكون گرافيكس(SGI  ،OpenGL) را با هدف ساخت يك API براي توسعه برنامه‌هاي گرافيكي دوبعدي و سه بعدي عرضه‌كرده‌است. پيش از ساخته شدن APIهاي گرافيكي مانند OpenGL و DirectX، بسياري از توليدكنندگان سخت‌افزار، كتابخانه‌هاي گرافيكي مختلف و متفاوتي داشتند. به همين دليل پشتيباني از نسخه‌هاي مختلف نرم‌افزارهايشان روي پلتفرم‌هاي سخت‌افزاري مختلف هزينه‌بر و انتقال يك برنامه كاربردي از يك پلتفرم سخت‌افزاري به پلتفرم سخت‌افزاري ديگر بسيار وقت‌گير و سخت بود. &lt;BR/&gt;&lt;BR/&gt;بنابراين SGI نمونه برنامه‌اي را توليد كرد كه توليدكنندگان سخت‌افزار بايد از آن براي توسعه درايورهاي OpenGL در سخت‌افزارهايشان استفاده كنند. اين برنامه به صورت اپن‌سورس ارائه شده‌است. ولي سازندگان اين سخت‌افزارها مي‌توانند قابليت‌هاي گوناگوني را برپايه OpenGL در سخت‌افزارهايشان ايجاد كنند. تصميم‌گيري درباره ايجاد تغييرات در OpenGL را كنسرسيوم ARB اتخاذ مي‌كند.&lt;BR/&gt; &lt;BR/&gt;اين كنسرسيوم شامل اعضاي مهمي همچون اپل، اينتل، آي‌بي‌ام، سان، ATI، دل، nVIDIA، سيليكون‌گرافيكس و3Dlabs است و از سوي شركت‌هاي معتبر ديگري مانند متراكس، S3 ،Xi و Quantum 3D حمايت مي‌شود. توسعه‌دهندگان نرم‌افزار براي استفاده از OpenGL در نرم‌افزارهايشان نيازي به اخذ مجوز ندارند. ولي توليدكنندگان سخت‌افزار براي پياده‌سازي سخت‌افزاري OpenGL نيازمند اخذ مجوز از SGI هستند.  &lt;BR/&gt; &lt;BR/&gt;OpenGL چيست؟ &lt;BR/&gt;در اوايل پيدايش OpenGL، از اين API در كارهاي صنعتي، طراحي وسايل داخلي، مكانيكي و نيز در آناليزهاي علمي و آماري استفاده مي‌شد. &lt;BR/&gt;&lt;BR/&gt;در سال 1996، نويسندگان و توسعه‌دهندگان بازي‌هاي كامپيوتري از نسخه ويندوزي OpenGL براي ساخت بازي‌هاي كامپيوتري استفاده كردند. OpenGL براي پشتيباني از گستره وسيعي از تكنيك‌هاي رندركردن گرافيكي پيشرفته طراحي شده است كه مي‌توان پاره‌اي از آن‌ها را به اين‌صورت نام برد:  &lt;BR/&gt;&lt;BR/&gt;نورپردازي: قابليت تحليل ميزان رنگ هنگام تابش مدل‌هاي متفاوت نور به يك سطح از يك يا چند منبع نور مختلف.&lt;BR/&gt;&lt;BR/&gt;سايه‌سازي نرم: قابليت تحليل افكت‌هاي سايه هنگام تابش نور به يك زاويه و ايجاد اختلا‌ف نور خفيف در مقابل آن سطح (مانند نور كمي كه هنگام تابش آفتاب به يك صخره يخي در اطراف آن ايجاد مي‌شود). &lt;BR/&gt;&lt;BR/&gt;حركت محو ومدل‌سازي: توانايي تغيير مكان و اندازه  پرسپكتيو يك شي در فضاي سه بعدي. &lt;BR/&gt;مجموعه امكانات OpenGL شبيه Direct3D است. ولي API سطح پايين‌تر آن (نزديك‌تر به سطح سخت‌افزار) باعث مي‌شود كنترل خوبي روي عناصر اصلي ايجاد صحنه‌هاي سه بعدي مانند اطلا‌عات سه‌ضلعي‌ها كه سلول‌هاي تشكيل‌دهنده يك مدل سه بعدي هستند داشته باشد. &lt;BR/&gt;&lt;BR/&gt;دو سطح پشتيباني از شتاب‌دهندگي سخت‌افزاري براي OpenGL وجود دارد: installing client driver) ICDs) كه به نوردهي ايجاد تغيير و رستركردن (تبديل يك فريم سه بعدي چند ضلعي ذخيره شده درframe buffer به يك تصوير كامل با بافت‌ها و نشانه‌هاي عمق و نور) شتاب مي‌دهد و mini client server) MCs) كه از رستركردن پشتيباني مي‌كند. &lt;BR/&gt;&lt;BR/&gt;OpenGL 1.4 و OpenGL 1.5 به‌ترتيب در تابستان  2002 و 2003 معرفي شدند كه هر يك امكانات و كاربردهاي بيشتري از نسخه‌هاي پيش از خود داشتند. بزرگ‌ترين آن‌ها OpenGL Shading Language بود؛ زباني ويژه برنامه‌نويسي vertex-shader و pixel-shader كه در صورت نياز به OpenGL الصاق مي‌شد. OpenGLShading Language زباني شد كه به سرعت در سطح گسترده‌اي مورد پشتيباني يونيكس، ويندوز، لينوكس و ديگر سيستم‌عامل‌ها براي توسعه‌دهنده گرافيك‌هاي تعاملي و برنامه‌هاي كاربردي ترسيمي قرار گرفت. &lt;BR/&gt;&lt;BR/&gt;OpenGL 2.0 &lt;BR/&gt;OpenGL 2.0 آخرين نسخه عرضه شده تا اوايل سال 2006 ميلا‌دي است. OpenGL Shader Language همراه با اين نسخه عرضه شده و بر پايه استاندارد ANSYC طراحي شده است. برخي قابليت‌هاي تازه اين نسخه عبارتند از: &lt;BR/&gt;&lt;BR/&gt;- سايه‌زني قابل برنامه‌ريزي به‌وسيله OpenGL Shader Language و APIهاي آن. قدرت ايجاد Shader و برنامه‌نويسي اشيا، بخش ديگري از تغييرات ايجاد شده در اين نسخه است.&lt;BR/&gt;&lt;BR/&gt;- رندر چندگانه كه به shaderهاي قابل برنامه‌نويسي امكان مي‌دهد در بافرهاي خروجي چندگانه در يك گذر مقادير مختلفي بنويسند. &lt;BR/&gt;&lt;BR/&gt;- بافت‌هاي دو طرفه، با قابليت تعريف كاربرد آن بافت براي سطح جلو و پشت يك مدل اوليه كه كيفيت حجم سايه و كارايي الگويم‌هاي رندر هندسي اشياي سخت را ارتقا مي‌دهد. &lt;BR/&gt;&lt;BR/&gt;- Spriteهاي نقطه كه مختصات بافت يك نقطه را با مختصات بافت قرار داده شده در مقابل آن نقطه جابه‌جا مي‌كنند و رسم نقاط را در بافت‌هاي طراحي شده در كامپيوترهاي معمولي نيز ممكن مي‌سازند.&lt;BR/&gt;&lt;BR/&gt;- بافت‌هاي Non-power-of-two كه براي همه انواع بافت‌ كاربرد دارد كه در نتيجه از بافت‌هاي چهارگوش پشتيباني مي‌نمايد و درعمل حافظه كمتري اشغال مي‌كند. &lt;BR/&gt;&lt;BR/&gt;OpenAL &lt;BR/&gt;OpenAL، يك API ديگر است كه براي ايجاد و مديريت صداهاي سه بعدي در بازي‌هاي كامپيوتري و ديگر انواع نرم‌افزارها به صورت يك پروژه مشترك ميان شركت Loki Software و Creative ساخته شده است. &lt;BR/&gt;&lt;BR/&gt;كتابخانه اين API مجموعه‌اي از صداهاي قابل حركت در فضاي سه‌بعدي را مدل‌سازي مي‌كند. عناصر اصلي OpenAL شامل يك شنونده، يك منبع و يك بافر است. ممكن است تعداد زيادي بافر وجودداشته باشد كه شامل داده‌هاي صوتي هستند. هر بافر مي‌تواند به يك يا چند منبع ضميمه شود. هميشه يك عنصر شنونده (براي محتواي صوتي) وجود دارد كه موقعيت مكاني منبع صوتي كه صداي آن شنيده مي‌شود را نشان مي‌دهد. OpenAL در موتورهاي گرافيكي Epic Games Unreal نيز براي ساخت افكت‌هاي صوتي به كار مي‌رود. &lt;BR/&gt;&lt;BR/&gt;OpenGL Performer &lt;BR/&gt;OpenGL Performer، رابط برنامه‌نويسي قدرتمند و كاملي است كه توسعه‌دهندگان براي شبيه‌سازي بصري از آن استفاده مي‌كنند. ابزارهاي موجود در آن، توسعه برنامه‌هاي شبيه‌سازي بصري، طراحي بر اساس شبيه‌سازي، واقعيت مجازي، نرم‌افزارهاي  علمي، سرگرمي‌هاي تعاملي، برنامه‌هاي ويديويي و طراحي با كامپيوتر را آسان مي‌كند. اين رابط برنامه‌نويسي به برنامه‌نويسان امكان مي‌دهد از قابليت‌هاي سيستم به صورت بهينه استفاده كنند. آخرين نسخه اين نرم‌افزار  OpenGL Performer 3.2 است. &lt;BR/&gt;&lt;BR/&gt;OpenGL Volumizer&lt;BR/&gt;OpenGL Volumizer، يك API گرافيكي است كه در بخش‌هاي انرژي، توليد، داروسازي و تجارت كاربرد دارد. اين API  براي انجام كارهاي تعاملي با كيفيت بالا‌ و بصري نمودن و شبيه‌سازي يك محيط با استفاده از مجموعه بزرگي از داده‌هاي حجمي (داده‌هايي كه مختصات يك شي در فضاي سه بعدي را نشان مي‌دهند) طراحي شده است. براي نمونه در نرم‌افزارهاي پزشكي براي شبيه‌سازي وضعيت بخش خاصي از بدن، از اين نرم‌افزار استفاده مي‌شود. OpenGL Volumizer آخرين نسخه اين API تا اوايل سال 2006 ميلا‌دي است كه بر پايه كتابخانه گرافيكي استانداردOpenGL ساخته شده و شامل رابط كلا‌س ++C و قابل‌استفاده در سيستم‌عامل‌هاي ويندوز و لينوكس 32 بيتي و 64 ‌بيتي است.  &lt;BR/&gt;&lt;BR/&gt;OpenGL Multipipe SDK &lt;BR/&gt;OpenGL Multipipe SDK يك لا‌يه API است كه مديريت برنامه‌هاي گرافيكي را در زير سيستم‌ها و ساختارهاي گرافيكي چندگانه آسان مي‌كند. برنامه‌هاي كاربردي نوشته شده برپايه اين API به نرمي و رواني، هم روي سيستم‌هاي روميزي تك پردازنده‌اي و هم روي سيستم‌هاي چند پردازنده‌اي با سيستم‌هاي گرافيكي قدرتمند اجرا مي‌شوند. &lt;BR/&gt;&lt;BR/&gt;نتيجه‌گيري‌&lt;BR/&gt;همان‌گونه كه بيان شد ارتباط بين برنامه‌ها و سخت‌افزاري كه آن‌را اجرا مي‌كند برعهده API است. سازندگان بزرگ نرم‌افزار و سخت‌افزار API خاصي را براي برنامه‌هاي مالتي‌مديا آماده كرده‌اند كه مطرح ترين آن‌ها DirectX و OpenGL  هستند.&lt;BR/&gt;&lt;BR/&gt;برنامه های DirectX در دو حالت اجرا میشند:&lt;BR/&gt;1-حالت تمام صفحه (Full Screen Mode) &lt;BR/&gt;2-حالت پنجره ای (Windowed Mode)&lt;BR/&gt;&lt;BR/&gt;برنامه امروز در حالت Full Screen اجرا می شود.VB رو اجرا کنید و یه پروژه نوع استاندارد ایجاد کنید.&lt;BR/&gt;برای این که بتوانیم از توابع اشیای DirectX استفاده کنیم باید کتابخانه Type Library رو به پروژه اضافه کنیم.&lt;BR/&gt;برای این کار بر روی منوی Project کلیک و References رو انتخاب کنید. در پنجره باز شده و در لیست موجود DirectX 7.0 for Visual Basic Library Type  را تیک بذارید و OK کنید.&lt;BR/&gt;&lt;BR/&gt;حالا برای اینکه ما بتوانیم از DirectX استفاده کنیم باید یک شیئ از نوع DirectX7 تعریف کنیم. پس در قسمت General فرم یک شیئ از این نوع تعریف کنید.&lt;BR/&gt;Dim DX As New DirectX7&lt;BR/&gt;&lt;BR/&gt;اشیاء دیگری که تعریف خواهیم کرد این ها هستند:&lt;BR/&gt;&lt;BR/&gt;1-یک شیئ از نوع DirectDraw7&lt;BR/&gt;&lt;BR/&gt;این همون شیئی که به ما کمک میکنه که سطوح رو ایجاد کنیم:&lt;BR/&gt;&lt;BR/&gt;Dim DD As DirectDraw7&lt;BR/&gt;&lt;BR/&gt;2- 2 شیئ از نوع DirectDrawSurface7&lt;BR/&gt;&lt;BR/&gt;این اشیاء سطوحی هستند که ما شکل ها، متون و ... رو بر روی اونها نگارش می کنیم(تخته سیاه)&lt;BR/&gt;&lt;BR/&gt;Dim Primary As DirectDrawSurface7               ‘سطح اصلی&lt;BR/&gt;Dim Backbuffer As DirectDrawSurface7           ‘ پشت صحنه&lt;BR/&gt;&lt;BR/&gt;یک متغیر عمومی از نوع Boolean هم تعریف می کنیم. این متغیر مشخص می کنه که تا چه زمانی برنامه باید اجرا بشه:&lt;BR/&gt;&lt;BR/&gt;Dim EndPro As Boolean&lt;BR/&gt;&lt;BR/&gt;حالا ادامه میدیم.&lt;BR/&gt;&lt;BR/&gt;طریقه کار به این صورت که اول ما شیئ DD رو مقداردهی میکنیم. یعنی در حقیقت به DirectX7 میگیم که شیئ DD رو برای ما ایجاد کنه. پس در ادامه (Form_Load) بنویسید:&lt;BR/&gt;&lt;BR/&gt;Set DD = DX.DirectDrawCreate (&amp;quot;&amp;quot;)&lt;BR/&gt;&lt;BR/&gt;حالا باید به شیئ DD که از نوع DirectDraw7 هست بگیم که ما میخوایم از کدوم فرم برنامه استفاده کنیم. من فرض کردم که فرم برنامه Form1 هست.همچنین باید به کامپیوتر بفهمونیم که میخوایم برنامه تمام صفحه باشه یا نه. برای اینکار از متد SetCooperativeLevel شیئ DD استفاده می کنیم:&lt;BR/&gt;&lt;BR/&gt;DD.SetCooperativeLevel Form1.hWnd, DDSCL_FULLSCREEN Or DDSCL_EXCLUSIVE&lt;BR/&gt;&lt;BR/&gt;حالا باید رزولوشن صفحه رو تغییر بدیم. فرض کنیم که سیستم شما از حالت 640 * 480 پشتیبانی می کنه. برای اینکار از متد SetDisplayMode شیئ DD استفاده می کنیم:&lt;BR/&gt;&lt;BR/&gt;DD.SetDisplayMode 640, 480, 16, 0, DDSDM_DEFAULT&lt;BR/&gt;&lt;BR/&gt;آرگومان اول عرض، آرگومان دوم Height و آرگومان سوم عمق بیت حالت رو نشون میده.اون یکی ها هم ref و Mode هستند&lt;BR/&gt;&lt;BR/&gt;حالا میخوایم سطوح رو مقداردهی کنیم. کدهای زیر رو به پروژه خود بیفزایید:&lt;BR/&gt;&lt;BR/&gt;Dim ddsd As DDSURFACEDESC2&lt;BR/&gt; ddsd.lFlags = DDSD_BACKBUFFERCOUNT Or DDSD_CAPS&lt;BR/&gt; ddsd.lBackBufferCount = 1&lt;BR/&gt; ddsd.ddscaps.lCaps = DDSCAPS_COMPLEX Or DDSCAPS_FLIP Or DDSCAPS_PRIMARYSURFACE Or DDSCAPS_VIDEOMEMORY&lt;BR/&gt;&lt;BR/&gt;برای اینکه بتونید یه سطح رو ایجاد کنید باید یه شیئ از نوع DDSURFACEDESC2 رو به ان وابسته کنیم.&lt;BR/&gt;&lt;BR/&gt;حالا سطح اصلی (Primary) خودمون رو ایجاد کنیم. این سطح همون سطحی است که کاربر میبینه. (اینکه چه جوری کامپایلر میفهمه که این همون سطح هست برمیگرده به خصوصیات شیئ ddsd از نوع DDSURFACEDESC که بالا مقداردهی کردیم و این شیئ مشخص میکنه که Primary تخته سیاه باشه). با استفاده از متد CreateSurface شیئ DD این سطح رو ایجاد می کنیم. آرگومان این تابع همون شیئ بالاییه) داریم:&lt;BR/&gt;&lt;BR/&gt;Set Primary = DD.CreateSurface(ddsd)&lt;BR/&gt;&lt;BR/&gt;حالا باید سطح BackBuffer رو مقداردهی کنیم. ولی شاید بپرسید ما که Primary رو داریم دیگه این BackBuffer برای چیه؟ باید بگم برای اینکه از پرپر زدن صفحه نمایش جلوگیری کنیم، ما بجای اینکه همه چیز رو مستقیما روی سطح Primary رسم کنیم، میایم و اول روی سطح (BackBuffer) که متصل به Primary هستش رسم می کنیم و صحنه آماده رو منتقل می کنیم به Primary (در حقیقت میتونیم بگیم که BackBuffer چرک نویس ما هست).&lt;BR/&gt;&lt;BR/&gt;پس حالا ما سطح BackBuffer رو متصل به سطح Primary ایجاد می کنیم. داریم:&lt;BR/&gt;&lt;BR/&gt;Dim ddscaps As DDSCAPS2&lt;BR/&gt;ddscaps.lCaps = DDSCAPS_BACKBUFFER Or DDSCAPS_VIDEOMEMORY&lt;BR/&gt;Set Backbuffer = Primary.GetAttachedSurface(ddscaps)&lt;BR/&gt;&lt;BR/&gt;حالا همه چی آماده است.&lt;BR/&gt;&lt;BR/&gt;در ضمن فکر میکنم همه با نوع داده RECT آشنایی داشته باشند (اگه کسی آشنایی نداره در قسمت نظرات بگه تا من اونو هم توضیح بدم). در دایرکت ایکس برای اینکه بخوایم  یه قسمتی از صفحه رو مشخص کنیم از این نوع داده استفاده می کنیم. یه متغیر هم از این نوع تعریف می کنیم تا کل صفحه رو مشخص کنیم. (برای رنگ آمیزی کل سطح و ...) توجه داشته باشید که این نوع داده در کتابخانه DirectX موجود هست و شما نیازی ندارید که مثل برنامه های دیگه این نوع رو تعریف کنید :&lt;BR/&gt;&lt;BR/&gt;Dim rec As RECT&lt;BR/&gt;rec.Bottom = 480&lt;BR/&gt;rec.Left = 0&lt;BR/&gt;rec.Right = 640&lt;BR/&gt;rec.Top = 0&lt;BR/&gt;&lt;BR/&gt;اینو به یاد داشته باشید که ما در برنامه هایی که با دارکت ایکس می نویسیم. کل عملیات رو در قالب یه حلقه (معمولا حلقه Do) انجام میدیم. به این صورت که پشت سر هم به طور مداوم صحنه های خودمون رو بر روی سطح ترسیم می کنیم و به Primary منتقل می کنیم. پس در پروژه خویشتن ( و در همان Form_Load، یعنی ادامه کدهای قبلی) بنویسید:&lt;BR/&gt;&lt;BR/&gt;Do While EndPro=False&lt;BR/&gt;&lt;BR/&gt;  Backbuffer.BltColorFill rec, 0                                    ‘پاک کردن صفحه&lt;BR/&gt;&lt;BR/&gt;  Backbuffer.SetForeColor RGB(256, 0, 0)       ‘ تنظیم رنگ ترسیم&lt;BR/&gt;&lt;BR/&gt;  Backbuffer.DrawText 300, 250, “Hello World”, False  ‘درج متن&lt;BR/&gt;&lt;BR/&gt;  DoEvents                                                   ‘توضیح در پایین&lt;BR/&gt;&lt;BR/&gt;  Primary.Flip Nothing, DDFLIP_WAIT              ‘ انتقال از چرک نویس به پاک نویس&lt;BR/&gt;&lt;BR/&gt; Loop&lt;BR/&gt;&lt;BR/&gt;حالا ببینیم که چیکار کردیم. تا زمانی که مقدار متغیر EndPro نادرست است این عملیات رو انجام میدیم:&lt;BR/&gt;&lt;BR/&gt;برای پاک کردن صفحه هر بار صفحه رو با رنگ سیاه پر میکنیم. متد BltColorFill سطح رو به روش بلیت پر میکنه. یعنی این که در حافظه مقادیر هر پیکسل رو برابر رنگی که بهش میدیم قرار میده(در اینجا این رنگ رو برابر 0 که همون سیاه هست قرار دادیم).&lt;BR/&gt;&lt;BR/&gt;با استفاده از متد SetForeColor رنگ تمام ترسیماتی که انجام میدیم رو عوض می کنیم.(به اصطلاح ForeColor سطح رو تغییر میدیم.)&lt;BR/&gt;&lt;BR/&gt;با استفاده از متد DrawText متن مورد نظرمون رو بر روی صفحه حک می کنیم. دو آرگومان اول مختصات x و y محل درج متن رو مشخص می کنند.&lt;BR/&gt;&lt;BR/&gt;مـــــــهـــــــم : وقتی ما پشت سر هم و بدون وقفه یه کاری رو انجام میدیم، برنامه دیگه چیز دیگه ای رو پردازش نمی کنه. بنابراین ما با این عبارت(DoEvents)  به کامپایلر میگیم در هر بار انجام دستورات حلقه، دستورات دیگه ای مانند فشرده شدن کلید، کلیک ماوس و ... رو هم پردازش کنیم. اگه خیلی کنجکاو هستید، بعد از این که پروژه تون رو Save کردید یه بار برنامه رو بدون DoEvents اجرا کنید&lt;BR/&gt;&lt;BR/&gt;حالا صحنه ما آماده است پس اونو میذاریمش جلوی چشم کاربر. این کار با استفاده از متد Flip سطح Primary انجام میشه. (درمورد فلیپ بعدا اگه عمری باقی باشه توضیح میدم.)&lt;BR/&gt;&lt;BR/&gt;هنگامی که متغیر EndPro مقدار Trueبگیره(هنگامی که کاربر قصد خروج دارد)، حلقه شکسته میشه و ما باید برنامه رو به پایان ببریم. پس حافظه ای که به سطوح و اشیاء دیگر اختصاص داده ایم رو آزاد میکنیم:&lt;BR/&gt;&lt;BR/&gt;Set DD = Nothing&lt;BR/&gt;Set Primary = Nothing&lt;BR/&gt;Set Backbuffer = Nothing&lt;BR/&gt;Set DX = Nothing&lt;BR/&gt;End&lt;BR/&gt;&lt;BR/&gt;در اینجا Form_Load به پایان میرسه. حالا فقط یه کار مونده. اون هم اینه کا وقتی کاربر کلید Esc رو فشار میده باید برنامه به پایان برسه، یعنی مقدار متغیر EndPro برابر True بشه. پس این خطوط کد رو به پروژه تون اضافه کنید:&lt;BR/&gt;&lt;BR/&gt;Private Sub Form_KeyPress(KeyAscii As Integer)&lt;BR/&gt; If KeyAscii = 27 Then EndPro=True&lt;BR/&gt;End Sub&lt;BR/&gt;&lt;BR/&gt;حالا برنامه رو اجرا کنید&lt;BR/&gt;&lt;BR/&gt;تمرین:&lt;BR/&gt;1-برنامه را طوری تغییر دهید که به جای عبارت Hello World نام خودتان را نمایش دهد.&lt;BR/&gt;2-برنامه را طوری تغییر دهید که به جای عبارت Hello World ، زمان سیستم را نمایش دهد.&lt;BR/&gt;3-کاری کنید که عبارت Hello World در روی صفحه به سمت چپ (یا راست حرکت کند)&lt;BR/&gt;&lt;BR/&gt;&lt;BR/&gt;DirectX 10 و اهمیت آن در صنعت کامپیوتر های شخصی &lt;BR/&gt;&lt;BR/&gt;توضیح : این گفتگو در تاریخ 19 مهرماه در سایت BootDaily منتشر شده است. در این مصاحبه پرسش ها توسط BD (کوتاه شده عبارت Boot Daily) و پاسخ ها با نام Chris (مدیر بخش گسترش و بازاریابی مایکروسافت) مشخص شده اند. همچنین منظور از DX10 در این مصاحبه DirectX 10 می باشد.&lt;BR/&gt;&lt;BR/&gt;BD : لطفا اهمیت DX10 برای دوست داران بازی ها را در یک جمله توضیح دهید.&lt;BR/&gt;&lt;BR/&gt;Chris : ما در مایکروسافت DirectX 10 را به عنوان بلند ترین جهش در کیفیت و کارایی گرافیک در صنعت کامپیوتر های شخصی از زمان پیدایش DirectX که به زمان ویندوز 95، و تحولی در زمینه بازی های کامپیوتری و تکنولوژی مربوط به آن می دانیم.&lt;BR/&gt;&lt;BR/&gt;BD : و اهمیت آن برای کاربران عادی؟&lt;BR/&gt;&lt;BR/&gt;Chris : بله، DirectX 10 بالاترین کیفیت و کارایی گرافیکی را در پلاتفرم ویندوز را به همراه خواهد داشت که نتیجه آن تجربه ای باورنکردنی و دور از ذهن برای کاربران عادی خواهد بود.&lt;BR/&gt;&lt;BR/&gt;BD : این یک حقیقت است که تعداد زیادی از بازی های معروف و پرطرفدار درحال حاظر بر پایه موتور گرافیکی Doom3 که از OpenGL بهره می گیرد ساخته می شوند. به نظر شما DX10 چه مزیت هایی نسبت به OpenGL برای تولید کنندگان بازی های کامپیوتری به ارمغان می آورد؟&lt;BR/&gt;&lt;BR/&gt;Chris : همانطور که می دانید، ما DirectX 10 را برای ویندوز ویستا و با هدف ارایه دادن یک تجربه باورنکردنی از جزئیات گرافیکی به کاربران و بازیکنان ، تماما از پایه و از صفر ساخته ایم. این نسخه از DirectX نسب به نسخه های قبلی دارای بازده به مراتب بیشتر و در عین حال با ضریب اطمینان و پایداری بیشتر خواهد بود. DirectX 10 به لطف Shader Model 4.0 به طور فوق العاده ای کیفیت و جزئیات باورنکردنی را در اختیار توسعه دهندگان و نهایتا کاربران خواهد گذاشت که از آن جمله توانایی بکارگیری محیط های پیچیده گرافیکی و ترسیم چهره ها به صورت بسیار طبیعی و توانایی نمایش تعداد دلخواه از آیتم ها در صحنه می باشد.&lt;BR/&gt;&lt;BR/&gt;اشاره کردید که بازی های معروف و پرطرفدار بر اساس موتور گرافیکی Doom3 و OpenGL ساخته می شوند، اما به عقیده من تعداد بازی هایی که از DirectX استفاده می کنند به مراتب بیشتر و حتی زیبا تر هستند. بازی هایی زیادی هستند که بر اساس موتور های گرافیکی Unreal و Source و با استفاده از DirectX ساخته می شوند. حتی ID (منظور شرکت ID Software سازنده سری بازی های Doom و Quake است-م) نیز برای منطبق ساختن بازی های خود با کنسول های Xbox و Xbox360 آنها را به DirectX تبدیل می کند.&lt;BR/&gt;&lt;BR/&gt;با این حال، تمامی برنامه هایی که از واسط گرافیکی OpenGL استفاده می کنند قابلیت اجرا در ویندوز ویستا را به شرط پشتیبانی درایور گرافیک و استفاده از وصله (Patch) مناسب، خواهند داشت. به همین خاطر سازندگان و فروشندگان قطعات سخت افزاری ملزم به ارایه ICD یا Installable Client Drivers که امکان استفاده از شتابدهنده گرافیکی را برای پردازش دستورات OpenGL را خواهد داد، هستند&lt;BR/&gt;&lt;BR/&gt;BD : چرا این نسخه از DX10 تنها قابل استفاده در ویندوز ویستا است؟ آیا این نوعی اجبار کاربران برای خرید و ارتقا به ویندوز ویستا نیست؟&lt;BR/&gt;&lt;BR/&gt;DirectX 10 : Chris نیاز به امکانات مشخصی جهت بهره گیری کامل از سخت افزار گرافیکی سیستم دارد که این امکانات و خصیصه ها تنها در سیستم عامل ویندوز ویستا موجود است. ما یک هدف بزرگ را برای دراختیار گذاشتن تجربه گرافیکی جدید به کاربران در نظر گرفته ایم و همانطور که قبلا گفتم، DirectX 10 کاملا از پایه و بدون استفاده از نسخه های قبلی این واسط گرافیکی ساخته شده است و بنابر این هیچگونه سازگاری با نسخه های قبلی از سیستم عامل ویندوز ندارد.&lt;BR/&gt;&lt;BR/&gt;DirectX 10 برپایه مدل جدید درایور تصویر ویندوز ویستا (Windows Vista Display Driver Model یا WDDM) که معرف عصر جدیدی در قابلیت های گرافیکی و افزایش پایداری و ضریب اطمینان درنظر گرفته شده، طراحی شده است. در عین حال ما با انجام تغییراتی در معماری مدل درایور ها سعی در آسان سازی و افزایش پایداری و همچنین سازگاری بیشتر تراشه های گرافیکی با مجموعه دستورات هوش مصنوعی و محاسبات فیزیکی (جدا از تراشه های محاسب فیزیکی) انجام داده ایم که مجموعه این دلایل برای ارایه نشدن این نسخه از DirectX جهت سیستم عامل های قبلی مایکروسافت از جمله ویندوز XP متقاعد کننده به نظر می رسد.&lt;BR/&gt;&lt;BR/&gt;BD : به غیر از رشته های کوتاه تر (Shorter Program Strings)، مزیت اصلی Shader Model 4.0 نسبت به نسخه 3.0 آن برای توسعه دهندگان بازی های کامپیوتری چست؟&lt;BR/&gt;&lt;BR/&gt;Shader Model 4.0 : Chris به توسعه دهندکان اینگونه نرم افزار ها اجازه انجام محاسبات پیچیده بیشتری را در تراشه های گرافیکی (GPU) می دهد. این عمل ضمن کاهش بار پردازش از پردازنده سیستم را که باعث عدم بهره گیری از قدرت کامل تراشه گرافیکی می شود،  اجازه انجام محاسبات سنگین مربوط به هوش مصنوعی و نیز افزایش تعداد آیتم ها را در صحنه در اختیار توسعه دهندگان قرار خواهد داد.&lt;BR/&gt;&lt;BR/&gt;در عین حال DirectX 10 به همراه Shader Model 4.0 به لطف پشتیبانی از سایه زن های متحد (Unifyed Shaders) انعطاف پذیری و خلاقیت بسیار بیشتری را در اینگونه توسعه دهندگان قرار خواهد داد.&lt;BR/&gt;&lt;BR/&gt;BD : شرکت های ATI و nVIDIA هردو درحال طراحی و ساخت تراشه های گرافیکی سازگار با DX10 هستند. به نظر شما این تراشه های گرافیکی در مقایسه با کنسول های بازی Xbox 360 و PS3 چگونه عمل خواهد کرد؟&lt;BR/&gt;&lt;BR/&gt;Chris : این موضوع و تلااش این دو شرکت در مورد DirectX 10 بسیار هیجان انگیز است. اما بهتر است این سوال را از خود آنها بپرسید!&lt;BR/&gt;&lt;BR/&gt;BD : به غیر از برتری های DX10 در مورد بازی های کامپیوتری، این نسخه چه نقشی را در برنامه های کاربردی آینده بازی خواهد نمود؟&lt;BR/&gt;&lt;BR/&gt;Chriss : کلا DirectX  فراتر از صرفا یک واسط و مجموعه دستورها برای بازی های کامپیوتری است. در گذشته نیز بسیاری از برنامه های کاربردی از CAD/CAM و 3DStudio گرفته تا برنامه های پزشکی و تصویر برداری نیز از مزایای DirectX بهره گرفته اند. با این حال  DirectX 10 باز هم نسبت به نسخه های قبلی قطعا امکانات بسیار مناسب تری را در اختیار اینگونه برنامه ها خواهد گذاشت. به یک نکته دقت کنید! ویندوز ویستا از DirectX 10 به عنوان یک مولفه گرافیکی استفاده می کند - پس ویندوز ویستا هم خود یک برنامه کاربردی استفاده کننده از DirectX 10 محسوب می شود!&lt;BR/&gt;&lt;BR/&gt;BD : نحوه تعامل DX10 با کاربرانی که از سخت افزار DX10 استفاده نمی کنند چگونه خواهد بود؟&lt;BR/&gt;&lt;BR/&gt;DirectX 10 : Chriss و ویندوز ویستا کاملا با تمامی برنامه ها و بازی های منطبق با نسخه های قدیمی تر DirectX سازگار هستند. کسانی که در زمان انتشار ویندوز ویستا، سخت افزار منطبق بر DirectX 10 را در اختیار ندارند و یا تهیه نکرده اند، هنوز هم قابلیت اجرای بازی ها و برنامه های برپایه DirectX 10 را خواهند داشت. DirecrX 9 هم در ویندوز ویستا برای این گروه از کاربران در نظر گرفته شده است. با این حال جالب است بدانید کاربرانی که با استفاده از سخت افزار منطبق بر DirectX 10 بازی های DirectX 9 را اجرا کنند شاهد افزایش کیفیت و بازده آن خواهند بود!&lt;BR/&gt;&lt;BR/&gt;درعین حال توسعه دهندگان نیز می توانند با خیالی آسوده به تولید بازی ها و نرم افزار های بر اساس DirectX 9 برای ویندوز ویستا بپردازند.&lt;BR/&gt;&lt;BR/&gt;BD : آیا به نظر شما DX10 نهایت گرافیک در کامپیوتر خواهد بود؟ یعنی با فرض در اختیار داشتن سخت افزار مناسب آیا شاهد تصاویر منطبق بر واقعیت با سرعت نمایش مناسب خواهیم بود؟&lt;BR/&gt;&lt;BR/&gt;Chris : ما به DirectX 10 به عنوان گام بلندی در زمینه گرافیک کامپیوتری می نگریم. مطمنا این نسخه از DirectX تجربه جدید را در اختیار کاربران خواهد گذاشت و با اجازه دادن به توسعه دهندگان برای آشنایی با قابلیت های DirectX 10 این تجارب بهتر و بهتر نیز خواهند شد. اما ما همچنین عقیده داریم که هنوز هم موارد زیادی در این مورد قابل دستیابی هستند و بدست آوردن آنها نیز به زمان بیشتری نیاز دارد. گرافیک در ویندوز و DirectX 10 هنوز هم در راه توسعه و تکامل هستند.&lt;BR/&gt;&lt;BR/&gt;BD : آیا شما در این لحظه در مورد تراشه های DirectX 10 شرکت های ATI و nVIDIA نظری دارید؟ کدام یک را برای خود انتخاب می کنید؟&lt;BR/&gt;&lt;BR/&gt;Chris : نه! ما بدون همکاران خود در جای فعلی قرار نداشتیم! مایکروسافت با تمامی شرکت های فعال در زمینه گرافیک کامپیوتری همکاری نزدیک و دوستانه ای داشته و دارد. هردوی آنها همکاری های بسیاری در توسعه پلاتفرم ویندوز تا کنون با ما داشته اند. دیدن محصولات آنها برای ویندوز ویتا در فروشگاه های سخت افزاری برای ما جال خواهد بود.&lt;BR/&gt;&lt;BR/&gt;BD : در مورد پیشرفت های صدا در DX10 نیز توضیح دهید. آیا ما میتوانیم با این نسخه صداها را &amp;quot;ببینیم&amp;quot; !؟&lt;BR/&gt;&lt;BR/&gt;Chris : این نسخه از DirectX کماکان روال گذشته را در مورد چگونگی و نحوه تولید صدا ها ( بر پایه XACT cross-platform audio creation tool) را ادامه می دهد. بنابر این برتری عمده ای نسبت به نسخه های قبلی در این نسخه قابل ذکر نیست اما پیشرفت هایی انجام شده است.&lt;BR/&gt;&lt;BR/&gt;BD : ویندوز ویستا چگونه برای اجرای یک بازی یا برنامه با استفاده از DX10 و یا DX9 را با توجه به نوع GPU تصمیم گیری می کند؟&lt;BR/&gt;&lt;BR/&gt;Chris : وقتی روند اجرای یک بازی آغاز می شود، ویندوز ویستا با تشخیص نسخه DirectX به کار رفته در بازی و سخت افزار سیستم، گزینه مناسب را انتخاب خواهد کرد.&lt;BR/&gt;&lt;BR/&gt;BD : گفته می شود که DirectX10 از Geometry Shaders (سایه زن هندسی) استفاده می کند. این قابلیت تا چه حد به روند انجام و تشکیل اشکال هندسی کمک خواهد کرد؟&lt;BR/&gt;&lt;BR/&gt;Geometry Shader : Chris دقیقا در بین سایه زن های پیکسل و راس (Vertex and Pixel) در خط لوله پردازش قرار دارد. می تواند از رئوس و مثلث های ایجاد شده در ترسیم اشکال بعدی، بدون نیاز به پردازش مجدد، استفاده کند. سایه زن هندسی کارهای دیگری نیز انجام میدهد : تقویت تعداد مثلث ها با انتخاب یک یا چند مثلث از قبل پردازش شده و تکرار آنها بدون نیاز به پردازش مجدد، و یا تشکیل مثلث های جدید با ترکیب مثلث های دردسترس، تولید نقطه ها و خط های جدید و یا با استفاده از مثلث های ازقبل پردازش شده، و یا تولید پیکسل های پخش شده (جدا جدا).&lt;BR/&gt;&lt;BR/&gt;انتخاب یک نقطه، تولید یک سری مثلث در اطراف آن و گسترش آن تا تشکیل یک تصویر قابل درک (Sprite) و یا تجزیه یک مثلث به تعداد کوچکتری مثلث و گسترش آن. بیرون انداختن یک راس از مثلث  از مجموع مثلث ها و تبدیل آن به یک حجم یا یک چهار ضلعی.&lt;BR/&gt;&lt;BR/&gt;بهترین نقطه در DirectX ترکیب تمامی انواع Shader Model ها در Shader Model 4.0 است که به توسعه دهندگان اجازه خواهد داد انواع Vertex، Pixel و Geometry Shaders ها را در یک مدل بیافرینند.&lt;BR/&gt;&lt;BR/&gt;BD : در مورد محاسبات فیزیک (کنش ها و واکنش های محیط در مقابل تعییرات) چطور؟&lt;BR/&gt;&lt;BR/&gt;Chris : ویندوز ویستا از تمامی انواع محاسبات فیزیکی چه به وسیله پردازنده، تراشه گرافیکی یا پردازنده فیزیک جداگانه پشتیبانی خواهد نمود. با اتکا بر DirectX 10 ویندوز ویستا پلاتفرم قدرتمندی برای انجام محاسبات فیزیکی توسط GPU خواهد بود. پشتیبانی از ویژگی چند تراشه گرافیکی SLI و یا CrossFire و توانایی تقسیم وظایف پردازش تصویر و یا محاسبات فیزیکی بین تراشه های گرافیکی موجود در سیستم از جمله امتیازات سیستم عامل ویستا و DirectX 10 می باشد.&lt;BR/&gt;&lt;BR/&gt;BD : با این وجود پشتیبانی از کارت پردازش فیزیک Ageia به عهده ویندوز ویستا خواهد بود؟ و یا ATI و nVIDIA؟&lt;BR/&gt;&lt;BR/&gt;Chris : واضح است که ساده ترین روش پردازش فیزیک، بهره گیری از پردازنده اصلی سیستم است. در ویندوز ویستا تامین درایور های لازم و پشتیبانی تراشه های پردازش فیزیک (مانند Agiea) بر عهده خود سازندگان آنها خواهد بود.&lt;BR/&gt;&lt;BR/&gt;BD : آیا تیم توسعه و بازار یابی شما اقدامی در جهت موجود بودن محتوای مناسبی مانند بازی های کامیوتری، نرم افزار های سازگار و مختص به ویندوز VISTA در هنگام انتشار آن انجام داده است؟&lt;BR/&gt;&lt;BR/&gt;Chris : بله! در زمان انتشار ما پشتیبانی کاملی از تمام نسخه های موجود بازی ها و نرم افزار ها را در ویندوز ویستا شاهد خواهیم بود. در عین حال علاوه بر 10 عنوانی که قبلا برای انتشار همزمان با ویندوز ویستا اعلام شده بود، عناوین مهم و جذاب دیگری نیز برای انتشار همزمان با ویندوز ویستا پیش بینی کرده ایم. مطمنا این عنواین در همان روزهای اول پیشرفت فوق العاده در نسل بعدی بازی های کامپبوتری و امکانات باورنکردنی ویندوز ویستا و DirectX 10 را به نمایش خواهند گذاشت. ضمنا تعداد تعداد زیادی از عنواین فعلی نیز برای ویندوز ویستا و پشتیبانی آن از پردازنده های چند هسته ای بهینه سازی شده اند.&lt;BR/&gt;&lt;BR/&gt;از عناوینی که در هنگام انتشار ویستا برای خرید موجود خواهد بود :&lt;BR/&gt;&lt;BR/&gt;“Alan Wake (Microsoft Game Studios) &lt;BR/&gt;“Age of Conan: Hyborian Adventures” (Eidos) &lt;BR/&gt;“Company of Heroes” (THQ)&lt;BR/&gt;“Crysis” (EA-Partners) &lt;BR/&gt;“Flight Simulator X” (Microsoft Game Studios) &lt;BR/&gt;“Halo 2 for Windows Vista” (Microsoft Game Studios) &lt;BR/&gt;“Hellgate: London” (Namco) &lt;BR/&gt;“LEGO Star Wars II: The Original Trilogy” (LucasArts)&lt;BR/&gt;“Shadowrun” (Microsoft Game Studios) &lt;BR/&gt;“Zoo Tycoon 2: Marine Mania” (Microsoft Game Studios) &lt;BR/&gt;&lt;BR/&gt;BD : از اینکه به سوالات ما و تعداد زیادی از کاربران و دوستداران بازی های کامپیوتری پاسخ دادید متشکرم. به امید موفقیت هرچه بیشتر شما. ما مشتاقانه منتظر عرضه ویندوز ویستا و بازی های جذاب DirectX 10 و سخت افزار های ارایه شده توسط nVIDIA و ATI خواهیم بود.</description>
<pubDate>Sat, 16 Dec 2006 11:59:12 GMT</pubDate>
<comments>http://commenting.blogfa.com/?blogid=vblog&amp;postid=65</comments>
<dc:creator>vblog</dc:creator>
<guid>http://vblog.blogfa.com/post-65.aspx</guid>
</item>
<item>
<title>پروژه های اماده برای تمرین</title>
<link>http://vblog.blogfa.com/post-64.aspx</link>
<description>&lt;B&gt;&lt;FONT size=2&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot; color=#ff0000&gt;ترفنـــــــــــــــــــــــــــد:&lt;/FONT&gt;&lt;/P&gt;&lt;/B&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;برای اینکه بعد از قرار دادن کنترل هاتون نخواید دوباره فونت تک تک اونها رو تغییر بدهید برای این کار قبل از قرار دادن اونها روی فرم ابتدا فونت فرم رو به فونت مورد نظرتون که من &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot; size=2&gt;Tahoma &lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;رو پیشنهاد میکنم تغییر بدهید و سپس هر کنترلی که روی فرم قرار بدهید با فونت فرم یکی میشود&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;B&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;نکتـــــــــــــــــــــــــــــه:&lt;/FONT&gt;&lt;/P&gt;&lt;/B&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;برای حرکت دادن کنترل های رو فرم به صورت دقیق تر و بدون لرزش میتونید این کار رو با کیبرد انجام بدهید که فقط روی کنترل مورد نظر کلیک کنید و سپس کلید کنترل رو پایین نگه دارید و با کلید های مکان نما اون رو جابجا کنید که این کار رو می تونید با انتخاب دسته جمعی کنترل ها هم انجام بدهید&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;B&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;نکتـــــــــــــــــــــــــــــه:&lt;/FONT&gt;&lt;/P&gt;&lt;/B&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;برای تغییر اندازه کنترل های روی فرم میتونید ابتدا انها را انتخاب کنید و سپس کلید شیفت رو پایین نگه دارید و با کلید های مکان نما اونها رو تغییر اندازه بدهید&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;B&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;نکتـــــــــــــــــــــــــــــه:&lt;/FONT&gt;&lt;/P&gt;&lt;/B&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;بعضی مواقع شما نوشته داخل یک کنترل مثل یک &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&lt;FONT size=2&gt;Label &lt;/FONT&gt;&lt;FONT size=2&gt;رو به فارسی تغییر میدهید که این عبارت به درستی نشان داده نخواهد شد که برای رفع این مشکل باید فونت اون کنترل رو به &lt;/FONT&gt;&lt;FONT size=2&gt;Tahoma &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;تغییر دهید&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;B&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;نکتـــــــــــــــــــــــــــــه:&lt;/FONT&gt;&lt;/P&gt;&lt;/B&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;برای اینکه در پنجره خصوصیت اشیاء سریعتر به خصوصیت مورد نظر پرش کنید میتوانید با نگه داشتن کلید کنترل و شیفت و زدن اولین حرف خصوصیت مورد نظر به ان پرش کنید&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/amlac%20sample.zip?uniq=4pu12v&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;برنامه نمونه مشاور املاک(درخواستی)&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/Digital.rar?uniq=4pu134&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;دیجیتال&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/DNS.zip?uniq=4pu137&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;DNS&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/Forms_controls.zip?uniq=4pu13a&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;کدهای اماده برای کار های مختلف&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/vb%20english.part01.rar?uniq=4pu13j&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;بخش اول ویژوال بیسیک شبیه سازی شده(انگلیسی)&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&amp;nbsp; &lt;/FONT&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/vb%20english.part02.rar?uniq=4pu13m&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;بخش دوم&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&amp;nbsp; &lt;/FONT&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/vb%20english.part03.rar?uniq=4pu13p&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;بخش سوم&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/viruse.rar?uniq=4pu13s&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;اقای Hacker alone ( درخواستی)&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&lt;IMG alt=&quot;&quot; hspace=0 src=&quot;http://i10.tinypic.com/2mzii54.jpg&quot; align=baseline border=0&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/3D.zip?uniq=4pu12p&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;برنامه جالب سه بعدی&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/vb%20farsi%20saz/vb%20farsisaz.part01.rar?uniq=4pu23z&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;فارسی ساز ویژوال بیسیک ( در فایل متنی داخلش توضیح دادم ) بخش اول&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;پسوردش هم : &lt;FONT color=#ff0000&gt;VBLog.blogfa&lt;/FONT&gt; است حتمــــــــــــــــــــــــا دانلود کنید هر بخش ۱۵۰ کیلو بایت است&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/vb%20farsi%20saz/vb%20farsisaz.part02.rar?uniq=4pu242&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;بخش دوم&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&amp;nbsp; &lt;/FONT&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/vb%20farsi%20saz/vb%20farsisaz.part03.rar?uniq=4pu245&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;بخش سوم&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&amp;nbsp; &lt;/FONT&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/vb%20farsi%20saz/vb%20farsisaz.part04.rar?uniq=4pu248&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;بخش چهارم&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&amp;nbsp; &lt;/FONT&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/vb%20farsi%20saz/vb%20farsisaz.part05.rar?uniq=4pu24b&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;بخش پنجم&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&amp;nbsp; &lt;/FONT&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/vb%20farsi%20saz/vb%20farsisaz.part06.rar?uniq=4pu24e&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;بخش ششم&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&amp;nbsp; &lt;/FONT&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/vb%20farsi%20saz/vb%20farsisaz.part07.rar?uniq=4pu24h&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;بخش هفتم&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/vb%20farsi%20saz/vb%20farsisaz.part08.rar?uniq=4pu24k&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;بخش هشتم&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/vb%20farsi%20saz/vb%20farsisaz.part09.rar?uniq=4pu24n&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;بخش نهم&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P align=center&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&lt;IMG alt=&quot;&quot; hspace=0 src=&quot;http://i11.tinypic.com/2zjf7km.jpg&quot; align=baseline border=0&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/docking.zip?uniq=4pu2wd&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;پنجره شناور (اقا کمال) قسمتی از وی بی&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/Fax-vb.rar?uniq=4pu2wg&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;فکس با وی بی&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/fekr%20o%20bakr.zip?uniq=4pu2wj&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;فکر و بکر&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/FieldSearch.zip?uniq=4pu2wm&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;جستجوی دیتا بیس&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/filler.zip?uniq=4pu2wp&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;پر کننده گرافیکی&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/Fish.zip?uniq=4pu2ws&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;اکواریــــــــــــــــــــــــــــــــم&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/frdemo.rar?uniq=4pu2wv&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;جالبــــــــــــــــــــــــــــــــه&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/Functions.zip?uniq=4pu2wy&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;توابــــــــــــــــــــــــــع&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/Glass_Window.zip?uniq=4pu2x1&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;پنجره شفاف&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/Glassy%20Form%201.0.rar?uniq=4pu2x4&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;پنجره شفاف 2&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/IdleTime.zip?uniq=4pu2x7&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;محاسبه کننده زمان توقف موس&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/Image%20Convertor.zip?uniq=4pu2xa&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;مبدل تصاویر&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/Jpg%20Picture%20Effects.zip?uniq=4pu2xd&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;جلوه دهنده تصاویر&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/LockFolder.zip?uniq=4pu2xg&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;قفل کننده پوشه ها&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/Matrix.zip?uniq=4pu2xj&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;ماتریکس برای بچه های مهندسی و ریاضی&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/mouse%20move.zip?uniq=4pu2xm&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;حرکت دهنده موس&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/photo%20cut.zip?uniq=4pu2xp&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;برش دهنده تصاویر&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/PinButton.rar?uniq=4pu2xs&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;پین باتون&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/Ping.zip?uniq=4pu2xv&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;پینگ&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/Pingip.zip?uniq=4pu2xy&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;پینگ ای پی&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/Trace.zip?uniq=4pu2y1&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;Trace&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/VFmp3player.zip?uniq=4pu2y4&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;طیف نما برای کارهای مولتی مدیا جالب&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/world%20cup%202010.rar?uniq=4pu2y7&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;بک گراند Fifa برای جام جهانی 2010 خودم طراحی کردم&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/new1/zoom%20screen.zip?uniq=4pu2ya&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;شبیه سازی قسمت معلولین ویندوز&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/ACTIVEX.rar?uniq=4pp21m&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;اموزش Active X&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/Bandwidth%20Meter%20with%20graph%20charts%20(MSChart).rar?uniq=4pp21s&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;سرعت سنج اینترنت خیلی جالبه&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/Browse%20For%20Folder.zip?uniq=4pp21y&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;جستجو در بین پوشه ها&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/Progressbar.zip?uniq=4pp224&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;یک Progress bar کاربردی و جالب&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/BoOTer.rar?uniq=4pp3ql&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;یک بوتر به همراه فایل اجرایش&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/combo%20open.rar?uniq=4pp3qr&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;باز کردن Combo box با زدن اینتر&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/complex.rar?uniq=4pp3qx&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;اعداد مختلط&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/CopyfileAsWindows.zip?uniq=4pp3r3&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;کپی فایل به همراه نوار پیشرفت&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/Countries%20List.zip?uniq=4pp3r9&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;فهرست کشورهای جهان برای شما &lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/date%20for%20stop.zip?uniq=4pp3rf&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;متوقف کردن برنامه در تاریخ معین شده&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/FAT%202%20NTFS.zip?uniq=4pp3rl&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;تبدیل Fat32 به Ntfs&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/FirewallAPP.zip?uniq=4pp3rr&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;دیوار اتش با VB&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/forrie.rar?uniq=4pp3rx&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;تبدیل فوریه برای بچه های الکترونیک و ریاضی&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/Image2Text.rar?uniq=4pp3s3&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;تبدیل عکس به متن&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/MultiComm%20(main).zip?uniq=4pp3s9&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;برنامه نمونه کار با پورت&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/Piano.zip?uniq=4pp3sf&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;پیانو&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/sample.rar?uniq=4pp3sl&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;یک نمونه کوچک از برنامه خودم(وی بی فارسی)(اقا کمال)&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/SocketProgramming.rar?uniq=4pp3sr&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;اموزش برنامه نویسی Socket Programing&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/split.rar?uniq=4pp3sx&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;یک نمونه کوچک از برنامه خودم (نوار مرزی)&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/strfind.zip?uniq=4pp3t3&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;یافتن متن&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/Txt2Jpg.zip?uniq=4pp3t9&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;تبدیل متن به عکس&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/VB2Delphi%20source.zip?uniq=4pp3tf&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;تبدیل کدهای وی بی به دلفی&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/wav%20veiw.rar?uniq=4pp3tr&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;شبیه سازی یک قسمت از Nero ( نمایش طیفی فایل صوتی)&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/farsi/WebBrowser.zip?uniq=4pp3tx&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;کاوشگر اینترنت&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;اینها ادامه دارند سر بزنید&lt;/FONT&gt;&lt;/P&gt;&lt;B&gt;&lt;FONT size=2&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;پاسخ اقا مهدی عزیز:&lt;/FONT&gt;&lt;/P&gt;&lt;/B&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;من اون راه حل های که فکر میکنم جواب بده رو مینویسم&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;- 1&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&lt;FONT size=2&gt; ابتدا وارد &lt;/FONT&gt;&lt;FONT size=2&gt;Run &lt;/FONT&gt;&lt;FONT size=2&gt;ویندوز شو و عبارت &lt;/FONT&gt;&lt;FONT size=2&gt;regsvr32 Mswinsck.ocx&lt;/FONT&gt;&lt;FONT size=2&gt; رو تایپ کن که این کار برای ثبت یک کامپوننت است و ببین مشکل رفع شد&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;- 2 &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&lt;FONT size=2&gt;این فایل رو از پایین دانلود کن و در پوشه &lt;/FONT&gt;&lt;FONT size=2&gt;System32 &lt;/FONT&gt;&lt;FONT size=2&gt;ویندوز کپی کن و هنگام کپی &lt;/FONT&gt;&lt;FONT size=2&gt;yes &lt;/FONT&gt;&lt;FONT size=2&gt;رو بزن و مرحله اول رو مجددا انجام بده&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;- 3 &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot; size=2&gt;اگه باز هم مشکل داشتی فکر کنم مشکل از خود وی بی است پس دوباره وی بی رو نصب کن&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=right&gt;&lt;FONT size=2&gt;&lt;A href=&quot;http://www.sharemation.com/MahdiVB678/Mswinsck.zip?uniq=4pt87d&quot; target=_blank&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;دانلود فایل&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;B&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;برای درگ یک فرم به وسیله یک کنترل :&lt;/FONT&gt;&lt;/P&gt;&lt;/B&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;یک دکمه یا کامند باتون رو فرم قرار بدید و این کد ها رو تو فرم کپی کنید &lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot; size=2&gt;
&lt;P align=left&gt;Option Explicit&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P align=left&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;Private Declare Function ReleaseCapture Lib &quot;user32&quot; () As Long&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=left&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;Private Declare Function SendMessage Lib &quot;user32&quot; Alias &quot;SendMessageA&quot; (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P align=left&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;)&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P align=left&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;Call ReleaseCapture&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=left&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;Call SendMessage(hWnd, &amp;amp;HA1, 2, 0&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&amp;amp;)&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P align=left&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;End Sub&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;بچه ها از اگه در اخرین ژست عکس پروژه من (وی بی فارسی) نبود برید تو ارشیو و ببینیدش و به عظمت کار پی ببرید&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;راستی شبیه سازی پاور دی وی دی ۶ هم یادم نرفته دارم روش کار میکنم ( خیلی جالبه)&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=right&gt;&lt;FONT face=&quot;Tahoma, Arial, Helvetica, sans-serif&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;</description>
<pubDate>Sun, 10 Dec 2006 05:13:18 GMT</pubDate>
<comments>http://commenting.blogfa.com/?blogid=vblog&amp;postid=64</comments>
<dc:creator>vblog</dc:creator>
<guid>http://vblog.blogfa.com/post-64.aspx</guid>
</item>
</channel>
</rss>
