وبلاگ تخصصي برنامه نويسي با VB

پاسخ به سوالات -۱۲


1 – چگونه می توان شماره سریالی را که کارخانه روی هارد قرار می دهد را بدست آورد ( یعنی شماره سریالی که با پارتیشن بندی مجدد هارد تغییز نکند و یک مشخصه منحصر بفرد برای هارد باشد ) ؟
پاسخ : با دریافت اين کد یک OCX خواهید داشت که با استفاده از آن می توانید شماره سریال هارد را که کارخانه سازنده روی آن قرار داده بدست آورید .
همچنین در این آدرس نیز یک برنامه دیگر بهمراه سورس کد زبان C برای اینکار وجود دارد .

2– نحوه بدست آوردن سریال CDROM را توضیح دهید .
پاسخ : برای این منظور بایستی از تابع GetVolumeInformation استفاده کنید که قبلاً در بخش پرسش و پاسخها در مورد این تابع توضیح داده ام . برای اطلاعات بیشتر به این آدرس نیز مراجعه کنید .

3 – چگونه می توان در وی بی تاریخ را بصورت شمسی از کاربر گرفت ؟
پاسخ : منظور شما از گرفتن تاریخ بصورت شمسی چیست ؟ شما می توانید یک texbox بگذارید تا کاربر تاریخ را بصورت یک String در آن وارد کند . اما اگر منظورتان تبدیل تاریخ میلادی به شمسی و یا تبدیل تاریخ شمسی به میلادی است ( این مورد را یکی دیگر از دوستان نیز سوال کرده بودند )  است به اینجا مراجعه کنید .

4 - چگونه میتوان فرمی را کوچک کرد یعنی به حداقل رسانید و به جای اینکه به منوی Taskbar برود آیکون آن در کنار ساعت ظاهر شود و با کلیک رو آیکون آن منوی مورد نظر باز شود ؟
پاسخ : قبلاً در مورد قرار دادن آیکون برنامه در کنار ساعت ویندوز نوشته ام . به آرشیو موضوعی مراجعه کنید .

5 – چگونه می توان از طریق وی بی روی یک فولدر یا فایل اجرایی قفل گذاشت که آن فولدر فقط با پسورد باز شود یا اینکه قابل کپی نباشد ؟
پاسخ : این کار امکان پذیر است چون برنامه هایی در این زمینه وجود دارد اما نیاز به دانش بسیار قویی در مورد Api Programming دارد . به سوال شماره ۹ مراجعه کنید .

6 – چگونه می توان برنامه ای نوشت که محتویات فایل index.dat را که حاول آدرس سایتهای رفته شده است نشان دهد ؟
پاسخ : ابتدا بایستی ساختار و فرمت این فایل را بدانید . در این صورت با استفاده از ابزارهای کار با فایل در وی بی می توانید محتوای آنرا بخوانید .

7 – چگونه می توان صدا را بعنوان ورودی گرفت و آنرا با یک کلمه مقایسه کرد ؟
پاسخ : اگر منظورتان تشخصی صحبت یا Speech Recognition است بایستی از موتور تشخیص صدای مایکروسافت که قابل دانلود از این آدرس می باشد  استفاده نمایید . پس از نصب از موتور دو بخش به component های وی بی شما اضافه می شود : Microsoft Direct Speech Recognition و Microsft Direct Text-to-Speech . برای اطلاعات بیشتر در مورد این دو component به این آدرس مراجعه کنید .
در این آدرس نیز اطلاعات مفیدی در مورد تشخصی صحبت وجود دارد .

8 – چگونه می توان یکسری اطلاعات فارسی را از طریق صفحات ASP در پایگاه داده SQL Server ذخیره کرد ؟ آیا بایستی Collation دیتا بیس را تغییر دهم ؟
پاسخ : اولاً codepage صفحات Html خود را windows-1252 قرار دهید . ثانیاً codepage شی Session را نیز 1252 بگذارید . در اینصورت اطلاعات بصورت یونیکد در جدوال دیتا بیس ذخیره می شوند . همچنین با قرار دادن Collation بصورت arabic این کار امکان پذیر است .

9 – آیا کتاب فارسیی در مورد برنامه نویسی API وجود دارد ؟
پاسخ : اخیراً دو کتاب فارسی در این زمینه چاپ شده است :
کتاب اول توسط انتشارات نص چاپ شده که به نظر من کتاب مفیدی است . کتاب دوم برنامه نویسی Api  نیز توسط انتشارات ناقوس چاپ شده است .

+ حامد شیدائیان ; ۱:٥۸ ‎ب.ظ ; پنجشنبه ۳۱ اردیبهشت ،۱۳۸۳
comment نظرات ()

پاسخ به سوالات-۱۱

1 -  چگونه می توان فایلهای انیمیشن Gif را در برنامه های وی بی قرار داد ؟
پاسخ : می توانید از کنترلهای Ocx و یا ActiveX هایی که برای اینکار طراحی شده اند استفاده کنید .
در این لینک می توانید یک ActiveX پخش کننده فایلهای gif را بهمراه سورس کامل آن به VB6 دریافت نمایید .

این لینک نیز شامل چند Ocx و ActiveX برای پخش فایلهای انیمیشن Gif است .

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

2 – چگونه می توان در وی بی یک فایل با هر پسوندی را در یکی از درایوها اجرا کرد ؟
پاسخ : همانطور که قبلاً گفته ام برای Run کردن یک فایل اجرایی در وی بی بایستی از تابع ShellExecute استفاده نمایید . نحوه declare کردن آن بصورت زیر است :

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (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

حال فرض کنید می خواهید در مسیر D:\TestShell\ فایلی به اسم Test.exe را توسط برنامه تان اجرا کنید . کد زیر بدین منظور نوشته شده است :

     Call ShellExecute(Me.hwnd, vbNullString, "D:\TestShell\Test.exe", "", "", SW_SHOWNORMAL)

3 – چگونه می توان هندل ( Handle ) یک Textbox را در یک پنجره بدست آورد ؟
پاسخ : برای بدست آوردن هندل پنجره برنامه ای که هم اکنون باز است از تابع FindWindow استفاده کنید . نحوه declare کردن آن بصورت زیر است :

Private Declare Function FindWindow Lib "user32"  Alias "FindWindowA"    (ByVal lpClassName As String, ByVal lpWindowName   As String) As Long

فرض کنید caption فرم برنامه مورد نظرتان در متغیر strWindowName قرار داشته باشد . با دستور زیر می توانید هندل پنجره آنرا بدست آورید :

Dim hwndFound As Long
hwndFound = FindWindow(vbNullString, strWindowName)

نکته : برای پیدا کردن هندل پنجره برنامه ای که caption آنرا بطور دقیق نمی دانید می توانید از تابع  FindWindowLike استفاده کنید .

حال که هندل پنجره مورد نظرتان را استخراج کردید می توانید با استفاده از تابع FindWindowEx هندل اشیا موجود در آن پنجره را بدست آورید . نحوه declare کردن این تابع بصورت زیر است :

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

این تابع را بصورت زیر استفاده کنید :

   htextbox = FindWindowEx(hwndFound, ByVal 0&, "ThunderRT6TextBox", vbNullString)

که ThunderRT6Textbox نام کلاس Rich Textbox ها در ویژوال بیسیک 6 است . دستور فوق هندل اولین Textbox موجود در پنجره را به شما بر می گرداند . برای بدست آوردن هندل سایر Textbox ها از حلقه زیر استفاده کنید :

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

نکته : توسط تابع GetClassName می توانید نام کلاس سایر اشیا موجود در وی بی را بدست آورید .

4 – چگونه می توان در وی بی عکسی از نوع BMP را مستقیماً بصورت JPG ذخیره کرد ؟
پاسخ : روشهای مختلفی برای اینکار وجود دارد که من برخی از آنها را لیست می کنم :

- استفاده از یک OCX/DLL به اسم PicFormat32 : با استفاده از این ابزار می توانید یک فرمت تصاویر را بهم تبدیل کنید . برای اطلاعات بیشتر به اینجا مراجع کنید .

- استفاده از کتابخانه Intel JPEG : برای اطلاعات بیشتر به اینجا و اینجا مراجعه کنید .

- استفاده از کتابخانه vic32.dll : برای اطلاعات بیشتر به اینجا مراجعه کنید .

با جستجو در سایت Google می توانید روشهای دیگری نیز پیدا کنید .

5 - من قصد دارم يک برنامه ديکشنری بنويسم. از چه کنترلی استفاده کنم که بتوانم داده های مربوط به چند زبان را در آن فعال کنم و در همه ويندوز ها قابل رويت باشند. در ضمن ميخواستم بدانم برنامه فاين ريدر قابليت خواندن زبان فارسی را هم دارد يا نه. اگر نه آيا برنامه مشابهی که اين قابليت رو داشته باشد وجود دارد؟
پاسخ : در مورد ساخت برنامه های فارسی قبلاً مطلب نوشته ام اما در مورد سایر زبانها مطلبی پیدا نکردم . در مورد برنامه FineReader من تاکنون با این برنامه کار نکرده ام اما یک OCR فارسی به اسم واژه شناس  در نمایشگاه کتاب امسال توسط شرکت هوش مصنوعی رایورز عرضه شده بود . برای اطلاعات بیشتر به سایت این شرکت به آدرس www.stonicasoft.com مراجعه کنید .

6 - چطور ميتوانم بين کامپيوتر و يک سخت افزار ديگر ارتباط برقرار کنم . مثلا يکLED را روشن و خاموش کنم ؟
پاسخ : برای اتصال کامپیوتر به یک سخت افزار می توانید از پورتهای سریال ، موازی و یا USB استفاده کنید . برای برنامه نویسی این پورتها نیز قبلاً مطالبی در وبلاگ نوشته ام که با مراجعه به آرشیو موضوعی می توانید آنها را بخوانید .


+ در مورد Log گرفتن از کیبرد به این آدرس  مراجعه کنید .

 

+ حامد شیدائیان ; ۱٢:٢٠ ‎ب.ظ ; یکشنبه ٢٧ اردیبهشت ،۱۳۸۳
comment نظرات ()

پاسخ به سوالات-۱۰

با عرض معذرت از همه دوستان بابت این هم تاخیر که در پاسخ دهی به سوالات داشتم و باز هم بخاطر این همه لطف و محبتی که شما نسبت به من دارید شرمنده ام . از امروز سعی می کنم هر دو یا سه روز یکبار به چند تا از سوالات مطرح شده بترتیب تاریخ ارسال پاسخ بدهم . بنابراین اگر سوال خود را تازه مطرح کرده اید ممکنست چند روز طول بکشد تا به آن جواب داده شود . امیدوارم این جوابها برای شما مفید باشد . در ضمن دوستان عزیر نیز اگر نظری در مورد یک سوال و جواب آن دارند حتماً آنرا عنوان نمایند .

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

1 – چگونه می توان پورت ماوس PS/2 را پیدا کرد و تغییرات بیتها روی پورت را استخراج نمود ؟
پاسخ : اگر ماوس شما از نوع سریال بوده و به پورت COM1 متصل باشد آدرس آن 0x3F8 می باشد . اما اگر از نوع PS/2 باشد آدرس آن 0x60 یا 0x64 میباشد . با استفاده از این شماتره پورتها و روشهای خواندن پورت که قبلاً به آنها اشاره کرده ام می توانید تغییرات پورت ماوس را بخوانید .
اطلاعات بیشتر در مورد پورت PS/2 را در اینجا بخوانید .

2 – من می خواستم که با وی بی برنامه ای بنویسم که بتوان با آن تلفن زد و یک فایل صوتی را برای مقصد پخش کرد . چگونه اینکار را انجام دهم ؟
پاسخ : در آخرین بخش از سری مطالب آموزشی TAPI چند لینک معرفی کرده ام که برای شما مفید خواهد بود . همچجنین لینکهای زیر نیز مفید می باشند :

لينک - ۱

لينک - ۲

لينک - ۳

لينک - ۴

3 – چگونه می توان اشیایی را که در برنامه 3D Studio Max طراحی کرده ام را به وی بی منتقل کرد ؟
پاسخ : به اولین درس از مباحث پیشرفته DirectX مراجعه کنید . بطور خلاصه باید بگویم شما ابتدا باید شی خود را با فرمت .X ذخیره کرده و سپس با استفاده از Direct3D در وی بی آنرا لود کنید .

4 – چگونه می توان شماره کسی را که تلفن می زندتوسط وی بی مشاهده کرد ؟
پاسخ : به سوال شماره 2 مراجعه کنید .

5 – چگونه می توان برنامه ای ساخت که توسط آن ایمیل فرستاد ؟
پاسخ : در وی بی 6 از امکانات MAPI (Messaging Application Programming Interface) استفاده کنید . برای استفاده از آن به بخش Components رفته و مورد Microsoft MAPI Control را به پروژه تان اضافه نمایید . این کار باعث می شود دو کنترل به ابزارهایتان اضافه شود : MAPISession و MAPIMessages .  برای دیدن چگونگی استفاده از این دو کنترل به این آدرس مراجعه کنید .
در VB.Net نیز می توانید از کتابخانه System.Web.Mail استفاده نمایید . این کتابخانه دارای سه کلاس MailMessage ، MailAttachment و SmtpMail می باشد . کلاس MailMessage برای ساخت ایمیل و تنظیم اطلاعات فرستنده ، گیرنده ، موضوع و بدنه اییل بکار می رود . کلاس MailAttachment برای افزودن فایل الصاقی به ایمیل استفاده می شود و کلاس SmtpMail برای ارسال ایمیل استفاده می شود . برای اطلاعات بیشتر به Msdn مراجعه نمایید .


+ در پرسش و پاسخ شماره 9 سوالی در مورد flexGrid مطرح شده بود . یکی از دوستان زحمت کشیندد و جواب زیر را داده اند :
"در مورد فلکس گرید میتونید هر بار که Item جديدی اضافه کرديد بالا ترين رديف رو معادل آخرين رديف قرار بديد. Grid.topRow = Grid.Rows "

یکی دیگر از دوستان نیز جواب زیر را داده اند :
" در مورد سوال 14 بخش پاسخ به سوالات 9 كه چگونه می توان Scrollbar را در FlexGrid به پایین ترین جای ممکن آورد بايد بگويم كه با خاصيت TopRow. مي توان اين كار را انجام داد. به اينصورت كه اين خاصيت بالاترين رديف FlexGrid را تعيين مي كند و با يكي دو خط كد مي توان به مقصود رسيد. "

+ در پرسش و پاسخ شماره 9 همچنین سوالی در مورد گرفتن Log از کیبرد مطرح شده بود که باز هم یکی دیگر از دوستان عنوان کرده اند که در وبلاگشان به این سوال پاسخ داده اند . برای اطلاعات بیشتر به این آدرس مراجعه کنید :

+ حامد شیدائیان ; ۱۱:۳٧ ‎ق.ظ ; چهارشنبه ٢۳ اردیبهشت ،۱۳۸۳
comment نظرات ()

بزودی پاسخ به سوالات

 

+ بزودی به همه سوالهای شما پاسخ خواهم داد .

منتظر باشيد ....

 

+ حامد شیدائیان ; ۳:۱۸ ‎ب.ظ ; چهارشنبه ٢ اردیبهشت ،۱۳۸۳
comment نظرات ()