PDA

View Full Version : آموزش: توابع API ویندوز در سی شارپ



ایمان مدائنی
پنج شنبه 23 خرداد 1392, 11:23 صبح
به نام خدا

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

4 تابع API را مورد بررسی قرار داده است .


using System.Runtime.InteropServices;
namespace CSharpWin32APICall
{
public partial class Form1 : Form
{
[DllImport("User32.dll")]
public static extern IntPtr CloseWindow(IntPtr hWnd);
[DllImport("User32.dll")]
public static extern IntPtr BringWindowToTop(IntPtr hWnd);
[DllImport("User32.dll")]
public static extern IntPtr DestroyWindow(IntPtr hWnd);
[DllImport("User32.dll")]
public static extern IntPtr AnimateWindow(IntPtr hWnd,
int time, AnimateWindowFlags flags);

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

چیزی نیست جز User32.dll .

بعضی از توابع یکسری Flag دارند . ( یک عددی که به عنوان پارامتر به تابع پاس داده میشود و رفتار تابع را مشخص

می کند.)برای مثال در بالا پارامتر سوم تابع AnimateWindow یک فلگ می باشد که نوع انمیشن پنجره را مشخص

میکند. ( مثلا میگوید Fade شو یا به راست برو یا به چپ حرکت کن و ....) برای فراخوانی فلگ ها در زبان های

شی گرا ، از نوع های شمارشی استفاده میشود. یک نوع شمارشی یا enum مانند یک مجموعه است که هر

عضو آن می تواند یک عدد داشته باشد . ( می توانید آن را مجموعه ای از زوج مرتب ها تلقی کنید که یک بخش

آنها نام صفت ، و بخش دیگر مقدار آن است.) برای AnimateWindow خواهیم داشت :


public enum AnimateWindowFlags
{
AW_SLIDE = 0x00040000,
AW_VER_POSITIVE = 0x00000004,
AW_VER_NEGATIVE = 0x00000008,
AW_HIDE = 0X40000,
AW_BLEND = 0X80000,
AW_ACTIVATE = 0x00020000
}

برای مثال موقعی که فرم لود میشود ، تابع Animate Window را فراخوانی می کنیم تا فرم به صورت Fade لود

شود :


AnimateWindow(this.Handle, 1000,AnimateWindowFlags.AW_ACTIVATE
| AnimateWindowFlags.AW_BLEND);



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

قرار میگیرد و به تابع پاس داده میشوند. پارامتر دوم نیز زمان به میلی ثانیه است که در اینجا 1000 برابر یا یک ثانیه

است.

بقیه توابع یک پارامتر عدد صحیح دارند که ID فرم است که باز شده است . این ID نامش HWND یا به عبارتی

Window Handle می باشد. برای دسترسی به این شماره در سی شارپ از عبارت this.Handle استفاده میکنیم.
http://madaeny.com/ImagesArticle/c8eee83baec346c8a0bf1048c361cc34.jpg


منبع مقاله (http://freecscode.blogfa.com/post-153.aspx)