آموزش Api در ویژوال بیسیک

saalek110

Well-Known Member
منبع:
http://www.developerfusion.co.uk/show/3241/2/

Total memory
and
Available memory


یک باتون به فرم بیافزایید و کد زیر را در پنجره کد درج کنید:
کد:
Private Type MEMORYSTATUS
  dwLength As Long
  dwMemoryLoad As Long
  dwTotalPhys As Long
  dwAvailPhys As Long
  dwTotalPageFile As Long
  dwAvailPageFile As Long
  dwTotalVirtual As Long
  dwAvailVirtual As Long
End Type


Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)

Private Sub Command1_Click()
Dim memInfo As MEMORYSTATUS
GlobalMemoryStatus memInfo 'In this step we invoked the GlobalMemoryStatus function and pass it meminfo as parameter
MsgBox "Total memory (in bytes): " & memInfo.dwTotalPhys
MsgBox "Available memory (in bytes): " & memInfo.dwAvailPhys
End Sub
 

saalek110

Well-Known Member
منبع:
http://support.microsoft.com/kb/154517

How To Use the DrawText API Call from Visual Basic

دکمه ای به فرم بیافزایید و کد زیر را در پنجره کد درج کنید:
کد:
      Option Explicit

      Private Declare Function DrawText Lib "user32" Alias "DrawTextA" _
        (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, _
        lpRect As RECT, ByVal wFormat As Long) As Long

      Private Const DT_BOTTOM = &H8
      Private Const DT_CENTER = &H1
      Private Const DT_LEFT = &H0
      Private Const DT_RIGHT = &H2
      Private Const DT_TOP = &H0
      Private Const DT_VCENTER = &H4
      Private Const DT_WORDBREAK = &H10

      Private Type RECT
         Left As Long
         Top As Long
         Right As Long
         Bottom As Long
      End Type

      Private Sub Command1_Click()
        Dim lSuccess As Long
        Dim sPrintText As String
        Dim MyRect As RECT
        Form1.Font.Size = 12
        Form1.ScaleMode = vbPixels
        MyRect.Left = 0
        MyRect.Right = Form1.ScaleWidth
        MyRect.Top = 20
        MyRect.Bottom = 60
        sPrintText = "Print this text"
        lSuccess = DrawText(Form1.hdc, sPrintText, Len(sPrintText), _
        MyRect, DT_CENTER Or DT_WORDBREAK)
      End Sub

ثوابت مفید دیگر برای استفاده از این تابع:
کد:
   Global Const DT_TOP = &H00000000
   Global Const DT_LEFT = &H00000000
   Global Const DT_CENTER = &H00000001
   Global Const DT_RIGHT = &H00000002
   Global Const DT_VCENTER = &H00000004
   Global Const DT_BOTTOM = &H00000008
   Global Const DT_WORDBREAK = &H00000010
   Global Const DT_SINGLELINE = &H00000020
   Global Const DT_EXPANDTABS = &H00000040
   Global Const DT_TABSTOP = &H00000080
   Global Const DT_NOCLIP = &H00000100
   Global Const DT_EXTERNALLEADING = &H00000200
   Global Const DT_CALCRECT = &H00000400
   Global Const DT_NOPREFIX = &H00000800
   Global Const DT_INTERNAL = &H00001000
   Global Const DT_EDITCONTROL = &H00002000
   Global Const DT_PATH_ELLIPSIS = &H00004000
   Global Const DT_END_ELLIPSIS = &H00008000
   Global Const DT_MODIFYSTRING = &H00010000
   Global Const DT_RTLREADING = &H00020000
   Global Const DT_WORD_ELLIPSIS = &H00040000
 

saalek110

Well-Known Member
http://www.thescarms.com/VBasic/SystemMetrics.aspx

Read System Metrics Information

SystemMetrics.gif

سورس را از سایت دانلود کنید. من تست کردم مشکلی نداشت.
 

saalek110

Well-Known Member
به نقل از:
Visual Basic 6 API


Mouse Pos / Set - Get

هدف : بدست آوردن و تنظیم موقعیت موس در صفحه
نویسنده : Dr.Amir
سطح : متوسط

Draging Form

هدف : درگ کردن فرم بدون نیاز به Title Bar
نویسنده : Dr.Amir
سطح : متوسط

Window Mode -top-down-normal

هدف : قرار دادن پنجره در بالا یا پا یین برنامه های دیگر
نویسنده : Dr.Amir
سطح : متوسط

Window Mode

هدف : قرار دادن پنجره در بالا تر و یا پایین تر از برنامه های دیگر
نویسنده : Dr.Amir
سطح : متوسط

retrieve User and Sys Name

هدف : بدست آوردن نام کاربر و نام سیستم
نویسنده : Dr.Amir
سطح : متوسط

Limit Form Size


هدف : محدود کردن حداکثر و حداقل اندازه فرم
نویسنده : Dr.Amir
سطح : متوسط

Windows Name

هدف : بدست آوردن نام ویندوز
نویسنده : Dr.Amir
سطح : متوسط
 

i_lover3000

Member
توابع API ، توابع داخلی ویندوز هستند که در فایل های خاصی با فرمت DLL ذخیره شده اند . ویژوال بیسیک این امکان رو به برنامه نویس میده تا بطور مستقیم از این توابع استفاده کنه . وقی شما در برنامه خودتون از یک تابع API استفاده کنید ، ویژوال بیسیک اونو احضار (صدا می کنه) میکنه و زمانی که کار تابع به پایان رسید ، کنترل به برنامه بر می گرده و اجرای سایر دستورات را ادامه می ده.

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

1. User32.dll
2. GDI32.dll
3. Kernel.dll

API === Application Programming Interface

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

saalek110

Well-Known Member
http://www.iran-hacker.net/forum/showthread.php?t=142

معرفی Api
APIمخفف Application Programming Interface و به معنای رابط برنامه نویسی کاربردی است
API مجموعه ای از توابع برنامه نویسی است که هم مورد استفاده سیستم عامل واقع می شود
و هم یک برنامه کاربردی می تواند از آن استفاده کند.توابع API در قالب فایل هایDLL عرضه میشود.
در سیستم عامل ویندوز فایل هایی مثل:Kernel32.dll ، gdi32.dll ، user32.dll و چندین فایل دیگر
عرضه میشود.این توابع معمولاً با زبان برنامه نویسی C نوشته شده اند ولی در زبان های دیگر مثل
دلفی ، ویژوال سی پلاس پلاس و ویژوال بیسیک هم می توان از آنها استفاده کرد.
توابع API بر دو دسته اند :
16 بیتی :این توابع در ویندوز های قدیمی کاربرد داشته اند و در سیستم ها ی کنونی به تدریج جای
خود را از دست داده اندوفقط برای حفظ سازگاری ویندوز با برنامه های قدیمی این توابع هنوز هم با ویندوز عرضه می شوند.
توابع 16 بیتی ویندوز در حدود 730 عدد می باشد.
32بیتی:این توابع نمونه های پیشرفته تر توابع قدیمی 16 بیتی هستند.
همانطور که گفته شد توابع 16 بیتی قدیمی شده اند و نمونه های 32 بیتی اکثر آنها در ویندوز موجود است.
کد:
برای آنکه این گونه توابع با نمونه های 16 بیتی شان اشتباه گرفته نشود 
درانتهای آنها یک کاراکتر A وجود دارد که نشان دهندهء 32 بیتی بودن آنهاست.

جمله ای که داخل تگ کد گذاشتم را یکی از اساتید مردود دانست و شرح زیر را داد:

کاراکتر A در آخر نام آنها ارتباطی با 16 بیتی و یا 32 بیتی بودن توابع API نداره،
در توابعی که با رشته های String در ارتباط هستند بکار میره تا نشون بده که
رشته ها را بصورت ANSI دریافت می کنه، یعنی هر کاراکتر یک بایت طول داره.
اگر این کاراکتر W باشه، تابع رشته های Unicode را پردازش خواهد کرد و
برای هر کاراکتر دو بایت استفاده میشه.

سیستمی که توابع ویندوز برای ارسال و دریافت پارامتر ها بکار می برند
stdcall است که مقدار بازگشتی را در رجیستر accumulator پردازنده
بر می گرداند که در پردازنده های 32 بیتی EAX و در پردازنده های 16 بیتی
AX است.

تمامی توابع عادی ویندوز خروجی را به صورت 32 بیتی بر می گردانند که
در حقیقت در داخل رجیستر EAX ذخیره میشه، برنامه های 16 بیتی فقط
از دو بایت قسمت پایینی مقدار بازگشتی یعنی AX استفاده می کنند و
از دو بایت بالایی صرف نظر خواهد شد.
مثلا تابع GetWindow یک تابع 32 بیتی است ولی نه به کاراکتر A ختم شده
و نه به کاراکتر W.
بنابراین کاراکتر A پایان نام تابع ارتباطی با 16 بیتی بودن یا 32 بیتی بودن
تابع ندارد.
در حقیقت ویندوز با توابع 16 بیتی همانند توابع 32 بیتی رفتار می کند.

توابع 32 بیتی بالغ در 6500 عدد هستند.
فهمیدی؟حالا می خوام چگونگی استفاتده از اونها رو بهتوم یاد بدم
اول از همه باید اونها رو تو برنامه تعریف کنین که به این کارdeclare گفته می شه
مثال:Declare Function FnName Lib LibName [Alias RealName] (Parameters )As ReturnType
• FnName : نام تابع ( نامی که قرار است در برنامه استفاده شود ).
• LibNam : نام کتابخانه ( فایل با پسوند DLL ).
• RealName : نام واقعی تایع در فایل کتابخانه. اگر نام واقعی تابع و نامی که در برنامه استفاده می شود یکی باشند آنگاه نیازی به این قسمت نیست .
• Parameters : پارامتر های تابع.
• ReturnType : نوعی که تابع قرار است بر گرداند.
توجه : در نوشتن نام واقعی تابع ( یا اگر نام واقعی و مجازی تابع یکی باشد ، نام مجازی آن ) بزرگ و کوچک بودن حروف اهمیت دارد .

می تونین تو دو قسمت این کار رو بکنین
بخش جنرال که در این صورت به ابتداى ان عبارت private و در صورتى كه در بخش ماجول بخواهيد تعريف كنيد عبارت public را اضافه نماييد
 

saalek110

Well-Known Member
http://forum.p30experts.com/showthread.php?t=955

روش دسترسی به نام و تعریف ومتغیر های توابع api :

براي استفاده از توابع API در ويژوال بيسيك مي توان از ابزار API VIEWER استفاده كرد.

پس از نصب ويژوال بيسيك به مسير زير رجوع کنید.

start menu -->allprograms-->microsoft visual studio 6-->microsoft visual studio 6 tools-->api text viewer

حال از منوي فايل load text file انتخاب كنيد.درپنجره اي كه باز مي شود فايلwin32api.txt را باز كنيد.

فايل win32api.txt در مسير microsoft visual studio-->common-->tools-->winapiقرار دارد.

در قسمت api type گزينه declares را انتخاب كنيد.

در قسمت availabl items نام تمام توابع api را مشاهده مي كنيد.روي نام هر تابع كه دابل كليك كنيد ميتوانيد نحوه فراخواني و پارامترهاي ورودي و خروجي تابع را در قسمت selected item مشاهده نماييد.

دكمه كپي به منظور كپي كردن تابع انتخابي در قسمت selected item در كليپ برد مي باشد.

اگه مسير برعكسه كپي كنيد درست ميشه.
 

1369fasihi

New Member
سلام و خسته نياشيد
من تازه عضو شدم
از همه توضيح هاي توابع ممنونم

درباره توابع api
يه چيزايي مي خوام ميشه لطف كنين و كمكم كنين

ميشه نام و روش كار توابع رسم بيضي خط و چند ضلعي و كپچر كردن صفحه دسك تاپ به يك شئ تصوير را برام بفرستيد

ممنون
 

the_king

مدیرکل انجمن
برای ترسیم بیضی با استفاده از توابع API به تابع Ellipse نیازمندیم :
کد:
Private Declare Function Ellipse Lib "gdi32.dll" (ByVal hDC As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
پارامتر اول آن (hDC) شماره Handle مکانی است که ترسیم در آن صورت می گیرد، مثلا :
کد:
Me.hDC
Form1.hDC
Picture1.hDC

پارامتر های بعدی موقعیت x و y برای مکان آغاز و پایان ترسیم هستند که از بالا سمت چپ به سمت پایین راست محیط است.
واحد ترسیم در نمایشگر Pixel خواهد بود.
رنگ ترسیم با ForeColor ضخامت ترسیم با DrawWidth و پر کردن داخل بیضی با FillStyle و رنگ داخل بیضی با FillColor
مشخص می شوند، گو اینکه تمامی این مشخصه ها در API ویندوز معادل خاص خود را دارند ولی استفاده از مشخصه های
ویژوال بیسیک در حالت عادی به مراتب ساده تر است و توصیه می شود مگر در حالت های خاص.
مثلا :
کد:
Ellipse Picture1.hDC, 40, 40, 530, 150

برای ترسیم چند ضلعی از تابع Polygon استفاده می شود که موقعیت رئوس چند ضلعی را در خواست خواهد کرد :
کد:
Private Declare Function Polygon Lib "gdi32.dll" (ByVal hDC As Long, ByRef lpPoint As POINTAPI, ByVal nCount As Long) As Long
نقطه ها بایستی توسط نوع داده ای مرکب POINTAPI مشخص شوند که از مختصات x و y (برحسب Pixel) تشکیل شده است.
کد:
Private Type POINTAPI
    X As Long
    Y As Long
End Type

پارامتر اول آن (hDC) همانند تابع Ellipse شماره Handle مکانی است که ترسیم در آن صورت می گیرد.
پارامتر دوم بایستی به اولین خونه از آرایه ی نقاط اشاره کند که می تواند بدین شکل تعریف شود :
کد:
    Dim Points(0 To 4) As POINTAPI
در این مثال ما یک آرایه 5 نقطه ای را تعریف کرده ایم که اولین نقطه آن (Points(0 خواهد بود.
پارامتر سوم تعداد نقاط را مشخص می کند، مثلا در مثال ما این پارامتر عدد 5 خواهد بود.
کد:
Polygon Picture1.hDC, Points(0), 5

برای انتقال تصویر از یک تصویر به تصویر دیگر (بر اساس DC Handle) به تابع BitBlt نیاز داریم :
کد:
Private Declare Function BitBlt Lib "gdi32.dll" (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
پارامتر اول hDC محیط مقصد و دو پارامتر بعدی مختصات نقطه بالا - چپ موقعیت مقصد هستند.
دو پارامتر بعدی طول و عرض کادری هستند که قرار است منتقل شود و پارامتر hSrcDC مقدار hDC محیط مبدا را
مشخص می سازد.
دو پارامتر بعدی هم مختصات نقطه بالا-چپ موقعیت مبدا هستند و آخرین پارامتر هم نوع انتقال را مشخص می سازد.
برای یک انتقال ساده از vbSrcCopy استفاده کنید که عین تصویر مبدا را به مقصد انتقال می دهد.
به عنوان مثال این کد زیر یک کادر 200 در 100 پیکسلی را از Picture2 به Picture1 منتقل می سازد.
کد:
BitBlt Picture1.hDC, 0, 0, 200, 100, Picture2.hDC, 0, 0, vbSrcCopy

برای Capture کردن صفحه Desktop از سه تابع اضافه نیز استفاده می کنیم، تابع GetDesktopWindow مقدار hWnd
پنجره Desktop را برمیگرداند.
با تابع GetDC از روی این hWnd مقدار hDC آنرا مشخص می کنیم تا در تابع BitBlt مورد استفاده قرار گیرد.
چون hDC ای که توسط GetDC مشخص می شود پس از استفاده حتما باید آزاد شود، از تابع ReleaseDC برای
آزاد کردن مجدد hDC استفاده می کنیم :

کد:
    Dim hDC As Long
    hDC = GetDC(GetDesktopWindow)
    BitBlt Picture1.hDC, 0, 0, 569, 294, hDC, 0, 0, vbSrcCopy
    ReleaseDC GetDesktopWindow, hDC



کد کامل یک برنامه که کار با این توابع را نشان می دهد به همراه فایل اجرایی EXE ضمیمه این پست شده است.
 

پیوست ها

  • Project1.zip
    5.7 کیلوبایت · بازدیدها: 21

ninjavb

Member
با سلام
لطفا میشه نحوه ی کپی فایل با تابع copyfileاز توابع api رو توضیح بدید بایه مثال.من چند وقتی با وی بی کار نکردم کلا یادم رفته هر کار میکنم یه ارور میده.
با تشکر
 

saalek110

Well-Known Member
این تاپیک را هم ببینید:
یک سری آموزش فوق العاده جالب

شامل:
استفاده از تابع BitBlt در ویژوال بیسیک
گزارش گیری در ویژوال بیسیک
رمزگزاری و رمز گشایی
تبدیل تاریخ سیستم به شمسی و بر عکس
نکات ریز و درشت در مورد فایل
نکاتی در مورد کردن با فرم ها
تکامل تدریجی یک برنامه نویس
دستکاری منو ها با استفاده از توابع ویندوز
طرز استفاده از Ms-Agent در ویژوال بیسیک ( خیلی جالبه البته برای راهنما)
پخش فایلهای صوتی تصویری در ویزوال بیسیک
چند ریسمانی در ویژوال بیسیک
چگونه ActiveX بسازیم؟
استفاده از فایلهای منبع در ویزوال بیسیک
استفاده از محضر خانه ویــندوز
نکاتی در مورد استفاد از چاپگر
بدست آوردن اطلاعاتی در مورد سیستم
طریقه استفاده از DLL های نوشته شده توسط ++C در VB 6.0
استفاده پورت ها در ویژوال بیسیک 6
توابعی برای کار با رشــته ها
آموزش ویژوال بیسک 6 توسط : امیر مراد آبادی
UsingDLLs
ذخیره تصاویر در بانک اطلاعاتی
راهنمای آموزش ساخت گزارش توسط برنامه ACTIVE REPORT 2
معرفی پایگاه داده
آموزش برنامه نویسی توسط QBASIC
آموزش ویژوال بیسیک 6 توسط : Meisam.Mor
یکسری کد مورد نیاز SQL 2000 در ویژوال بیسیک
گزارش گیری در VB 6.0
بانکهای اطلاعاتی رابطه ای ( مفاهیم وتعاریف )
مولفه های Com و DCOM
آموزش Command SQL Server
آشنایی با رکوردست و متد های آن
روش تغییر پایگاه داده Access در VB 6.0
ایجاد ارتباط با پایگاه داده با یک مثال
انواع ارتباط در پایگاه داده
آشنایی کلی با پایگاه داده
استفاده از دستورات SQL در ویژوال بیسیک قسمت اول
استفاده از دستورات SQL در ویژوال بیسیک قسمت دوم
ایجاد ارتباط با پایگاه داده رمزگزاری شده
انتقال اطلاعات از یک پایگاه داده به پایگاه دیگر
طراحی و ایجاد نمودار در ویژوال بیسیک
آموزش دستورات مختصر و مفید SQl بخش اول
آموزش دستورات مختصر و مفید SQl بخش دوم
آموزش دستورات مختصر و مفید SQl بخش سوم
آموزش دستورات مختصر و مفید SQl بخش پایانی
آموزش برنامه Wise Installation System
Net Cat : چاقوی همه کاره
اشیاء داده ActiveX-ADO
ذخیره تصویر در پایگاه داده
جزوه کار عملی پایگاه داده برای استفاده در SQL
گزارش گیری از پایگاه داده در ویژوال
دیتا تایپ تاریخ شمسی برای SQL SERVER 2005
مطالعه موفق با تمرکز ( علت این فایل این است که در صورت مطالعه کتوب برنامه نویسی با حداکثر باز دهی باشد )
آشنایی با ابزارهای مخصوص برقراری ارتباط با پایگاه داده
آموزش ویژوال بیسیک در 1+N
کار با برنامه Word & Eecel در ویژوال
کریستال ریپورت 10 : نحوه Login کردن به SQL Server
کتابخانه توابع شمسی در کریستال ریپورت 10
PCI Express نسل بعدی کارت گرافیک
آموزش Expression Web ( هدف این معرفی طراحی وب و قراردادن برنامه ، دوستان برنامه نویس رو وب )
این هم سرویس پک 6 برای ویژوال بیسیک
آپدیت امنیتی فایل oleaut32.DLL
جزوه آموزشی Microsoft Access
آموزش دیگری از نرم افزار اکسس 2003
آموزش برنامه InstallShield 10.5 ( یکی از بهترینها در قسمت ساختن Setup برای پروژه برنامه نویسی )
مجموعه مقالات آموزسي براي پايگاه داده ---- در 15 فصل
آموزش هاي حرفه ای در مورد TextBox
آموزش حرفه اي منو Menu
راهنماي مقدماتي براي برنامه نويسان پايگاه داده
آموزش OpenGL programming in Visual Basic 6 قسمت اول
مديريت پايگاه داده
آموزش ويژوال بيسيك 6 - نويسنده : Arashps
آموزش كريستال رپورت 10 با مثال عملي
كار با ساختار پايگاه داده
آموزش كنترل هاي اكتيواكس OCX
آموزش ActiveX Data Object =ADO
آموزش كار با List View
آموزش برنامه نويسي چند رسانه در ويژوال بيسيك 6
مجموعه نكات استفاده از چاپگر
مقاله آموزش در مورد Timer
مقاله آموزشي كار با كنترل Treeview
راهنماي ساخت Setup براي برنامه نويسان 6 VB
مقاله آموزشي در مورد كار با فايل در VB
آموزش ساخت DLL ها و آشنايي با آنها
آموزش کامل توابع API
آموزش برنامه نویسی ویژوال بیسیک در پایگاه داده اکسس VBA
مجموعه ای از مثالهای از زبان برنامه نویسی VB
 

saalek110

Well-Known Member
نقل از :
http://forum.majidonline.com/showthread.php?t=89773&page=5
=========================
آیا وی بی این امکان را دارد که وقتی حروف ما از هم جدا شدند خودش تشخیص دهد که حروف ما چسبنده هستند یا خیر و به ما نشان دهد برای مثال محمد=م ح م د ====>ﻣ ﺤ ﻤ ﺪ اگر این امکان را دارد لطف کنید و برایم سورسش رو بگذارید.

پردازش و نمایش کاراکتر های فارسی و Glyph ها (اشکال مختلف کاراکتر ها) نیازمند سیستم Unicode است که برای هر
کاراکتر دو بایت فضا نیاز دارد (نه یک بایت همانند ANSI). و متاسفانه توابع ویژوال بیسیک 6 و نسخه های قبل از آن،
بصورت ترکیبی از Unicode و ANSI هستند. مثلا رشته های String در ویژوال بیسیک Unicode اند ولی کنترل هایی نظیر
TextBox بر اساس ANSI طراحی شده اند.

اجازه دهید که با یک مثال این مساله را نشان دهم، فرض کنید که بخواهیم کاراکتر ⅓ (کاراکتر 1/3) را که کد Unicode آن 8531
ده دهی است را در متغیر Text ذخیره کنیم، تابع ChrW کد کاراکتر را به رشته تبدیل کرده و بر می گرداند :
کد:
    Dim Text As String
    Text = [B]ChrW[/B](8531)

و با تابع AscW می توانیم کد کاراکتر را مجددا از رشته استخراج کرده و با تابع MsgBox اعلام کنیم که به درستی عدد 8531 را
اعلام خواهد کرد :
کد:
    Dim Text As String
    Text = ChrW(8531)
    MsgBox [B]AscW[/B](Text)

تا اینجای کار ویژوال بیسیک کاملا سیستم Unicode را پیاده می کند، اما فرض کنیم که یک کنترل TextBox داشته باشیم
با نام Text1 و بجای متغیر Text از این کنترل Text1 استفاده کنیم :
کد:
    Text1 = ChrW(8531)
    MsgBox AscW(Text1)

و برخلاف انتظار، بجای عدد 8531، عدد 63 اعلام می شود که کد کاراکتر علامت سوال (?) است و در داخل TextBox هم
کاراکتر ? قرار می گیرد. علت این مساله این است که کنترل Text1 تنها می تواند کاراکتر های تک بایتی (کد 0 الی 255)
را در خود جای دهد و توانایی نمایش کاراکتری با کد 8531 را ندارد، پس بجای آن کاراکتر ? را درج می کند.

راه حل استفاده از توابع API ویندوز است که مشکل را حل می کنند.
در برنامه ای که نوشتم توابع زیر Unicode هستند :

تابع GetCharacterPlacementW برای استخراج Glyph های کاراکتر ها (حالت های چسبان و غیر چسبان حروف فارسی-عربی)
تابع ExtTextOutW برای نمایش Glyph ها
تابع GetWindowTextW برای دریافت رشته Unicode داخل یک TextBox (از مشخصه Text کنترل های TextBox استفاده نکنید
چون ANSI هستند)
تابع GetWindowTextLengthW برای دریافت طول رشته Unicode داخل یک TextBox
تابع SetWindowTextW برای ارسال یک متن Unicde به داخل یک TextBox

این توابع API را درون یک ماژول (Module) به نام ModuleUnicode تعریف کردم و برای استفاده ساده تر از آنها توابعی را با
ویژوال بیسیک ایجاد کردم :

تابع GetGlyphs مجموعه Glyph های یک رشته را درون یک آرایه از نوع Integer برمی گرداند، پارامتر hDC بایستی
روی مشخصه hDC یک Form یا PictureBox یا TextBox یا ... تنظیم شود، اینکه در آن کنترل چه فونتی بکار رفته باشد اهمیت
زیادی دارد، زیرا یک کاراکتر ممکن است در دو فونت متفاوت شماره Glyph های متفاوتی داشته باشد.

تابع GetText متن Unicde داخل یک TextBox را بر می گرداند.

تابع SetText متن Unicode داخل یک TextBox را به متن دلخواهی تغییر می دهد.

تابع PrintGlyph یک Glyph مشخص را در موقعیت x و y (برحسب Pixel) دلخواهی چاپ می کند. پارامتر hDC بایستی
روی مشخصه hDC یک Form یا PictureBox تنظیم شود، هر فونت و رنگی که در آن فرم یا کنترل فعال باشد برای ترسیم
Glyph بکار خواهد رفت. حتما فونتی را بکار ببرید که در هنگام بکارگیری تابع GetGlyphs بکار برده بودید.

Preview.gif


کد کامل برنامه به همراه فایل اجرایی exe ضمیمه این پست می باشد.
سالک: برای دانلود به پست اصلی بروید.
با تشکر فراوان از جناب the_king برای این آموزش زیبا و مفید.
 

saalek110

Well-Known Member
b3.gif

5 مگا.
http://www.divshare.com/download/6314482-233

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

فهرست:
کد:
Preface 

I. Declaring API Functions in Visual Basic


Chapter 1. Introduction 
What is the Win32 API? 
The Obstacles to Win32 Programming under Visual Basic 
Proceed with Circumspection 
Cautions 
Chapter 2. Preliminaries 
Character Codes 
Parameters and Arguments 
Dynamic Link Libraries 
Some C++ Syntax 
Pointers 
Chapter 3. API Declarations 
The VB Declare Statement 
The VC-to-VB Translation Game Plan 
Passing Parameters to an External Function 
CopyMemory - A VB Hacker's Dream 
Dealing with API Errors 
Chapter 4. Data Types 
What is a Data Type? 
Fundamental and Derived Data Types 
Visual Basic Data Types 
Basic VC++ Data Types 
Translating Derived Data Types 
Win32 Typedefs 
An Example 
Structures and User-Defined Types 
Flags 
Symbolic Constants 
Chapter 5. Signed and Unsigned Data Types 
Signed and Unsigned Representations 
Why Two Different Representations? /dd> 
Unsigned Representation 
Signed Representation 
Translating Between Signed and Unsigned Representations 
Converting Between Word Lengths 
Chapter 6. Strings 
The BSTR 
C-Style LPSTR and LPWSTR Strings 
String Terminology 
Tools for Exploring Strings 
String Conversion by VB 
Passing Strings to the Win32 API 
Strings and Byte Arrays 
Getting the Address of a Variable of User-Defined Type 
Chapter 7. System Information Functions 
The Computer's Name 
Special Windows Paths 
The Operating System Version 
System Metrics 
System Parameters 
System Colors 
Chapter 8. Exception Handling 
Thwarting the General Protection Fault 
Replacing the Default Exception Handler 
The Replacement Exception Handler 
A Complete Example 

II. The Windows Operating System (Kernel32.DLL Programming) 


Chapter 9. Windows Architecture 
Processes and Threads 
Windows Architecture 
Differences Between Windows 9x and Windows NT 
Chapter 10. Objects and Their Handles 
Handles 
Example: File Mapping 
Chapter 11. Processes 
Process Handles and IDs 
Module Handles 
Identifying a Process 
Process Pseudohandles 
Enumerating Processes 
Is This Application Already Running? 
Chapter 12. Threads 
Thread Handles and Thread IDs 
Thread Priority 
Thread Synchronization 
Waiting Can Be Tricky 
Chapter 13. Windows Memory Architecture 
Types of Memory 
The Address Space of a Process 
Example: Using GetSystemInfo 
Allocating Virtual Memory 
Example: Using GlobalMemoryStatus 
Virtual Memory Management 
Heaps of Memory 
Example: Mapping Virtual Memory 
Chapter 14. Portable Executable Files 
Module Relocation 
The PE File Format 
Example: Getting PE File Information 

III. Windows (USER32.DLL Programming) 


Chapter 15. Windows: The Basics 
Terminology 
Window Styles 
Owned Windows 
Z Order 
Enumerating Windows 
Size and Position Functions 
Chapter 16. Windows Messages 
The Message Queues of a Thread 
The Windows Messaging System 
Posting and Sending Messages 
Example: Sending Messages to a Listbox 
Interprocess Marshalling 
Copying Data Between Processes 
The Local Input State 
Chapter 17. Window Classes and the Window Creation Process 
Window Classes 
Predefined Window Classes 
The Window Procedure of a Window Class 
Creating a Window 
Window Styles 
Windows and VB Controls 
Example: Spying on Windows 
Chapter 18. Windows Subclassing 
Subclassing a Window or Window Class 
Example: Subclassing the VB Checkbox Class 
Chapter 19. Windows Hooks 
Global and Thread-Specific Hooks 
Setting the Hook 
Hook Procedures 
Hook Types 
Hook Chains 
Example: A Local Hook 
Example: A Global Hook 
Chapter 20. DLL Injection and Foreign Process Access 
Accessing a Foreign Process: The Hooked Thread Graph 
Allocating Foreign Memory 
Example: Foreign Control Extraction 
Example: Fixing the VB6 Help System 

IV. The Windows GDI (GDI32.DLL Programming) 


Chapter 21. Bitmaps 
Rectangles 
Bitmaps 
Bitmap Functions 
Using Bitmaps in Menus 
Chapter 22. Device Contexts I: Overview 
How Windows Handles Window Painting 
Device Contexts 
Chapter 23. Device Contexts II: Types of Device Contexts 
Information Device Contexts 
Memory Device Contexts 
Printer Device Contexts 
Display Device Contexts 
Coordinate Systems 
Chapter 24. Device Contexts III: Coordinate Systems 
GDI Coordinate Systems 
Virtual Space 
Device Space 
Page Space 
Virtual Space to Physical Space 
Setting Up Logical Coordinates in Physical Space 
Mapping Modes 
World Space 
Chapter 25. Fonts 
Font Families 
Font Technologies 
Character Sets 
Logical and Physical Fonts 
Enumerating Fonts 

V. Appendixes 


A. The Clipboard 
B. The Windows Shell 
C. The Registry and Private Profiles

b4.gif
 

the_king

مدیرکل انجمن
فراخوانی توابع API بدون Declare در ویژوال بیسیک

شیوه معمول فراخوانی توابع API در ویژوال بیسیک، استفاده از Declare است، مثلا برای فراخوانی تابع Beep
از کد زیر استفاده می شود :
کد:
Private Declare Function [B]Beep[/B] Lib "kernel32.dll" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long

اما اینجا شیوه وِیژه ای را معرفی می کنم که نیازی به Declare ندارد، فراخوانی توابع توسط کدهای زبان ماشین.
برای اینکار یک کلاس با عنوان LIBCall ایجاد کردم که فراخوانی توابع API را آسان می کند.

مثلا کد زیر به تنهایی موجب فراخوانی تابع Beep می شود که یک صوت با فرکانس 1000HZ و به مدت 1000 میلی ثانیه
(یک ثانیه) را ایجاد می کند :
کد:
Dim LibCall As New LibCall
    With LibCall
        .CallType = LIBCall_StdCall
        .LibraryName = "kernel32.dll"
        .FunctionName = "Beep"
        .CallFunction 1000, 1000
    End With

یکی از مزیت های این کلاس در آن است که برخلاف Declare حتی توانایی اجرا کردن توابع CDecl را دارد،
اکثر توابعی که برای زبان ++C طراحی می شوند به شیوه CDecl قابل دسترسی اند و ویژوال بیسیک بصورت عادی
قادر به فراخوانی آنها نیست. توابع StdCall همانند توابع API ویندوز به شیوه معمول Declare هم قابل دسترسی اند.

کلاس LibCall به همراه برنامه نمونه و فایل اجرایی exe ضمیمه این پست می باشد.
 

پیوست ها

  • Beep.zip
    9.4 کیلوبایت · بازدیدها: 47

جدیدترین ارسال ها

بالا