Ինչպես ստանալ նկարագրիչ

Բովանդակություն:

Ինչպես ստանալ նկարագրիչ
Ինչպես ստանալ նկարագրիչ

Video: Ինչպես ստանալ նկարագրիչ

Video: Ինչպես ստանալ նկարագրիչ
Video: Ինչպես է սովորում մարդը | Սերոբ Խաչատրյան #EdcampArmenia #ՈւսուցիչըԿարևորԷ 2024, Մայիս
Anonim

Windows օպերացիոն համակարգերի կիրառական ծրագրավորման միջերեսը ներկայացված է մի շարք գործառույթներով: Երբ դրանք կանչվում են, կարող են ստեղծվել տարբեր օբյեկտներ (ֆայլեր, գործընթացներ, թելեր, համաժամացման օբյեկտներ և այլն): Այս օբյեկտներին բավականաչափ վերացական և միասնական հասանելիություն ապահովելու համար դրանց նույնականացումը կատարվում է նկարագրիչների `« անանձնական »թվային արժեքների միջոցով:

Ինչպես ստանալ նկարագրիչ
Ինչպես ստանալ նկարագրիչ

Անհրաժեշտ է

  • - ծրագրավորող լեզվից թարգմանիչ, որը թույլ է տալիս օգտագործել Windows API- ն.
  • - հնարավոր է Windows Platform SDK:

Հրահանգներ

Քայլ 1

Ձեռք բերեք պատուհանի բռնակներ: Դա անելու շատ եղանակներ կան: Exactշգրիտ մեթոդը կախված է վերջնական նպատակից:

Պատուհան ստեղծելու համար օգտագործեք CreateWindow կամ CreateWindowEx API- ներ: Նրանք վերադարձնում են հաջողության բռնակ, իսկ անհաջողության ՝ NULL:

Վերևի պատուհանների և մանկական պատուհանների որոնում ՝ տարբեր պարամետրերով, համապատասխանաբար, օգտագործելով FindWindow և FindWindowEx: Հաջող որոնման արդյունքում կստացվի պատուհանի բռնակը:

Թվարկեք պատուհանները EnumWindows, EnumChildWindows, EnumThreadWindows գործառույթներով: Գտնված պատուհանների բռնակները կփոխանցվեն որպես պարամետր հետադարձ զանգի գործառույթին:

Գտեք բռնիչը էկրանի որոշակի դիրքում գտնվող պատուհանի մոտ: Callանգահարեք գործառույթներից մեկը ՝ WindowFromPoint, ChildWindowFromPoint կամ ChildWindowFromPointEx:

Քայլ 2

Ձեռք բերեք գործընթացի բռնակներ: Ստեղծեք նոր գործընթաց ՝ զանգահարելով CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW կամ CreatProcessWithLogonW API գործառույթներ: Նրանք բոլորը մի գործընթաց են վերադառնում PROCESS_INFORMATION կառուցվածքի hProcess դաշտի նոր գործընթացին, որի ցուցիչը պետք է փոխանցվի նրանց որպես վերջին պարամետր:

Գտեք գործընթացի բռնակը իր հայտնի նույնացուցիչով: Օգտագործեք OpenProcess զանգը: Գործող բոլոր գործընթացների նույնականությունները կարելի է ձեռք բերել, օրինակ `ToolTop գրադարանի CreateToolhelp32Snapshot, Process32First և Process32Next գործառույթների միջոցով:

Վերցրեք ընթացիկ գործընթացի կեղծ կտրոնը `օգտագործելով GetCurrentProcess գործառույթը:

Քայլ 3

Ստացեք թելերի նկարագրիչները: CreateThread- ի և CreateRemoteThread- ի գործառույթները, համապատասխանաբար, թելեր են ստեղծում իրենց և ուրիշի գործընթացներում `վերադարձնելով նրանց բռնակները: Կարող եք բացել գոյություն ունեցող շարանը ՝ օգտագործելով դրա նույնացուցիչը և ստանալու համապատասխան բռնիչը ՝ օգտագործելով OpenThread գործառույթը: Ընթացիկ հոսքի կեղծ-բռնիչը վերադարձվում է, երբ կանչվում է GetCurrentThread- ը:

Քայլ 4

Ֆայլերի, գրացուցակների, ֆիզիկական սկավառակների, սկավառակների ծավալների, կոնսոլների, կապի ռեսուրսների (I / O պորտեր), փոստի բնիկների և անվանված խողովակների նկարագրիչները կարելի է ձեռք բերել ՝ զանգահարելով մեկ գործառույթ ՝ CreatFile:

Քայլ 5

Ֆայլից հիշողություն քարտեզագրող օբյեկտի նկարագրիչները վերադարձվում են CreatFileMapping և OpenFileMapping զանգերով:

Քայլ 6

CreateMutex, CreateSemaphore և CreateEvent գործառույթները ստեղծում են, իսկ OpenMutex, OpenSemaphore և OpenEvent գործառույթները բացում են առկա համաժամացման օբյեկտները (mutexes, semaphores և events): Նրանք բոլորը վերադարձնում են նկարագրիչները:

Քայլ 7

GDI- ի բոլոր օբյեկտները (ինչպիսիք են սարքի համատեքստերը, տառատեսակները, խոզանակները, մատիտները, ապարատային կախված և անկախ բիտման քարտեզները, DIB բաժինները և այլն) շահարկվում են իրենց նկարագրիչների միջոցով: GDI օբյեկտների ստեղծման գործառույթները բազմաթիվ են, դրանց վերաբերյալ տեղեկատվության համար պետք է դիմեք MSDN բաժնում:

Քայլ 8

Մի գործընթացում ստացված նկարագրիչը, որպես կանոն, չի կարող օգտագործվել մեկ այլ գործընթացում: Այնուամենայնիվ, որոշ դեպքերում հնարավոր է ձեռք բերել կրկնօրինակ նկարագրիչ, որը համապատասխանում է առաջնային օբյեկտին: Կանչը կրկնօրինակելու համար զանգահարեք DuplicateHandle API: Սա կարող է օգտագործվել, օրինակ, անանուն համաժամացման օբյեկտներ կամ ալիքներ բաժանելու համար բազմաթիվ գործընթացների միջև:

Խորհուրդ ենք տալիս: