زنگ

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

FindWindow
GetWindow
GetWindowText
SetWindowText
IsWindow
MoveWindow
IsWindowVisible
EnableWindow
IsWindowEnabled
WindowFromPoint
پنجره ی نمایش
پنجره بسته
SetWindowPos
GetClassLong
SetClassLong
GetWindowLong
SetWindowLong
GetDesktopWindow
والدین

تابع FindWindow

تابع FindWindow (نام کلاس ، نام پنجره: PChar): HWND؛
عملکرد یک دسته پنجره را برآورده می کند که درخواست را برآورده می کند (در صورت عدم یافتن چنین پنجره ای) 0.

نام کلاس نام صنفی که توسط آن جستجو در میان تمام ویندوزهای سیستم انجام می شود. WindowName عنوان پنجره

یکی از پارامترها می تواند nil باشد ، در این حالت جستجو با استفاده از پارامتر دیگر انجام می شود.
مثال:

عملکرد GetWindow

تابع GetWindow (Wnd: HWND؛ Param): HWND
عملکرد یک دسته پنجره را برآورده می کند که درخواست را برآورده می کند.

Wnd دسته ای به پنجره اولیه پارام یکی از مقادیر ثابت زیر را می پذیرد: gw_Owner دسته به پنجره والدین بازگردانده می شود (در صورت عدم وجود والدین). gwHWND اول یک دسته را به پنجره اول (نسبت به Wnd) برمی گرداند. gw_HWNDNext دسته پنجره بعدی را برمی گرداند (پنجره ها بدون تکرار تکرار می شوند ، یعنی اگر پارامتر Wnd عملکرد را تغییر ندادید ، توصیف کننده ها دوباره بازگردانده نمی شوند) gw_Child یک دسته را به پنجره کودک اول برمی گرداند.

مثال:

تابع GetWindowText

تابع GetWindowText (hWnd: HWND؛ lpString: PChar؛ nMaxCount: Integer): interes؛
این عملکرد متن پنجره را برمی گرداند. برای فرم ، این عنوان ، برای دکمه - برچسب روی دکمه خواهد بود.

hWnd برای بدست آوردن متن برای پنجره دستگیر شوید. lpString متغیری که در آن نتیجه قرار می گیرد nMaxCount

حداکثر طول متن ، اگر متن طولانی تر باشد ، قطع می شود.


مثال:

عملکرد IsWindow

عملکرد IsWindow (hWnd: HWND): BOOL؛ اگر یک پنجره با دسته داده شده وجود دارد ، در غیر اینصورت غلط است.

هوند دسته پنجره مورد نظر

عملکرد MoveWindow

MoveWindow (hWnd: HWND؛ X، Y، nWidth، nHeight: interes؛ bRepaint: BOOL): BOOL؛ پنجره را به یک موقعیت جدید منتقل می کند.

hWnd دسته ای به پنجره برای حرکت. X ، Y ، nWidth ، nHeight بر این اساس: مختصات جدید X، Y؛ عرض جدید ، ارتفاع نقاشی مقدار بولی نشان می دهد که آیا پنجره دوباره طراحی خواهد شد یا خیر.

عملکرد IsWindowVisible

عملکرد IsWindowVisible (hWnd: HWND): BOOL؛
اگر پنجره داده شده قابل مشاهده باشد ، درست برمی گردد.

hWnd دسته پنجره.

عملکرد EnableWindow

تابع EnableWindow (hWnd: HWND؛ bEnable: BOOL): BOOL؛
دسترسی پنجره را تنظیم می کند (در صورت عدم پاسخ به وقایع ماوس ، رویدادهای صفحه کلید و غیره) پنجره غیرقابل دسترسی است. آنالوگ Delphi خاصیت Enabled از قطعات است. اگر همه چیز خوب پیش آمد و در غیر این صورت کاذب بود EnableWindow درست است.

hWnd دسته پنجره. قابل استفاده مقدار بولی که میزان دسترسی به پنجره را تعیین می کند.


مثال:

عملکرد IsWindowEnabled

عملکرد IsWindowEnabled (hWnd: HWND): BOOL؛
برای پنجره مشخص شده باز می گردد: اگر پنجره در دسترس است و در غیر این صورت غلط است درست است.

hWnd دسته پنجره.

عملکرد WindowFromPoint

WindowFromPoint (نقطه: TPoint): HWND؛
در این مرحله از صفحه ، یک دسته را به پنجره باز می گرداند.

نقطه نوع مختصات نقطه صفحه TPoint(برای تعریف نوع زیر را ببینید)

تابع

نوع نکته \u003d رکورد x: Longint؛ y: Longint؛ پایان;

عملکرد ShowWindow

تابع ShowWindow (hWnd: HWND؛ nCmdShow: Integer): BOOL؛ پنجره را نشان می دهد یا پنهان می کند.

hWnd دسته پنجره مورد نظر nCmdShow ثابت که تعیین می کند چه کاری با پنجره انجام خواهد شد: SW_HIDE SW_SHOWNORMALSW_NORMAL SW_SHOWMINIMIZED SW_SHOWMAXIMIZED SW_MAXIMIZE SW_SHOWNOACTIVATE SW_SHOW SW_MINIMIZE SW_SHOWMINNOACTIVE SW_SHOWNA SW_RESTORE SW_SHOWDEFAULT SW_MAX


مثال:

عملکرد CloseWindow

تابع CloseWindow (hWnd: HWND): BOOL؛ stdcall؛
پنجره را می بندد.

hWnd یک دسته به پنجره برای بستن.

SetWindowPos

تابع SetWindowPos (hWnd: HWND؛ hWndInsertAfter: HWND؛ X، Y، cx، cy: Integer؛ uFlags: UINT): BOOL؛ stdcall؛
پنجره را در یک موقعیت جدید قرار می دهد

hWnd اپتیک پنجره hWndInsertAfter دسته پنجره ، قبل از لیست سفارش Z- یک پنجره درج خواهد شد hWndیا یکی از ثابت های زیر: HWND_BOTTOM پنجره را در پایین لیست Z-Order قرار دهید HWND_TOP پنجره را به بالای لیست Z-Order منتقل کنید X ، Y ، cx ، cy

بر این اساس ، افق جدید. ، ورته موقعیت پنجره ( X ، Y) و همچنین عرض جدید
و قد ( cx ، cy)

uFlags یک یا چند (از هم جدا) یا) از ثابت های زیر: SWP_NOSIZE بعد از حرکت اندازه پنجره را تغییر اندازه دهید ( cx ، cy نادیده گرفته) SWP_NOZORDER موقعیت پنجره را در لیست Z-Order تغییر ندهید SWP_SHOWWINDOW بعد از حرکت پنجره را قابل مشاهده کنید SWP_HIDEWINDOW پنجره را پس از حرکت مخفی کنید SWP_NOACTIVATE بعد از حرکت تمرکز خود را به پنجره نکنید SWP_NOMOVE پنجره حرکت نکنید (نادیده گرفته شد X ، Y)

عملکرد GetClassLong

تابع GetClassLong (hWnd: HWND؛ nIndex: Integer): interes؛
این عملکرد یک عدد صحیح 32 بیتی را که از یک قسمت ضبط خاص گرفته شده برمی گرداند TWndClassEx پنجره مشخص شده

hWnd دسته پنجره nIndex ثابت که تعیین می کند چه چیزی باز خواهد گشت. باید یکی از موارد زیر باشد: GCL_MENUNAME یک اشاره گر را به رشته ای که حاوی نام منوی کلاس است ، در پرونده منابع مرتبط با برخی از برنامه ها ، برمی گرداند. GCL_HBRBACKGROUND دسته (HBRUSH) قلم مو پس زمینه مرتبط با کلاس را برمی گرداند GCL_HCURSOR دسته (HCURSOR) مکان نما را که مربوط به کلاس است برمی گرداند GCL_HICON دسته (HICON) نماد مرتبط با کلاس را برمی گرداند GCL_HMODULE دسته فرآیند (HMODULE) که کلاس را ثبت کرده است برمی گرداند. GCL_CBWNDEXTRA اندازه حافظه (بایت) را برای ذخیره داده های اضافی برای این WINDOW اختصاص می دهد. برای توضیحی در مورد نحوه استفاده از این حافظه ، به توضیحات عملکرد مراجعه کنید GCL_CBCLSEXTRA اندازه حافظه (بایت) را برای ذخیره بیشتر DATA CLASS اختصاص می دهد GCL_WNDPROC آدرس روال پنجره مرتبط با کلاس را برمی گرداند. GCL_STYLE استایل کلاس را برمی گرداند (حضور این یا آن سبک توسط عملیات بیت کوین بررسی می شود و با استفاده از ثابت مانند cs_XXX) GCL_HICONSM

توجه داشته باشید: در مورد هنگامی که عملکرد یک نشانگر را برگرداند ، تبدیل نوع لازم است (علاقه -\u003e)

عملکرد SetClassLong

تابع SetClassLong (hWnd: HWND؛ nIndex: Integer؛ dwNewLong: Longint): interes؛ تابع عملکرد زوج. قسمت مورد نیاز را به مقدار مربوطه تنظیم می کند.
این تابع مقدار قدیمی فیلد را برمی گرداند به گونه ای که بعداً می توان آنرا اصلاح کرد یا اگر چیزی اشتباه پیش آمد ، صفر برمی گردد.

hWnd دسته پنجره nIndex یکی از ثابت ها GCL_XXX از یک عملکرد قسمت مورد نیاز بسته به مقدار این قسمت تغییر خواهد کرد.

توجه داشته باشید اشاره گر برای تایپ کردن علاقه.

عملکرد GetWindowLong

تابع GetWindowLong (hWnd: HWND؛ nIndex: Integer): Longint؛ اطلاعات مربوط به یک پنجره خاص را به عنوان یک عدد صحیح 32 بیتی برمی گرداند.

hWnd دسته پنجره nIndex ثابت که تعیین می کند چه چیزی باز خواهد گشت. باید یکی از موارد زیر وجود داشته باشد:
GWL_WNDPROC آدرس روال پنجره مرتبط با این پنجره را برمی گرداند. آدرس دریافت شده (پس از تبدیل نوع مربوطه) می تواند در این تابع استفاده شود CallWindowProc... این مقدار معمولاً درصورتی که می خواهند روش پنجره موجود را جایگزین خود کند ، استفاده می شود ، در حالی که برای از بین رفتن عملکرد پنجره ، معمولاً از آنها استفاده می کنند CallWindowProc. GWL_HINSTANCE توصیف کننده برنامه مشخص شده هنگام ایجاد پنجره توسط عملکرد را برمی گرداند CreateWindowEx. GWL_HWNDPARENT دسته (HWND) پنجره والدین را برمی گرداند GWL_STYLE سبک پنجره را برمی گرداند. مقادیر سبک خاص با استفاده از یک عمل کمی بیت تشخیص داده می شود و و ثابت WS_XXX GWL_EXSTYLE سبک گسترده پنجره را برمی گرداند. مقادیر سبک خاص با استفاده از یک عمل کمی بیت تشخیص داده می شود و و ثابت WS_EX_XXX GWL_USERDATA عدد صحیح 32 بیتی مرتبط با پنجره را برمی گرداند (این آخرین پارامتر در تماس با ایجاد CreatWindow یا CreatWindowEx است) GWL_ID شناسه پنجره را برمی گرداند (هیچ ارتباطی با دسته پنجره ندارد!) تنظیم شده توسط پارامتر hMenu برای ویندوز کودک هنگام تماس با CreatWindow یا CreatWindowEx

توجه داشته باشید: در مواردی که عملکرد یک نشانگر را برگرداند ، تبدیل نوع مورد نیاز است (علاقه -\u003e اشاره گر). شما می توانید اینگونه انجام دهید:

عملکرد SetWindowLong

تابع SetWindowLong (hWnd: HWND؛ nIndex: Integer؛ dwNewLong: Longint): Longint؛
برای کارکرد جفت شد. ویژگی های یک پنجره خاص را تغییر می دهد.
در صورت موفقیت آمیز بودن تماس یا غیرقانونی بودن عملکرد ، مقدار قدیمی ویژگی را برمی گرداند.

hWnd دسته پنجره nIndex ثابت که تعیین می کند کدام خاصیت تغییر خواهد کرد. باید یکی از ثابت ها باشد GWL_XXX از توضیحات عملکرد dwNewLong مقدار جدید خاصیت تعریف شده ثابت nIndex

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

تابع GetDesktopWindow

تابع GetDesktopWindow: HWND
این عملکرد یک دسته را به پنجره Desktop باز می گرداند. پارامتری وجود ندارد.

والدین

عملکرد GetParent (hWnd: HWND): HWND؛
دسته پنجره والدین را برای یک پنجره برمی گرداند hWnd.

hWnd دسته پنجره

با استفاده از WinAPI می توانید رویه های مختلف پنجره ، کادرهای گفتگو ، برنامه ها و حتی بازی ها را ایجاد کنید. بیایید بگوییم ، کتابخانه در توسعه برنامه نویسی ، MFC اساسی است ، زیرا این واسط ها افزودنیهای این کتابخانه هستند. پس از تسلط بر آن ، شما به راحتی اشکال ایجاد می کنید و می دانید که چگونه این اتفاق می افتد.

ما به تئوری معرفی نخواهیم شد. بیایید با نحوه ایجاد این پروژه در MVS شروع کنیم و در پایان مقاله یک مثال ساده مورد بحث قرار خواهد گرفت.

بنابراین. اول باز می کنیم ویژوال استودیوسپس بر روی زبانه "پرونده" و سپس "ایجاد پروژه" کلیک کنید:

سپس در لیست کشویی Visual C ++ مورد Win32 را انتخاب کنید و "پروژه Win32" وجود دارد. ما روی آن کلیک می کنیم:
نام پروژه را وارد کنید ، مسیر را مشخص کنید و روی "OK" کلیک کنید. در مرحله بعد می گوید: "به جادوگر برنامه Win32 خوش آمدید." روی بعدی کلیک کنید به طور پیش فرض ، برچسب "پروژه خالی" هیچ علامت چک ندارد. ما باید آن را نصب کرده و اطمینان حاصل کنیم که "نوع برنامه" ما برنامه Windows است. اگر همه چیز درست است ، روی "پایان" کلیک کنید.

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

خوب ، حالا بیایید نوشتن را شروع کنیم برنامه ساده، که به طور سنتی کتیبه را به نمایش می گذارد: "سلام ، جهانی !!!".

به طور طبیعی ، شما باید یک پرونده .cpp "name" را به پروژه اضافه کنید. ما روی دکمه سمت راست ماوس روی "پرونده های کد منبع" کلیک می کنیم ، در لیست کشویی ، زبانه را انتخاب کنید - "افزودن" ، سپس "ایجاد مورد ...". در نتیجه ، ما باید یک پنجره مانند این داشته باشیم:

"پرونده C ++" را انتخاب کنید ، یک نام وارد کنید ، روی "افزودن" کلیک کنید. سپس این پرونده را باز می کنیم و کد زیر را در آن قرار می دهیم (جزئیات زیر):

#عبارتند از // فایل هدر حاوی توابع API // عملکرد اصلی شبیه به int main () در یک برنامه کنسول است: int WINAPI WinMain (HINSTANCE hInstance، // توصیف نمونه برنامه کاربردی HINSTANCE hPrevInstance ، // LPSTR lpCmdLine در Win32 مورد استفاده قرار نمی گیرد ، // مورد نیاز برای راه\u200cاندازی یک پنجره در حالت خط فرمان int nCmdShow) // حالت نمایش پنجره (// عملکرد نمایش پنجره با دکمه "OK" روی صفحه نمایش (بعداً در مورد پارامترها) پیام پیام (NULL ، L "سلام ، جهانی !!!" ، L "رویه پنجره "، MB_OK)؛ NULL را برگردانید ؛ // مقدار عملکرد را برگردانید)

نتیجه باید مانند این باشد:

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

در خط اول ، پرونده هدر windows.h را درج می کنیم. این شامل تمام توابع "apish" لازم است. همه چیز در اینجا مشخص است.

که در 4-7 خط ما توصیفی از عملکرد int WINAPI WinMain () داریم.

واجد شرایط WINAPI ، همیشه برای عملکرد WinMain مورد نیاز است. فقط این را به خاطر بسپار. WinMain نام تابع است. این چهار پارامتر دارد. مورد اول HINSTANCE hInstance ( خط 4) hInstance یک دسته از نمونه های پنجره است (این یک کد خاص از یک روش پنجره است ، شناسه ای که سیستم عامل آن را از دیگر ویندوز ها متمایز می کند). از طریق آن ، می توانید هنگام کار در توابع دیگر به پنجره دسترسی پیدا کنید (بیشتر در مورد بعدی) ، هر چیزی را در پارامترهای پنجره تغییر دهید. HINSTANCE یکی از بسیاری از انواع داده های تعریف شده در WinAPI است ، به عنوان مثال int. و سوابق hInstance HINSTANCE به ما می گوید که ما متغیر جدیدی از نوع HINSTANCE با نام hIn ნივთი ایجاد می کنیم.

بعداً در مورد انواع داده صحبت خواهیم کرد ، بنابراین بیایید به پارامتر بعدی برویم: HINSTANCE hPrevInstance ( خط 5) همانطور که در نظرات نوشته شده است ، در Win32 از آن استفاده نمی شود ، زیرا برای سیستم 3.x bit ساخته شده است ، از حالت قبلی مشخص است که این یک دسته به عنوان نمونه windows است. بعد ، ما یک متغیر از نوع LPSTR داریم ( خط 6) به نام lpCmdLine در رویدادی که از طریق آن پنجره راه اندازی می شود استفاده می شود خط فرمان با پارامترهای نوشته شده در کلمات. این یک روش بسیار عجیب و غریب است ، بنابراین ما روی آن نمی گذریم.

و آخرین پارامتر: یک عدد صحیح ، نحوه نمایش پنجره را تعریف می کند. برای عملکرد ShowWindow لازم است که بعداً توضیح داده خواهد شد. به عنوان مثال ، با کمک آن می توانیم پنجره را به تمام صفحه گسترش دهیم ، آن را از ارتفاع مشخص ، شفاف یا در بالای بقیه بسازیم.

به عملکرد () پیام () خط 10) این چهار پارامتر است و برای نمایش پیام های خطا ، به عنوان مثال مورد نیاز است. در این حالت از آن برای نمایش پیام استفاده کردیم. به طور کلی ، توضیحات عملکرد مانند این است:

Int MessageBox (HWND hWnd ، // دسته به پنجره والدین LPCTSTR lpText ، // اشاره گر به خط با پیام LPCTSTR lpCaption ، // اشاره گر به خط با متن سرصفحه UINT uType) ؛ // پرچم های نمایش دکمه ها ، سبک آیکون و غیره

در مورد ما ، اولین پارامتر روی صفر تنظیم می شود. دلیل این امر این است که ما ویندوز نداریم (با هیچ برنامه ای راه اندازی نشده است).

بعد دو متغیر از نوع LPCTSTR داریم: lpText و lpCaption. اولین اطلاعاتی را گزارش می دهد که به صورت متن در پنجره نمایش داده می شود. دوم می گوید آنچه در متن عنوان برای پنجره نوشته خواهد شد. این شبیه به کاراکتر است ، اما هنوز هم نیست. برای نمایش صحیح متن ، باید حرف L را قرار دهید ( UNICODE خط)

خوب ، آخرین نوع داده UINT است - یک عدد صحیح 32 بیتی بدون امضا. یعنی ، یک آنالوگ int. می توان از این پارامتر مقداری مقادیر (بیشتر بعداً روی آنها) استفاده کرد ، به همین دلیل می توانید ظاهر دکمه را تغییر دهید. در مورد ما - این MB_OK است - به این معنی است که پنجره دکمه ای با کتیبه "OK" و عملکرد مربوطه را هنگام فشار دادن (بستن برنامه) ایجاد می کند.

که در خط 11مقدار تابع را برمی گردانیم ، زیرا از نوع void نیست.

بنابراین ، اکنون ما درک کلی از WinAPI داریم. در بخش های بعدی ادامه دارد.

در آخر! در آخر! امروز ما شروع به ایجاد یک پنجره کامل ویندوز خواهیم کرد. خداحافظ کنسول اسفبار !!!

تا این مرحله ، شما باید دانش خوبی از نحو C ++ داشته باشید ، بتوانید با شاخه ها و حلقه ها کار کنید و به خوبی بدانید که عملکردها چگونه کار می کنند. اگر به نبرد دریایی تسلط پیدا کرده اید ، می توانید فرض کنید که همه اینها را یاد گرفته اید.

نماد مجاری

تمام کدی که در WinAPI به آن می رسیم به زبان مجارستانی نوشته شده است. این یک کنوانسیون رمزگذاری است.

در این حالت ، حرف اولیه نوع در مقابل نام متغیر قرار می گیرد. کلمات موجود در نام متغیر و عملکرد با یک حرف بزرگ شروع می شوند.

در اینجا پیشوندهای زیر آورده شده است:

b یک متغیر نوع bool است.
l یک متغیر عدد صحیح طولانی است.
w - از کلمه (کلمه) - 16 بیت. نوع متغیر کوتاه امضا نشده
dw - از دو کلمه (کلمه دوتایی) - 32 بیت. نوع متغیر طولانی بدون امضا.
sz - رشته صفر خاتمه یافته است. فقط یک رشته معمولی که همه وقت از آن استفاده می کردیم.
p یا lp یک نشانگر (از نشانگر) است. lp (از اشاره گر بلند) - این نشانگرها از گذشته گذشته اند. اکنون lp و p به معنای یکسان هستند.
ح - دسته (از دسته).

به عنوان مثال ، یک اشاره گر به این صورت معرفی می شود:

void * pData؛

این فرم ضبط شده توسط مایکروسافت استفاده می شود. بسیاری از افراد از این روش برای نامگذاری متغیرها انتقاد می کنند. اما این نوع کارها (قراردادهای رمزگذاری) در شرکتهای بزرگ بسیار حیاتی است.

بگذارید یادآوری کنم که شناسه های ثابت معمولاً فقط با حروف بزرگ تشکیل می شوند: WM_DESTROY. WM_DESTOY 2 است ، ثابت از طریق تعریف می شود.

علاوه بر این ، winAPI از انواع زیادی استفاده می کند. در اینجا در این صفحه - http://msdn.microsoft.com/en-us/library/aa383751(VS.85).aspx ، می توانید توضیحات مربوط به انواع ویندوز (به انگلیسی) را پیدا کنید.

و یک مورد دیگر که ما آنالیز نکردیم. نشانگرها معمولاً مقادیر NULL دارند. فقط به 0 فکر کنید و نشانگرها مقدار NULL (صفر) به هیچ بخشی از حافظه نشان نمی دهند.

API ویندوز (WinAPI)

تمام برنامه های ویندوز از یک رابط ویژه برنامه نویسی WinAPI استفاده می کنند. این مجموعه ای از توابع و ساختارهای C است که برنامه شما را با ویندوز سازگار می کند.

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

ما حتی یک درصد از کل قابلیت های WinAPI را پوشش نمی دهیم. در ابتدا ، من می خواستم مطالب بیشتری بگیرم ، اما خیلی طولانی طول خواهد کشید ، و در باتلاق WinAPI ، DirectX "گرفتار شدیم. پنجره ها.

یک برنامه ویندوز ، دقیقاً مانند یک برنامه DOS ، عملکرد اصلی دارد. در اینجا این تابع WinMain نامیده می شود.

عملکرد WinMain

برنامه ویندوز از قسمت های زیر تشکیل شده است (همه اینها در WinMain اتفاق می افتد):

کلاس پنجره ایجاد و ثبت کنید. با کلاس C ++ اشتباه گرفته نشوید. WinAPI به زبان C نوشته شده است ، هیچ کلاس به معنای معمول کلمه ما وجود ندارد.
ایجاد یک پنجره برنامه.
حلقه اصلی که در آن پیامها پردازش می شوند.
پردازش پیام های برنامه به روشی پنجره. روش پنجره یک عملکرد طبیعی است.
این چهار نکته اساس برنامه ویندوز است. در طی این و درس بعدی ، ما به تفصیل به همه این موارد می پردازیم. اگر در توصیف برنامه دچار سردرگمی شدید ، به این نکات بازگردید.

حال اجازه دهید همه اینها را با جزئیات بررسی کنیم:

WinAPI: ساختار WNDCLASS

اول از همه ، شما باید متغیر ساختار WNDCLASS را ایجاد و پر کنید ، و سپس یک کلاس پنجره را بر اساس آن ثبت کنید.

این همان چیزی است که این ساختار به نظر می رسد:

کد ++ کد typedef struktur (سبک UINT؛ // سبک پنجره WNDPROC lpfnWndProc؛ // اشاره گر به رویه پنجره int cbClsExtra؛ // بایت های اضافی بعد از کلاس. همیشه 0 int cbWndExtra؛ // بایت های اضافی را بعد از نمونه پنجره قرار دهید) همیشه 0 HINSTANCE hInstance؛ / به عنوان یک پارامتر در WinMain HICON hIcon؛ // نماد برنامه HCURSOR hCursor؛ // مکان نما برنامه HBRUSH hbrBackground؛ // رنگ پس زمینه LPCTSTR lpszMenuName؛ // نام منو LPCTSTR lpszClassName؛ // نام کلاس) WNDCCASS، * PWN ؛

ساختار WNDCLASS به عنوان بخشی از WinAPI ویژگی های اصلی پنجره ایجاد شده را تعریف می کند: آیکون ها ، نوع مکان نما ماوس ، اینکه آیا پنجره منو دارد ، کدام برنامه دارای پنجره است ...

پس از پر کردن این ساختار ، می توانید یک کلاس پنجره را از آن ثبت کنید. ما در مورد کلاسهایی مانند C ++ صحبت نمی کنیم. در عوض ، می توانید فرض کنید که کلاس پنجره چنین الگویی است ، شما آن را در سیستم ثبت کرده اید ، و اکنون می توانید بر اساس این الگو چندین ویندوز ایجاد کنید. و تمام این ویندوزها دارای خصوصیاتی هستند که شما در متغیر ساختار WNDCLASS تعریف کرده اید.

WinAPI: عملکرد CreatWindow

پس از ثبت کلاس windows ، پنجره اصلی برنامه بر اساس آن ایجاد می شود (اکنون نکته دوم را شروع کرده ایم). این کار با استفاده از عملکرد CreatWindow انجام می شود. این نمونه اولیه دارد:

کد ++ کد HWND CreatWindow (LPCTSTR lpClassName ، // نام کلاس LPCTSTR lpWindowName ، // نام پنجره (نمایش داده شده در عنوان) DWORD dwStyle ، // سبک پنجره int x ، // مختصات افقی از لبه سمت چپ صفحه int ، // مختصات عمودی از لبه بالایی صفحه نمایش در nWidth ، // عرض پنجره در طول شب ، // ارتفاع پنجره HWND hWndParent ، // پنجره والدین HMENU hMenu ، // منوی HINSTANCE دسته hInstance ، // نمونه برنامه LPVOID lpParam // پارامتر ؛ همیشه تنظیم شده بر NULL).

اگر خصوصیات اصلی پنجره در کلاس پنجره (ساختار WNDCLASS) تنظیم شده باشد ، در اینجا آنها برای هر پنجره خاص تر هستند: اندازه پنجره ، مختصات ...

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

توجه داشته باشید که در اینجا انواع جدید زیادی وجود دارد. آنها در واقع همه قدیمی هستند ، فقط تعریف مجدد. به عنوان مثال: HWND یک نادیده گرفتن از نوع HANDLE است که به نوبه خود نوعی PVOID است که به نوبه خود نوعی از اعتبار * است. چقدر حقیقت را عمیقا دفن کرد! با این وجود ، نوع HWND نشانگر عدم اعتبار است.

پنجره از چند قسمت تشکیل شده است. تقریباً در هر برنامه مشاهده خواهید کرد: عنوان پنجره ، منوی سیستم (در صورت کلیک بر روی نماد برنامه در قسمت بالای سمت چپ پنجره) ، سه دکمه سیستم برای کار با پنجره: به حداقل رساندن ، گسترش به تمام صفحه و بستن. همچنین تقریباً همیشه یک فهرست در برنامه وجود دارد. فقط دومی نداریم. و ، البته ، بیشتر پنجره توسط به اصطلاح اشغال شده است. منطقه مشتری که معمولاً کاربر در آن کار می کند.

این برای حالت پنجره است. برای مدت طولانی با DiectX در پنجره تمرین خواهیم کرد - ما از حالت تمام صفحه استفاده نمی کنیم.

رسیدگی به پیام

تفاوت اصلی بین کلیه برنامه های قبلی ما با برنامه های ویندوز ، مدیریت پیام است.

به عنوان مثال ، وقتی کاربر یک کلید را روی صفحه کلید فشار می دهد ، پیامی ایجاد می شود که یک کلید فشرده شده است. این پیام سپس به برنامه کاربردی که هنگام فشار دادن کلید کلید کاربر فعال بود ، می رود.

در اینجا ما یک رویداد (یک رویداد) داریم - یک کلید فشرده شد.

یک رویداد می تواند باشد: حرکت دادن مکان نما ماوس ، تغییر فوکوس یک برنامه ، فشار دادن یک کلید صفحه کلید ، بستن یک پنجره. رویدادهای زیادی وجود دارد. خیلی! ده ها واقعه می توانند در سیستم عامل در هر ثانیه رخ دهند.

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

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

پیام ساختاری است و به نظر می رسد:

کد ++ کد typedef struktur tagMSG (HWND hwnd؛ // پنجره ای که این پیام را دریافت می کند UINT پیام ؛ // کد پیام WPARAM wParam ؛ // پارامتر LPARAM lParam ؛ // زمان پارامتر DWORD ؛ // زمانی که پیام اتفاق افتاده POINT pt؛ // مختصات نشانگر موس) MSG؛

توجه کنید که چگونه ساختارها با typedef تعریف می شوند.

برای ایجاد این ساختار می توانید از کد زیر استفاده کنید:

کد ++ کد msg.messgae \u003d\u003d 2؛ // این دو سطر از معادل msg.message \u003d\u003d WM_DESTROY است؛ // WM_DESTROY ثابت برابر است با دو

در اینجا فیلد حاوی کد پیام (نام پیام) با WM_DESTROY ثابت WM - از ویندوز پیام (پیام ویندوز) مقایسه می شود. WM_DESTROY پیامی است که با بسته شدن (نابود کردن) پنجره ایجاد می شود.

کدهای پیام با استفاده از ثابت تعریف می شوند و با WM_ پیشوند می شوند: WM_CLOSE ، WM_CREATE و غیره.

ساختار MSG شامل نوع HWND - از دسته پنجره (دسته پنجره یا دسته پنجره) است. این نوعی است که پنجره را "توصیف" می کند. این چیزی شبیه به شناسه (نام پنجره) است.

به یاد داشته باشید این کلمه - دسته (توصیف کننده ، توصیف کننده). این اصطلاح اغلب در ویندوز استفاده می شود. تقریباً تمام انواع ویندوز که از H شروع می شوند توصیف کننده ها هستند: توصیفگر آیکون ، توصیف کننده فونت ، توصیف نمونه برنامه تا آنجا که من به یاد دارم سی نفر از آنها وجود دارد.

تمام تعامل بین برنامه های کاربردی در ویندوز با استفاده از همین توصیف کننده های پنجره (HWND) انجام می شود.

یک توصیف کننده مهم دیگر - توصیف کننده برنامه (HINSTANCE اولین پارامتر WinMain است) - این یک شناسه منحصر به فرد برنامه است که به لطف آن سیستم عامل قادر نخواهد بود دو برنامه مختلف را اشتباه ببخشد. مثل بارکد است. بعداً نگاه خواهیم کرد

هر بار که کاربر عملی را انجام می دهد ، یک پیام ایجاد می شود و پر می شود: دسته پنجره ای که باید این پیام را دریافت کند تنظیم می شود ، شناسه پیام تنظیم می شود ، پارامترها پر می شوند ، زمان (جریان) پر می شود و مختصات مکان نما ماوس نشان داده می شود (ساختار را مشاهده کنید).

این پیام سپس در صف پیام سیستم عامل قرار می گیرد. هنگامی که صف به پیام ما رسید ، به پنجره مورد نظر ارسال می شود (ویندوز می داند کدام پنجره را برای ارسال هر پیام به لطف توصیف کنندگان). وقتی پیامی وارد برنامه می شود ، آن را در صف پیام پیام برنامه قرار می دهد. به محض اینکه نوبت آن رسید ، پردازش می شود.

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

روش پنجره (WndProc)

ما از لحظه ورود پیام به صف پیام برنامه ادامه می دهیم. به محض اینکه نوبت به آن رسید ، پردازش می شود. برای پردازش پیام ها ، هر برنامه باید یک عملکرد ویژه داشته باشد - یک روش پنجره. معمولاً WndProc نام دارد (برای رویه پنجره). فراخوانی رویه پنجره در حلقه اصلی برنامه قرار دارد و در هر تکرار حلقه اجرا می شود.

پیام ها (به صورت متغیرهای ساختار MSG) وارد می شوند این عملکرد به عنوان پارامترها: دسته پنجره ، شناسه پیام و دو پارامتر. توجه داشته باشید که قسمت های زمان و pt به روش پنجره منتقل نمی شوند. یعنی پیام قبلاً "تجزیه" شده است.

در داخل روش پنجره یک شاخه سوییچ وجود دارد که در آن شناسه پیام بررسی می شود. در اینجا نمونه ای از یک روش ساده پنجره (کاملاً کاربردی) آورده شده است:

کد ++ کد // هم اکنون HRESULT و __stdcall را نادیده بگیرید. بعداً آنها را بررسی خواهیم کرد HRESULT __stdcall WndProc (HWND hWnd ، پیام UINT ، WPARAM wParam ، LPARAM lParam) (سوئیچ (پیام) (مورد WM_PAINT: // کد تحویل پیام WM_PAINT برگشت 0 ؛ مورد WM_DESTROY: // کد دست زدن به پیام WM_DESTROY: // کد دست زدن به پیام WM_DESTROY: // بازگشت کد دستی پیام ) // کنترل کننده برای همه پیامهای دیگر)

و آخرین حلقه اصلی است. خیلی ساده است. هر تکرار حلقه ، صف پیام پیام برنامه را بررسی می کند. اگر پیامی در صف پیام باشد ، از صف ظاهر می شود. سپس یک روش پنجره در بدنه حلقه فراخوانی می شود تا پیام دریافت شده از صف را پردازش کند.

این ، به طور کلی ، همه چیز امروز است. در حال حاضر مشخص است که یک برنامه WinAPI بسیار پیچیده تر از یک برنامه DOS است. همانطور که در بالا نوشتم ، در درس بعدی کد یک برنامه کاری را تحلیل خواهیم کرد.

یک پروژه جدید را به عنوان یک تمرین ایجاد کنید. در پنجره New Project الگوی انتخاب کنید - Win32Project (تاکنون برنامه Win32 Console را انتخاب کرده ایم). در یکی از پنجره های زیر ، کادر کنترل Empty Project را بر روی گزینه های کنترل نشده بگذارید و IDE یک خرد خرد برنامه ایجاد می کند.

اگر با دقت به کد مربوط به پرونده project_name.cpp نگاهی بیندازید ، تمام موارد مورد بحث ما را خواهید یافت: متغیر ساختار MSG ، پر کردن ساختار WNDCLASS ، ایجاد یک پنجره با عملکرد CreatWindow ، حلقه اصلی برنامه. علاوه بر این ، فایل عملکرد WndProc را تعریف می کند. این چندین پیام را در شاخه های سوئیچ پردازش می کند: WM_COMMAND ، WM_PAINT ، WM_DESTROY. همه آن را در پرونده پیدا کنید.

علاوه بر آنچه دیدیم ، این برنامه حاوی کد اضافی زیادی است. در شماره بعدی به کد برنامه خواهیم پرداخت که در آن همه چیز غیر ضروری بریده خواهد شد. بسیار ساده تر و واضح تر از آنچه IDE تولید می کند خواهد بود.

C WinAPI مجموعه اصلی رابط های برنامه نویسی مایکروسافت (API) است که در سیستم عامل ها موجود است نسخه اولیه API Win32 نامیده شد.

مقدمه

C WinAPI یک رابط برنامه نویسی برنامه است که برای ساخت برنامه های ویندوز استفاده می شود. برای شروع ، یک کاربر تازه کار باید Windows SDK را که قبلاً با نام Platform SDK شناخته می شد ، بارگیری کند.

دارای پرونده های هدر ، کتابخانه ها ، نمونه ها ، اسناد و ابزارهایی است که برای توسعه برنامه ها استفاده می شود. API برای زبانهای برنامه نویسی C و C ++. این مستقیم ترین راه برای ایجاد برنامه های کاربردی روی سیستم عامل از سوی شرکت است.

C WinAPI را می توان به چندین بخش تقسیم کرد:

    خدمات اساسی؛

    ایمنی؛

  • رابط کاربری؛

    چند رسانه ای؛

    پوسته ویندوز؛

    خدمات شبکه

خدمات اصلی دسترسی به منابع اصلی را فراهم می کند. اینها شامل توابع C WinAPI ، سیستم های پرونده ، دستگاه ها ، پردازش ها ، موضوعات ، رجیستری و مدیریت خطا است. قلمرو امنیت رابط ها ، اشیاء و سایر عناصر برنامه نویسی را برای تأیید اعتبار ، مجوز ، رمزنگاری و سایر کارهای مرتبط با امنیت فراهم می کند. زیر سیستم گرافیکی عملکردی را برای خروجی محتوای گرافیکی به مانیتورها ، چاپگرها و سایر دستگاههای خروجی فراهم می کند. رابط کاربری امکان ایجاد ویندوز و کنترل را فراهم می کند.

مؤلفه رسانه ابزارهایی را برای کار با دستگاه های ویدیویی ، صوتی و ورودی فراهم می کند. توابع رابط Shell به برنامه ها امکان دسترسی به توابع ارائه شده توسط پوسته سیستم عامل را می دهد. خدمات شبکه دسترسی به قابلیت های شبکه ویندوز را فراهم می کند.

اجزاء

هنگام ساخت WinAPI C ، ویژگیهای اساسی ارائه شده توسط API ویندوز را در نظر بگیرید که می تواند در هفت دسته سازماندهی شود. بیایید هر یک از آنها را با جزئیات بیشتری در نظر بگیریم.

خدمات ضروری دسترسی به منابع اصلی سیستم موجود در ویندوز را فراهم می کند. مثال ها: سیستم فایل، لوازم جانبی ، فرایندها ، دسترسی به رجیستری و سیستم مدیریت استثنائی. این توابع برای سیستم های 16 بیتی در kernel.exe ، krnl286.exe یا krnl386.exe ذخیره می شوند و برای سیستم های 32 بیتی kernel32.dll و advapi32.dll ذخیره می شوند.

رابط گرافیکی دسترسی به منابع برای نمایش در مانیتورها ، چاپگرها و سایر تجهیزات جانبی را فراهم می کند. در سیستمهای 16 بیتی gdi.exe و gdi32.dll در سیستمهای 32 بیتی ذخیره شده است.

رابط کاربری وظیفه مشاهده و دستکاری عناصر اصلی مانند دکمه ها و میله های پیمایش ، بازیابی اطلاعات در مورد صفحه کلید و ماوس و عملکردهای مرتبط را دارد. این توابع در فایل user.exe در سیستمهای 16 بیتی و user32.dll comctl32.dll در سیستمهای 32 بیتی ذخیره می شوند. با شروع XP ، گروه کنترل به comctl32.dll دسته بندی شدند.

دیالوگ های عمومی - داده ها را برای باز و ذخیره فایل ها ، انتخاب رنگ و قلم نمایش می دهد. آنها در comdlg.dll در سیستمهای 16 بیتی و comdlg32.dll در سیستمهای 32 بیتی یافت می شوند.

ویندوز شل یک جزء WinAPI است که به برنامه ها امکان دسترسی به عملکردهای ارائه شده توسط پوسته سیستم عامل را می دهد.

خدمات شبکه دسترسی به قابلیت های مختلف شبکه ای سیستم عامل را فراهم می کند. اجزاء فرعی آن شامل NetBIOS ، Winsock ، RPC است. در نسخه های قدیمی تر - NetDDE.

نسخه ها

Win16 ، Win32 و Win32s مجموعه ای استاندارد از مؤلفه ها هستند که نرم افزار برنامه را قادر می سازد از قابلیت های سیستم عامل های مختلف ویندوز استفاده کند.

Win32 ، جانشین Win16 ، در سال 1993 در محصولات 32 بیتی ویندوز مانند Windows NT ، 2000 ، 95 معرفی شد. این رابط نرم افزار توسط سه کتابخانه نرم افزار اجرا شده است: Kernel32.dll ، User32.dll و GDI32.dll2. همان ویژگی های Win32 در کلیه محصولات ویندوز موجود است و بسته به محصول ، استفاده از برخی ویژگی ها ممکن است منجر به خطای سرویس شود.

قابلیت های Win32 شامل قابلیت همکاری بین برنامه ها ، کنترل فرآیند ، شبکه های رایانه ای ، پرونده ها ، چاپگرها ، سرورها و درگاه های ارتباطی است.

مشخصات

C WinAPI یک مشخصات انتزاعی از یک رابط برنامه نویسی برای یک عامل است سیستم های ویندوز... شامل اعلامیه های عملکرد ، اتحادیه ها ، ساختارها ، انواع داده ها ، ماکروها ، ثابت ها و سایر عناصر برنامه نویسی است. WinAPI به صورت اصلی شرح داده شده است و در هدر ویندوز C. یافت می شود اجرای رسمی توابع WinAPI در کتابخانه های لینک پویا (DLL) است: به عنوان مثال ، kernel32.dll ، user32.dll ، gdi32.dll یا shell32.dll در فهرست سیستم. پیاده سازی های شخص ثالث از ویندوز API وجود دارد: در درجه اول پروژه شراب و پروژه ReactOS.

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

پله ج

Pelles C یک برنامه رایگان و بهترین کامپایلر C و محیط توسعه یکپارچه (IDE) برای زبان برنامه نویسی C است. پشتیبانی از ویندوز 32 بیتی (x86) و ویندوز 64 بیتی (x64). هر دو استاندارد C99 و C11 را پیاده سازی می کند. Pelles C دارای ویرایشگر منبع داخلی ، bitmap ، آیکون و ویرایشگر مکان نما و ویرایشگر hex dump است. این برنامه توسط توسعه دهنده سوئدی پل Orinius ساخته شده است. نام کامپایلر نام نویسنده آن است. همراه با SDK است ، بنابراین برنامه نویس می تواند بلافاصله ساخت برنامه های کاربردی را بدون نصب بیشتر شروع کند.

خطای معماری هدف

برای ایجاد برنامه های Windows API ، باید پسوندهای Microsoft را فعال کنید. آنها به طور پیش فرض غیرفعال شده اند و این باعث می شود کامپایلر پیام خطای زیر را صادر کند ، که نمونه ای از خراب WinAPI C: fatal error # 1014: #error: "معماری هدفمند" نیست. برای فعال کردن برنامه های افزودنی مایکروسافت ، به گزینه های پروژه بروید و برگه کامپایلر را انتخاب کنید. در این برگه ، کادر فعال کردن "فعال کردن برنامه های افزودنی Microsoft" را فعال کنید.

MSDN

این پورتال اصلی برای توسعه ویندوز است. این مجموعه عظیمی از مطالب مربوط به توسعه برنامه های کاربردی با استفاده از ابزارهای مایکروسافت است. این کامل ترین پایگاه داده به همراه اسناد برای توسعه برنامه های دسک تاپ و لیستی از API های ویندوز است.

استفاده از DLL ها در WinAPI C

کتابخانه مشترک کنترل دسترسی به ویژگی های سیستم عامل پیشرفته مانند نوار وضعیت ، میله پیشرفت ، نوار ابزار و زبانه ها را فراهم می کند. این دستورات در commctrl.dll در سیستمهای 16 بیتی و comctl32.dll یافت می شوند و با رابط کاربری گروه بندی می شوند.

DLL یک فرمت فایل کتابخانه لینک پویا است که برای ذخیره چندین کدها و مراحل مختلف استفاده می شود برنامه های ویندوز... پرونده های DLL به گونه ای ایجاد شده اند که چندین برنامه می توانند همزمان از اطلاعات خود استفاده کنند و به حافظه کمک می کنند. به کاربر اجازه می دهد تا رمزگذاری چندین برنامه را به یکباره و بدون تغییر آنها ویرایش کند. DLL ها را می توان با استفاده از MSIL Disassembler یا DLL برای Lib 3.00 به استاتیک تبدیل کرد.

به عنوان یک API ویندوز ، WinAPI بسیاری از ویژگی های قدرتمند را فراهم می کند که به شما امکان می دهد برنامه های خود را ایجاد کنید ، از کار با فایل ساده گرفته تا ایجاد یک رابط گرافیکی برای برنامه نویسی درایورهای سطح پایین.

قبل از شروع برنامه نویسی در WinAPI ، باید محیط را برای کد خود در ویندوز تنظیم کنید. از آنجا که نیست توزیع لینوکس، این یک کامپایلر داخلی برای برنامه های کاربردی ساختمان ندارد. گزینه های زیر را برای تهیه کد خود در نظر بگیرید:


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

ویندوز API (رابط برنامه نویسی برنامه) یک رابط برنامه نویسی سیستم در حالت کاربر برای خانواده ویندوز سیستم های عامل است. قبل از نسخه های 64 بیتی ویندوز ، API برای نسخه های 32 بیتی از سیستم عامل های ویندوز با نام Win32 API خوانده می شد تا آن را از 16 بیتی اصلی متمایز کند نسخه های ویندوز API (که به عنوان واسط برنامه نویسی نسخه های اولیه 16 بیتی ویندوز خدمت کرده است).

API ویندوز از چندین هزار کارکرد فراخوانی تشکیل شده است که به دو دسته اصلی زیر تقسیم می شوند:

  • خدمات پایه.
  • خدمات کامپوننت
  • خدمات رابط کاربر.
  • خدمات گرافیکی و چندرسانه ای.
  • پیام رسانی و همکاری.
  • شبکه سازی
  • خدمات وب.

برای توضیحات در مورد WindowsAPI ، به اسناد مربوط به WindowsSoftwareDevelopmentKit (SDK) مراجعه کنید. این اسناد در www.msdn.microsoft.com موجود است. همچنین با تمام سطوح اشتراک در Microsoft DeveloperNetwork (MSDN) برای توسعه دهندگان گنجانده شده است.

Microsoft .NET Framework شامل یک کتابخانه کلاس به نام کتابخانه چارچوب کلاس (FCL) و زبان مشترک زمان اجرا (CLR) است. CLR دارای ویژگی هایی برای گردآوری به موقع ، بررسی نوع ، جمع آوری زباله و ایمنی دسترسی به کد است. با ارائه این ویژگی ها ، CLR یک محیط توسعه را فراهم می کند که بهره وری برنامه نویس را بهبود می بخشد و رایج ترین خطاهای برنامه نویسی را کاهش می دهد.

CLR به عنوان یک سرور کلاسیک COM پیاده سازی می شود ، کدی که برای آن در حالت Windows DLL استاندارد برای حالت کاربر قرار دارد. تقریباً کلیه مؤلفه های چهارچوب .NET به عنوان پیاده سازی می شوند ویندوز استاندارد DLL حالت کاربر در بالای توابع ویندوز مدیریت نشده ویندوز API پوشانده شده است. (هیچ یک از اجزای سازنده .NET Framework در حالت هسته اجرا نمی شود.) رابطه بین این مؤلفه ها در شکل نشان داده شده است.

خدمات ، توابع و برنامه های استاندارد.

برخی اصطلاحات در اسناد کاربر Windows و مستندات برنامه در متن های مختلف دارای معانی مختلفی هستند. به عنوان مثال ، کلمه سرویس می تواند به یک روال قابل تماس در سیستم عامل ، درایور دستگاه یا یک فرآیند سرویس اشاره کند. دقیقاً چه معنی این اصطلاحات در لیست زیر نشان داده شده است:

  • توابع API ویندوز... روال های تماس پذیرفته مستند در WindowsAPI. به عنوان مثال CreatProcess ، CreatFile و GetMessage.
  • خدمات سیستم بومی (یا تماس های سیستم)... خدمات زیربنایی بدون سند در سیستم عامل که هنگام اجرای در حالت کاربر فراخوانی می شوند. به عنوان مثال ، NtCreateUserProcess یک سرویس داخلی است که عملکرد Windows CreatProcess برای ایجاد یک فرآیند جدید از آن استفاده می کند.
  • توابع پشتیبانی هسته (یا فرعی)... روال های موجود در سیستم عامل ویندوز که فقط از حالت هسته می توان آنها را فراخوانی کرد. به عنوان مثال ، ExAllocatePoolWithTag روالي است كه توسط درايور دستگاه براي تخصيص حافظه از پشته هاي سيستم ويندوز (به نام استخر) خوانده مي شود.
  • خدمات Windows فرآیندهای شروع شده توسط مدیر کنترل خدمات (Windowsservicecontrolmanager). به عنوان مثال ، سرویس Task Manager به عنوان یک فرآیند حالت کاربر شروع می شود که از دستور at پشتیبانی می کند (مشابه دستورات UNIX در یا cron).
  • DLL (کتابخانه های لینک پویا)... مجموعه ای از روال های تماس پذیر با هم به عنوان یک فایل باینری که توسط برنامه هایی که از آن روال استفاده می کنند می توانند بطور پویا بارگیری شوند ، پیوند دارند. مثالها شامل Msvcrt.dll (یک کتابخانه زمان اجرا برای برنامه های C) و Kernel32.dll (یکی از کتابخانه های زیر سیستم ویندوز API). DLL ها به طور گسترده توسط مؤلفه ها مورد استفاده قرار می گیرند برنامه های Windowsکه در حالت کاربر اجرا می شود. مزیتی که DLL ها نسبت به کتابخانه های ایستا دارند این است که می توان آنها را توسط چندین برنامه به طور هم زمان استفاده کرد ، و ویندوز اطمینان می دهد که فقط یک نسخه از کد DLL در حافظه برای برنامه هایی است که DLL را ارجاع می دهند. توجه داشته باشید که مجامع دات نت غیر اجرایی به عنوان DLL ها وارد می شوند ، اما بدون هیچ روال صادراتی. CLR برای دسترسی به انواع و اعضای کلاس مناسب ، فراداده کامپایل شده را تجزیه می کند.

تاریخچه API Win32.

جالب اینجاست که Win32 قرار نبود رابط اصلی برنامه نویسی برای آنچه در آن زمان Windows NT نامیده می شد باشد. از آنجا که پروژه Windows NT به عنوان جایگزینی برای OS / 2 نسخه 2 شروع شد ، رابط اصلی برنامه نویسی سیستم عامل 32 بیتی OS / 2 PresentationManagerAPI بود. اما یک سال بعد از شروع پروژه ، ویندوز مایکروسافت 3.0 در نتیجه ، مایکروسافت جهت را تغییر داد و ویندوز NT را جایگزین آینده ای برای خانواده محصول ویندوز کرد ، نه جایگزینی برای سیستم عامل / 2. در این راستا ، لازم است که مشخصات API ویندوز را تدوین کنید - قبل از آن ، در ویندوز 3.0 ، API فقط به عنوان یک رابط 16 بیتی وجود داشته است.

اگرچه ویندوز API برای معرفی بسیاری از ویژگی های جدید که در ویندوز 3.1 در دسترس نیست ، قرار شد ، مایکروسافت تصمیم گرفت تا API جدید را تا حد امکان سازگار با نام ها ، معانی و انواع داده ها با API ویندوز 16 بیتی برای سهولت در بارگذاری ویندوزهای 16 بیتی موجود باشد. برنامه های کاربردی در Windows NT. این ، در حقیقت ، این واقعیت را توضیح می دهد که ممکن است بسیاری از نام های توابع و رابط ها متناقض به نظر برسند: این برای اطمینان از سازگاری لازم بود ویندوزهای جدید API با API ویندوز 16 بیتی قدیمی.

زنگ

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