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