Windows operatsion tizimlarining dasturiy dasturlash interfeysi funktsiyalar to'plami bilan ifodalanadi. Ular chaqirilganda turli xil ob'ektlar (fayllar, jarayonlar, oqimlar, sinxronizatsiya ob'ektlari va boshqalar) yaratilishi mumkin. Ushbu ob'ektlarga etarlicha mavhum va yagona kirishni ta'minlash uchun ularni identifikatsiya qilish deskriptorlar - "shaxssiz" raqamli qiymatlar yordamida amalga oshiriladi.
Kerakli
- - Windows API dan foydalanishga imkon beradigan dasturlash tilidan tarjimon;
- - ehtimol Windows Platform SDK.
Ko'rsatmalar
1-qadam
Deraza tutqichlarini oling. Buning ko'p usullari mavjud. Aniq usul yakuniy maqsadga bog'liq.
Oyna yaratish uchun CreateWindow yoki CreateWindowEx API-laridan foydalaning. Ular muvaffaqiyatga erishish qobiliyatini, muvaffaqiyatsizlikka esa NULLni qaytaradilar.
FindWindow va FindWindowEx funktsiyalaridan foydalangan holda yuqori darajadagi derazalarni va bolalar oynalarini turli xil parametrlar bo'yicha qidiring. Muvaffaqiyatli qidirishda deraza oynasi olinadi.
EnumWindows, EnumChildWindows, EnumThreadWindows funktsiyalari bilan oynalarni ro'yxatga olish. Topilgan oynalarning tutqichlari qayta qo'ng'iroq qilish funktsiyasiga parametr sifatida uzatiladi.
Ekrandagi ma'lum bir joyda joylashgan oynaning tutqichini toping. Funksiyalardan birini chaqiring: WindowFromPoint, ChildWindowFromPoint yoki ChildWindowFromPointEx.
2-qadam
Jarayon tutqichlarini oling. CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW yoki CreateProcessWithLogonW API funktsiyalarini chaqirib, yangi jarayon yarating. Ularning barchasi PROCESS_INFORMATION strukturasining hProcess maydonidagi yangi jarayonga dastakni qaytaradi, ko'rsatgich ularga so'nggi parametr sifatida uzatilishi kerak.
Jarayonning dastagini uning ma'lum identifikatori orqali toping. OpenProcess qo'ng'irog'idan foydalaning. Barcha ishlaydigan jarayonlarning identifikatorlarini, masalan, Tool Help kutubxonasining CreateToolhelp32Snapshot, Process32First va Process32Next funktsiyalari yordamida olish mumkin.
GetCurrentProcess funktsiyasi yordamida joriy jarayonning psevdo tutqichini oling.
3-qadam
Iplarning tavsiflovchilarini oling. CreateThread va CreateRemoteThread funktsiyalari tegishlicha o'z navbatida o'zlarining va boshqa birovning ishlarida iplarni hosil qiladi. Siz identifikatori yordamida mavjud ipni ochishingiz va OpenThread funktsiyasidan foydalangan holda tegishli tutqichni olishingiz mumkin. GetCurrentThread chaqirilganda joriy oqimning psevdo-dastasi qaytariladi.
4-qadam
Fayllar, kataloglar, fizik disklar, disk hajmi, konsollar, aloqa manbalari (kiritish-chiqarish portlari), pochta uyalari va nomlangan quvurlar uchun tavsiflovchilarni CreateFile bitta funktsiyasini chaqirish orqali olish mumkin.
5-qadam
Fayllarni xotiraga xaritalash moslamalari tavsiflovchilari CreateFileMapping va OpenFileMapping-ga qo'ng'iroqlar orqali qaytariladi.
6-qadam
CreateMutex, CreateSemaphore va CreateEvent funktsiyalari yaratadi va OpenMutex, OpenSemaphore va OpenEvent funktsiyalari mavjud sinxronizatsiya ob'ektlarini (mutekslar, semaforalar va hodisalar) ochadi. Ularning barchasi identifikatorlarni qaytaradilar.
7-qadam
Barcha GDI moslamalari (masalan, qurilmalar kontekstlari, shriftlar, cho'tkalar, qalamlar, qurilmaga bog'liq va mustaqil bitmapalar, DIB bo'limlari va boshqalar) ularning tavsiflovchilari orqali boshqariladi. GDI moslamalarini yaratish funktsiyalari juda ko'p va ular haqida ma'lumot olish uchun MSDN bo'limiga murojaat qilish kerak.
8-qadam
Bir jarayonda olingan deskriptor, qoida tariqasida, boshqasida ishlatilishi mumkin emas. Shu bilan birga, ba'zi hollarda asosiy ob'ektga mos keladigan takroriy identifikatorni olish mumkin. Tutqichni takrorlash uchun DuplicateHandle API-ga qo'ng'iroq qiling. Bu, masalan, noma'lum sinxronizatsiya moslamalarini yoki kanallarni bir nechta jarayonlar o'rtasida bo'lishish uchun ishlatilishi mumkin.