рдЬреАрдпреВрдЖрдИ рдЖрд╡реЗрджрди 1 рдХреЗрдмреА рд╕реЗ рдЫреЛрдЯрд╛ рд╣реИ

рдЕрд╡рдХрд╛рд╢ рдХреЗ рд╕рдордп, рдореИрдВрдиреЗ рд╕реНрд╡рдпрдВ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкреВрдЫреА:

  • рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рдВрдХреНрд╢рди (рдЬреЛ рдбрдореА рдирд╣реАрдВ рд╣реИ)
  • рдПрдХ рд╡рд┐рдВрдбреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐
  • рдЖрдХрд╛рд░ 1 Kb рд╕реЗ рдХрдо рд╣реИ

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

рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрд╣реБрдд рдХрдареЛрд░ рд╣реИ, рдореИрдВрдиреЗ WinAPI рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рдЬрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

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

1 KB рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ:

  • рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдЖрд░рдВрднреАрдХрд░рдг
  • рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛ рдлрд╝рдВрдХреНрд╢рди
  • рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрд░реНрдХ (GetAsyncKeyState рдФрд░ SendInput рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдирд┐рд░реНрдорд┐рдд)

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЛрдбрд╛рдВрддрд░рдХ рдФрд░ рдПрд╕рдПрдордПрд╕ рдХреЗ рдмрд┐рдирд╛ рд╢реБрджреНрдз рд╕реА рдореЗрдВ MSVC рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдлрд┐рд░ рдХреНрд░рд┐рдВрдХрд░ рдкреИрдХрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ crinkler рдХреЛрдб (рд▓рдЧрднрдЧ рджреЛ рдмрд╛рд░) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдбреЗрдЯрд╛ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджреБрд░реНрд▓рдн) рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдбреЗрдЯрд╛ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред

рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдВрдбреЛ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рд╕рд┐рдХ CreateWindow рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ, рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВ рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред

рдореБрдЭреЗ рд╡рд┐рдХрд▓реНрдк рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдереАред рдФрд░ рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди CreateDialogIndirect рдмрди рдЧрдИ, рднрд░реЗ рд╣реБрдП DLGTEMPLATE рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдПрдХ рд╕рдВрд╡рд╛рдж рдмрдирд╛ (рдЬрд┐рд╕рдореЗрдВ рдвреЗрд░ DLGITEMTEMPLATE рд╢рд╛рдорд┐рд▓ рд╣реИ)

рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрдирдХреА рддрд░рд╣ рдХреБрдЫ рдореИрдХреНрд░реЛрдЬрд╝ рд╢реБрд░реВ рдХрд┐рдП:

#define NUMCHARS(p) (sizeof(p)/sizeof((p)[0])) #define DLGCTL(a) struct{DWORD style; DWORD exStyle; short x; short y; short cx; short cy; WORD id; WORD sysClass; WORD idClass; WCHAR wszTitle[NUMCHARS(a)]; WORD cbCreationData;} #define RADIO(x,y,cx,cy,id,title) {WS_VISIBLE|WS_CHILD|BS_RADIOBUTTON, 0, (x)/2, (y)/2,\n (cx)/2,(cy)/2, id, 0xFFFF, 0x0080, title, 0} 

рдЕрдм рдЖрдк рднрд╡рд┐рд╖реНрдп рдХреА рдЦрд┐рдбрд╝рдХреА рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдШреЛрд╖рд┐рдд рдФрд░ рднрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 static struct { DWORD style; DWORD dwExtendedStyle; WORD ccontrols; short x; short y; short cx; short cy; WORD menu; WORD windowClass; DLGCTL(LBL_BTN_LEFT) button_left; DLGCTL(LBL_BTN_MIDDLE) button_middle; DLGCTL(LBL_BTN_RIGHT) button_right; } Dlg = { WS_VISIBLE|WS_POPUP|WS_BORDER, 0, TOTAL_CONTROLS, 50/2, 50/2, WND_CX/2, WND_CY/2, 0, 0, RADIO(10, 0, 80, 30, IDC_BTN_LEFT, LBL_BTN_LEFT), RADIO(100, 0, 80, 30, IDC_BTN_MIDDLE, LBL_BTN_MIDDLE), RADIO(190, 0, 68, 30, IDC_BTN_RIGHT, LBL_BTN_RIGHT), }; 

рд╣рдо CreateDialogIndirect рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдлрд╝реАрдб рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рдкрд░рд┐рдгрд╛рдореА рд╡рд┐рдВрдбреЛ рд╣реИ:



рдЪреВрдБрдХрд┐ рд╣рдо 1 kb рдореЗрдВ рдлрд┐рдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдм рдХреБрдЫ рдХреА рддрд░рд╣ рдПрдХ рдкреНрд░рдХрдЯ рд░реВрдк рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рджреГрд╢реНрдп рд╢реИрд▓реА рднреА рдирд╣реАрдВ рд╣реИред рд╕рдм рдХреБрдЫ рдЧреНрд░реЗ рдФрд░ рд╕реНрдХреНрд╡рд╛рдпрд░ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдпреБрд╡рд╛рдУрдВ рдореЗрдВ рд╣реИред

рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рднреА рдЪрдХрдорд╛ рджреЗрддреЗ рд╣реИрдВ, shell32.dll рд╕реЗ рдкреНрд░рдХрдЯ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрджрд░реНрдн рдХреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:

 static ACTCTX actCtx = {sizeof(ACTCTX), ACTCTX_FLAG_RESOURCE_NAME_VALID|ACTCTX_FLAG_SET_PROCESS_DEFAULT|ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID, "shell32.dll", 0, 0, tmp, (LPCTSTR)124, 0, 0}; GetSystemDirectory(tmp,sizeof(tmp)); LoadLibrary("shell32.dll"); ActivateActCtx(CreateActCtx(&actCtx),(ULONG_PTR*)&tmp); 

рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдЯрд╛рдЗрд▓рд┐рд╢, рдлреИрд╢рдиреЗрдмрд▓ рд╣реИ:



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

 switch(msg) { case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_BTN_LEFT: case IDC_BTN_MIDDLE: case IDC_BTN_RIGHT: input[0].mi.dwFlags = wParam; input[1].mi.dwFlags = (wParam<<1); CheckRadioButton(hWnd,IDC_BTN_LEFT,IDC_BTN_MIDDLE,wParam); break; case IDC_BTN_HOLD: case IDC_BTN_TRIGGER: trigger_mode = (wParam==IDC_BTN_TRIGGER); CheckRadioButton(hWnd,IDC_BTN_HOLD,IDC_BTN_TRIGGER,wParam); break; case IDC_EDIT_PERIOD: period = GetDlgItemInt(hWnd,IDC_EDIT_PERIOD,(BOOL*)&tmp[0],0); break; case IDC_BTN_EXIT: exit(0); } break; } return DefWindowProc(hWnd,msg,wParam,lParam); 

рдФрд░ рдлрд┐рд░ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓реЗред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

input.exe /L /T /P:20 /K:9 - 20 , / Tab

рдбреЗрдЯрд╛ рдХреЗ рдЕрдВрджрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

 static unsigned int arg_to_cmd[] = {IDC_BTN_HOLD, 0, 0, IDC_EDIT_KEY, IDC_BTN_LEFT, IDC_BTN_MIDDLE, 0, 0, IDC_EDIT_PERIOD, 0, IDC_BTN_RIGHT, 0, IDC_BTN_TRIGGER}; i = (char*)GetCommandLine(); while(*i) { if (*(i++)=='/')//looking for argument switch(*i) { case 'L': case 'M': case 'R': case 'H': case 'T': SendMessage(hWnd,WM_COMMAND,arg_to_cmd[*i-'H'],0);//send button command break; case 'P': case 'K': t = atoi(i+2); SetDlgItemInt(hWnd,arg_to_cmd[*i-'H'],t,0); if(*i=='P') period = t; else key = t; break; } } 

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

рдЕрдм рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ (рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд░рдЦрд╛ рд╣реИ):

 while(1) { key_state = (GetAsyncKeyState(key)>>1); if (trigger_mode) { if ((key_state)&&(key_state!=prev_key_state)) active^= 1; prev_key_state = key_state; } else active = key_state; if (active) SendInput(2,(LPINPUT)&input,sizeof(INPUT)); Sleep(period); } 


рд╣рдо рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдУрдмрдЬ-рдлрд╛рдЗрд▓ crinkler'om рджрдмрд╛рддреЗ рд╣реИрдВ - рдЖрдЙрдЯрдкреБрдЯ 973 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред

рдЗрдирдореЗрдВ рд╕реЗ, рдбреЗрдЯрд╛ 163 рдмрд╛рдЗрдЯреНрд╕ (рд╕рдВрдкреАрдбрд╝рди рдЕрдиреБрдкрд╛рдд 33.1%), рдХреЛрдб - 517 рдмрд╛рдЗрдЯреНрд╕ (рд╕рдВрдкреАрдбрд╝рди рдЕрдиреБрдкрд╛рдд 68.9%) рдкрд░ рд╣реИред

рд╕рд┐рдХреБрдбрд╝рдирд╛ рдФрд░ рдордЬрдмреВрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ (рдПрдХ рдФрд░ 50 рдмрд╛рдЗрдЯреНрд╕), рд▓реЗрдХрд┐рди рд▓рдХреНрд╖реНрдп рдкрд╣рд▓реЗ рд╣реА рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ 51 рд╕реНрдкреЗрдпрд░ рдмрд╛рдЗрдЯреНрд╕ рднреА рд░рд╣реЗред

рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛:

  • рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛
  • рджреГрд╢реНрдп рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдВрдбреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛

рдХреБрдЫ рдЬрдЧрд╣реЛрдВ рдкрд░ рдХреЛрдб рдмрд╣реБрдд рдЯреЗрдврд╝реЗ рд▓рдЧрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЯреЗрдврд╝рд╛ рд▓рд┐рдЦрд╛ рд╣реИред рдФрд░ рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЗрд╕рдиреЗ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдк рдЖрд╡реЗрджрди рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдирд╣реАрдВ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдЗрдЯ 50 рд╣реИ)ред

рдкрд░рд┐рдгрд╛рдо:

рдЕрдм рдЖрдк рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЬрдВрдЧрд▓реА рдХреНрд╖рддрд┐ рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЛрдб рдореЗрдВ рдПрд▓рд┐рдпрдВрд╕ рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдирд╡реАрдирддрд╛:
рд╢реВрдиреНрдпред рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рде рддрдХрдиреАрдХреЛрдВ / рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд░рдЦрд╛ред

рдФрдЪрд┐рддреНрдп:
рдмреЗрдХрд╛рд░, рдХреЗ рд▓рд┐рдП рдордЬрд╝рд╛ред

рд╕реНрд░реЛрдд рдХреЛрдб
рдмрд╛рдЗрдирд░реА

рд╕реНрд╡реАрдХрд╛рд░ рдХреА рдЧрдИ рдЖрд▓реЛрдЪрдирд╛, рдЗрдЪреНрдЫрд╛рдПрдВ, рд╕реБрдЭрд╛рд╡, рдкреНрд░рд╢рдВрд╕рд╛, рдЖрдХреНрд░реЛрд╢ред

Source: https://habr.com/ru/post/hi416135/


All Articles