рдмреНрд▓реИрдХ рд╣реЛрд▓ рдХреЗ рдмрд┐рдирд╛ рд╡реАрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░ рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ

"рдореЗрд░реЗ рдлреЛрди / рдХреИрд▓рдХреБрд▓реЗрдЯрд░ / рдШрдбрд╝реА рдПрдЪрдбреА рд╡реАрдбрд┐рдпреЛ рдкреНрд▓реЗрдмреИрдХ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореМрдЬреВрджрд╛ рдЪрд░реНрдЪрд╛рдУрдВ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл, рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рддрдереНрдп рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЧрд┐рд░ рдЧрдпрд╛ рд╣реИ: 10 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рдереА, рд╡реАрдбрд┐рдпреЛ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдЧрддрд┐ рднреА рдирд╣реАрдВ рдереА (рдЧрд░реНрдо рдЯреНрдпреВрдм рдПрдордкреАрдИрдЬреА рдЕрд▓рдЧ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рдмрд╛рдж рдбрд┐рдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рдбрд┐рдХреЛрдбрд░реНрд╕; рдмрд╛рдХреА рдХреЛ рдореМрдЬреВрджрд╛ рд╕реАрдкреАрдпреВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рд╕реЗ рдмрд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛), рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдЗрд╕рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЧрддрд┐ред рдорд▓реНрдЯреАрд╕реНрдХреНрд░реАрди рдкрд░реНрдпрд╛рд╡рд░рдг рдПрдХ рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХ рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдорд╛рд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдВрдбреЛрдЬрд╝ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рд╕рдмрд╕реЗ рд╡рд┐рдЪрд┐рддреНрд░ рддрд░реАрдХреЗ рд╕реЗ рдУрд╡рд░рд▓реИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рдереАред рд╡реАрдбрд┐рдпреЛ рдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдм рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░рдВрдЧ (рдЖрдорддреМрд░ рдкрд░ рдмрд╣реБрдд рдЧрд╣рд░рд╛ рдореИрдЬреЗрдВрдЯрд╛) рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЧрдИ рдереА, рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рд╡реАрдбрд┐рдпреЛ рдХреЛ "рдЕрдВрдХрд┐рдд" рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рдерд╛ред рдЫрд╡рд┐ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЗрд╕рдиреЗ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдкрд┐рдХреНрд╕рд▓ рдХреЛ рдбрд┐рдХреЛрдб рдХрд┐рдП рдЧрдП рдлреНрд░реЗрдо рдХреЗ рд╕рдВрдЧрдд рдкрд┐рдХреНрд╕рд▓ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ред рдЖрд╡реЗрджрди рдореЗрдВ рдЕрдм рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдПрдХ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рд╕реЗ рдлрд╝реНрд░реЗрдо рдХреЛ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдХреЙрдкреА рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдУрд╡рд░рд▓реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ рдФрд░ рдмрд╣реБрдд рдЬрд▓реНрджреА рдЗрд╕реЗ рд╕рднреА рдЙрдкрднреЛрдХреНрддрд╛ рдФрд░ рдкреЗрд╢реЗрд╡рд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрд╛рд░реНрдб рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛ред



рд╕рдВрднрд╡рддрдГ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╕реНрдпрд╛ рдЬреЛ рдЗрд╕ рддрдХрдиреАрдХ рдиреЗ рд▓рд╛рдИ рдереА, рд╡рд╣ рд╡реАрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░ рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд▓реЗрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рд╕реЗ рдлреНрд░реЗрдо рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдмрд▓реНрдХрд┐ рдмрд╣реБрдд рд╣реА рдЧрд╣рд░рд╛ рдмреИрдВрдЧрдиреА рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╣реЛрдЧрд╛ред

рдЫрд╡рд┐



Workarounds рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рддреНрд╡рд░рдг (рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдФрд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрддрд░ рдкрд░) рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд░рд╣реЗ рдереЗ, рдЦрд┐рд▓рд╛рдбрд╝реА рдХреА рдПрдХ рдФрд░ рдкреНрд░рддрд┐ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ (рдпрд╣ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд▓реЗ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдЧреА, рдФрд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреА рджреВрд╕рд░реА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреНрд▓рд╛рд╕рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реЛрдЧрд╛) рдФрд░, рдЕрдЧрд░ рдпрд╣ рд╣реИ рд╣рдо DirectShow рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдкрд░ рдирд┐рд░реНрдорд┐рдд рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдлрд╝рд┐рд▓реНрдЯрд░-рд░реЗрдВрдбрд░рд░ рдХреЛ рдПрдХ рдРрд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдУрд╡рд░рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред



рд▓рдЧрднрдЧ рд╕рднреА рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреИрдкреНрдЪрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдкрд╣рд▓реЗ рджреЛ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдереЗ, рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рдереЗред рдмрд╛рдХреА рдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рдерд╛ рдФрд░ рдкреНрд░рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛, рдЕрд░реНрдерд╛рддреН, рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдХреЗ рдЖрдВрддреНрд░реЛрдВ рдореЗрдВ рд╕рдорд╛рди рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рд╕реЗ рд╕реАрдзреЗ рдПрдХ рд╡реАрдбрд┐рдпреЛ рдлреНрд░реЗрдо рдХреА рдПрдХ рдЫрд╡рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗред



рдиреАрдЪреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдзрд┐ DirectShow рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреА рд╣реИред



рд╣рдо рд╣рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд░реНрдХрд▓ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░рд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рд╡реАрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░ рдЬреЛ рдлрд╝реНрд░реЗрдо рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рдЬрд╛рдирддрд╛ рд╣реИ, рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрддреЗ рд╕реНрдерд╛рди рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреВрд╕рд░реЗ, рдбреЗрдЯрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдЖрд░рдЬреАрдмреА рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рд░рдВрдЧ рдореЙрдбрд▓ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд░реВрдк рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рддреАрд╕рд░рд╛, рдЖрдкрдХреЛ рдПрдХ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рдЦреБрдж рдХреЛ "рдкреНрд░рд┐рдВрдЯ" рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдПрдХ рдмрд╣реБ-рдЦрд┐рдбрд╝рдХреА рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рднреА рдЖрдХрд░реНрд╖рдг рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдПред



рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдп рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдПрдХ рдХреЛ рдЪреБрдирд╛: рд╣реБрдХ (рд╣реБрдХ) рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рд╣реБрдХ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдкрддреЗ рдХреА рдЬрдЧрд╣ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:



void WINAPI SetHook(HWND hWnd)

{

if (!g_hhHook)

{

g_hhHook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)HookProc, hInst, 0);

}

}




* This source code was highlighted with Source Code Highlighter .








рд╣реБрдХ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдиреЗ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдкрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдорд╛рдирдХ "рдХреБрдЫ рднреА рдирд╣реАрдВ" рд╣реИред



LRESULT WINAPI HookProc( int nCode, WPARAM wParam, LPARAM lParam)

{

if (nCode < 0)

{

return CallNextHookEx(g_hhHook, nCode, wParam, lParam);

}

// - , -

return CallNextHookEx(g_hhHook, nCode, wParam, lParam);

}




* This source code was highlighted with Source Code Highlighter .








рдореБрдЭреЗ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рд╣реИ рдХрд┐ рдкрддрд╛ рд╕реНрдерд╛рди рдореЗрдВ рдПрдХ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ DLL рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВред рдЖрдЧреЗ рдХрд╛ рд╕рднреА рдХреЛрдб рднреА рдЙрд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред



рдЕрдм рдЖрдЗрдпреЗ рдЗрдореЗрдЬ рдкрд░ рдЖрддреЗ рд╣реИрдВред рд╕рднреА рдлрд╝рд┐рд▓реНрдЯрд░ рд░реЗрдВрдбрд░рд░реНрд╕ рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рдЪрд┐рддреНрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рддрд░реАрдХреЗ рдирд╣реАрдВ рд╣реИрдВ: GDI, DirectDraw рдФрд░ Direct3Dред рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд▓реЗрддреЗ рд╕рдордп рдкрд╣рд▓рд╛ рдФрд░ рддреАрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░рд╛ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реА рд░реБрдЪрд┐ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред



рдПрдХ рд╣реА рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдЬрд┐рд╕рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЙрд╕реЗ IDirectDrawSurface



рдСрдмреНрдЬреЗрдХреНрдЯ (рдЙрд░реНрдл " IDirectDrawSurface



рд╕рд░рдлреЗрд╕") рджреНрд╡рд╛рд░рд╛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ DDSCAPS_OVERLAY



рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, IDirectDrawSurface::Flip



рдЫрд╡рд┐ рдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдХреЙрд▓ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рд╡реАрдбрд┐рдпреЛ рдлреНрд░реЗрдо рдХреА рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП , рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд┐рдВрдЧ рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рд╕рдордп рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреА рд╡рд┐рдзрд┐ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред рдПрдХрдорд╛рддреНрд░ рдмрд╛рдзрд╛: GetProcAddress



рдХреЙрд▓ рдХрд░рдХреЗ COM рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рдзрд┐ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЗрддрдирд╛ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдбрд╛рдпрд░реЗрдХреНрдЯрдбреНрд░рд╛ рд╕рддрд╣ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрддреЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ Flip



рд╡рд┐рдзрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



// IDirectDraw



LPDIRECTDRAW pDirectDraw;

hr = DirectDrawCreate(NULL, (&pDirectDraw), NULL);



hr = pDirectDraw->SetCooperativeLevel(NULL, DDSCL_NORMAL);



DDSURFACEDESC desc = {0};

desc.dwSize = sizeof (desc);

desc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;

desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;

desc.dwWidth = 100;

desc.dwHeight = 100;



// IDirectDrawSurface



LPDIRECTDRAWSURFACE Surf;

hr = pDirectDraw->CreateSurface(&desc, &Surf, NULL);



void *pFlip = (*reinterpret_cast< void ***>(Surf))[11]; // 11 - IDirectDrawSurface::Flip vtable

ptrdiff_t pDDSFlipDiff = reinterpret_cast<ptrdiff_t>(pFlip) - reinterpret_cast<ptrdiff_t>(GetModuleHandle(_T( "ddraw.dll" )));




* This source code was highlighted with Source Code Highlighter .








рдУрд╡рд░рд▓реЗ рд╕рддрд╣ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ IDirectDrawSurface::UpdateOverlay



рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕рдХреА рд╡рд┐рдзрд┐ рд╕рдВрдЦреНрдпрд╛ 33 рд╣реИред

рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдореВрд▓ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рддрд░реАрдХреЛрдВ рдХреЗ рдкрддреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ Flip



рдФрд░ UpdateOverlay



рддрд░реАрдХреЛрдВ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рддрд░реАрдХреЗ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:



typedef HRESULT (WINAPI *FUNC_IDIRECTDRAWSURFACEFLIP)(IDirectDrawSurface *This, LPDIRECTDRAWSURFACE lpDDSurfTargetOverride, DWORD dwFlags);



typedef HRESULT (WINAPI *FUNC_IDIRECTDRAWSURFACEUPDATEOVERLAY)(IDirectDrawSurface *This, LPRECT lpSrcRect, LPDIRECTDRAWSURFACE lpDDDestSurface, LPRECT lpDestRect, DWORD dwFlags, LPDDOVERLAYFX lpDDOverlayFx);




* This source code was highlighted with Source Code Highlighter .








рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ Flip



рдФрд░ UpdateOverlay



рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╡рд┐рдкрд░реАрдд, COM рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХ рдЗрд╕ рд╡рд┐рдзрд┐ рд╕реЗ рдпреБрдХреНрдд рд╣реИ рдЬреЛ рддрд░реНрдХреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдкрд╣рд▓рд╛ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ COM рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдердбреНрд╕ рдореЗрдВ рдХреЙрд▓ рдкреНрд░рдХрд╛рд░ рдХрд╛ thiscall



ред



IDirectDrawSurface7::Flip



рдФрд░ IDirectDrawSurface7::UpdateOverlay



рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реА рддрд░рд╣ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ IDirectDrawSurface7::UpdateOverlay



рдбрд╛рдпрд░реЗрдХреНрдЯрдбреНрд░рд╛ рдХреЗ рд╕рд╛рддрд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред



рдЗрди рддреИрдпрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж, рд╕рд╣рд╛рдпрдХ рд╕рддрд╣ рдФрд░ DirectDraw рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, UpdateOverlay



рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджреЗрдЦреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╕рд╛рд░реА рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



HRESULT WINAPI Patch_UO(IDirectDrawSurface *This, LPRECT lpSrcRect, LPDIRECTDRAWSURFACE lpDDDestSurface, LPRECT lpDestRect, DWORD dwFlags, LPDDOVERLAYFX lpDDOverlayFx)

{

DetourRestore(True_UO); //

HRESULT res = True_UO(This, lpSrcRect, lpDDDestSurface, lpDestRect, dwFlags, lpDDOverlayFx);

DetourRenew(True_UO); //



DDCOLORKEY ck = {0};

if (dwFlags & DDOVER_KEYDEST) //

{

DDCOLORKEY ck2 = {0};

lpDDDestSurface->GetColorKey(DDCKEY_DESTOVERLAY, &ck2);

g_ColorKey = ck2.dwColorSpaceHighValue;

}

if (dwFlags & DDOVER_KEYDESTOVERRIDE) //

{

if (lpDDOverlayFx != NULL)

{

ck = lpDDOverlayFx->dckDestColorkey;

g_ColorKey = ck.dwColorSpaceHighValue;

}

}



if (lpDestRect != NULL)

{

CopyMemory(&g_OverlayRect, lpDestRect, sizeof (RECT));

}



return res;

}




* This source code was highlighted with Source Code Highlighter .








рдпрд╣ рдХреЛрдб рдЙрд╕реА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд░рдВрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡реАрдбрд┐рдпреЛ рд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдЧрд╣рд░реЗ рдмреИрдВрдЧрдиреА рд░рдВрдЧ (0x100010) рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдИ рдЦрд┐рд▓рд╛рдбрд╝реА рдЗрд╕ рдореВрд▓реНрдп рдХреЛ рдЖрдкрдХреЗ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░, рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ, рд░рдВрдЧред рдпрд╣ рдорд╛рди рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЭрдВрдбреЗ рдХреА рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА, рд╣рдо рдЖрдпрдд рдХреЗ рдЖрдХрд╛рд░ рдФрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкреГрд╖реНрдарднреВрдорд┐ рдореВрд▓реНрдп рдФрд░ рдЖрдпрдд рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рджреЛрдиреЛрдВ рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдмрд╛рдж рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХреЗрдВред



рдЕрдм рдЖрдк рдЫрд╡рд┐ рдХреЛ "рдЪреЛрд░реА" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

HRESULT WINAPI Patch_Flip(IDirectDrawSurface *This, LPDIRECTDRAWSURFACE lpDDSurfTargetOverride, DWORD dwFlags)

{

DDSURFACEDESC desc = {0};

desc.dwSize = sizeof (desc);

This->GetSurfaceDesc(&desc);



// ,

if ((desc.ddsCaps.dwCaps & DDSCAPS_OVERLAY) > 0)

{

lpOverlaySurf = This;

}



// ,

if (lpOverlaySurf != NULL)

{

GetPic();

}



//

DetourRestore(True_Flip);

// ,

HRESULT res = True_Flip(This, lpDDSurfTargetOverride, dwFlags);

//

DetourRenew(True_Flip);



return res;

}




* This source code was highlighted with Source Code Highlighter .








рдЗрд╕рд▓рд┐рдП, "рдУрд╡рд░рд▓реЗ" рдХреЗ рд▓рд┐рдП рд╕рддрд╣ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЫрд╡рд┐ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, GetPic()



рдлрд╝рдВрдХреНрд╢рди GetPic()



, рдЬреЛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



void WINAPI GetPic( void )

{

DDSURFACEDESC2 desc = {0};

desc.dwSize = sizeof (desc);



DDSURFACEDESC desc1 = {0};

desc1.dwSize = sizeof (desc1);



// Lock ,

((LPDIRECTDRAWSURFACE)lpOverlaySurf)->Lock(NULL, &desc1, DDLOCK_WAIT | DDLOCK_READONLY | DDLOCK_SURFACEMEMORYPTR | DDLOCK_NOSYSLOCK, NULL);

desc.ddsCaps.dwCaps = desc1.ddsCaps.dwCaps;

desc.lpSurface = desc1.lpSurface;

desc.dwWidth = desc1.dwWidth;

desc.dwHeight = desc1.dwHeight;

desc.lPitch = desc1.lPitch;

desc.ddpfPixelFormat = desc1.ddpfPixelFormat;

desc.ddckCKDestOverlay = desc1.ddckCKDestOverlay;

desc.ddckCKSrcOverlay = desc1.ddckCKSrcOverlay;



// ,

((LPDIRECTDRAWSURFACE)lpOverlaySurf)->Unlock(NULL);

}




* This source code was highlighted with Source Code Highlighter .








Lock



рд╡рд┐рдзрд┐ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рддрд╣ рдХреЛ рд▓реЙрдХ рдХрд░рддреА рд╣реИ, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЫрд╡рд┐ рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рддреА рд╣реИред рд╡рд╣рд╛рдВ рд╕реЗ, рдЗрд╕реЗ рдЙрдард╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдЕрдирд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЗрд╕рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рд╡реАрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░ рдХреЛ рд╢рд░реНрдорд┐рдВрджрд╛ рди рдХрд░реЗрдВред IDirectDrawSurface::Lock



рд╡рд┐рдзрд┐ DDSURFACEDESC



рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рддрд╣ рд╡рд┐рд╡рд░рдг рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ IDirectDrawSurface::Lock



рд░рд┐рдЯрд░реНрдиред рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ред

рдбреЗрдЯрд╛ рд╕реВрдЪрдХ desc.lpSurface



рдкрд░ рд╕реНрдерд┐рдд рд╣реИ, рдФрд░ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдЙрд╕ рд░рдВрдЧ рдореЙрдбрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпреЗ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред



if (desc.ddpfPixelFormat.dwFourCC == 0x0)

{

DataLen = desc.dwHeight * desc.lPitch * desc.ddpfPixelFormat.dwRGBBitCount >> 3;

}

if (desc.ddpfPixelFormat.dwFourCC == MAKEFOURCC( 'Y' , 'V' , '1' , '2' ))

{

DataLen = desc.dwHeight * desc.lPitch * desc.ddpfPixelFormat.dwYUVBitCount >> 3;

}

if (desc.ddpfPixelFormat.dwFourCC == MAKEFOURCC( 'Y' , 'U' , 'Y' , '2' ))

{

DataLen = desc.dwHeight * desc.lPitch * desc.ddpfPixelFormat.dwYUVBitCount >> 4;

}

if (desc.ddpfPixelFormat.dwFourCC == MAKEFOURCC( 'Y' , 'V' , 'Y' , 'U' ))

{

DataLen = desc.dwHeight * desc.lPitch * desc.ddpfPixelFormat.dwYUVBitCount >> 4;

}

if (desc.ddpfPixelFormat.dwFourCC == MAKEFOURCC( 'U' , 'Y' , 'V' , 'Y' ))

{

DataLen = desc.dwHeight * desc.lPitch * desc.ddpfPixelFormat.dwYUVBitCount >> 4;

}




* This source code was highlighted with Source Code Highlighter .








рдпрд╣рд╛рдБ dwHeight



рдХреА рдЫрд╡рд┐ рдКрдВрдЪрд╛рдИ рд╣реИ, lPitch



рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдХреЗ рдЖрд░рдВрдн рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реИ, dwYUVBitCount



рдЫрд╡рд┐ рдХреЗ рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред



рдЕрдм рдЫрд╡рд┐ рдХреЛ рдХреЙрдкреА рдФрд░ рд╕рд╣реЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╣рдо рдПрдХ рд╡рд┐рджреЗрд╢реА рдкрддрд╛ рд╕реНрдерд╛рди рдкрд░ рд╣реИрдВ, рдФрд░ рд╕рдВрдХреЗрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реАрдорд╛рдУрдВ рдХреЗ рдкрд╛рд░ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рддрд╕реНрд╡реАрд░ рдХреЛ рдЗрдВрдЯрд░рдкреНрд░реЛрд╕реЗрд╕ рд╕рдВрдЪрд╛рд░ ( рдЖрдИрдкреАрд╕реА ) рдХреА рдХреБрдЫ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдореБрдЦреНрдп рдЖрд╡реЗрджрди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕реНрдореГрддрд┐ рдореИрдк рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рддрдВрддреНрд░ рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛ред



рд▓реЗрдЦ рдХреЗ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдореЗрдВ, рд╣рдо рджреЛ рдореЙрдбрд▓реЛрдВ рдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рд░рдВрдЧ рдореЙрдбрд▓ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ: рдПрдХ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЬрд┐рд╕рдореЗрдВ "рдЫреЗрдж" рдФрд░ рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╕реЗ рдПрдХ рдлреНрд░реЗрдо рд╣реИред



All Articles