рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕-рдЖрд░реНрдХреЗрдб рдХреЗ рд▓рд┐рдП рдмреЙрдЯред рднрд╛рдЧ рд╕рдВрдЦреНрдпрд╛ 1: рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ

рдкрд░рд┐рдЪрдп

рдЫрд╡рд┐ рд╣рд░ рдХреЛрдИ, рдЦреЗрд▓ рд░рд╣рд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рд╕реЛрдЪрд╛: "рдХрд╛рд╢ рдореИрдВ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦ рд╕рдХрддрд╛ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдЦреЗрд▓рддрд╛!" рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рд╡рд┐рдЪрд╛рд░, рдЗрд╕рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ ... рдХреБрдЫ рд▓рдЧрд╛рддрд╛рд░ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддрд╛ рд╣реИ: рдЬрд╣рд╛рдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдирддрд╛, рдХрд╛рд░реНрдп рдХреА рдЕрдиреБрдкрдпреБрдХреНрддрддрд╛ рдХрд╛ рдбрд░, рдмрд╛рдПрдВ рдХрдВрдзреЗ рдХреЗ рдкреАрдЫреЗ рд╕реЗ рдлреБрд╕рдлреБрд╕рд╛рддреЗ рд╣реБрдП "рдФрд░ рдпрд╣ рдХреНрдпреЛрдВ рд╣реИ? рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? тАЭрдЖрджрд┐ред

рд▓реЗрдЦреЛрдВ рдХреА рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ, рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ: "рд╢реИрддрд╛рди рдЗрддрдирд╛ рднрдпрд╛рдирдХ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рд╡рд╣ рдЪрд┐рддреНрд░рд┐рдд рд╣реИ," рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд: рдмрд╛рдж рдореЗрдВ рдореИрдВ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ: "рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдХреНрдпреЛрдВ рд╣реИ?"

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

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

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


рд╕реЙрд▓реНрд╡реНрдб рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рд╕рдм-рдорд╛рд╕реНрдХ: рдорд╛рдЙрд╕ рдПрдореБрд▓реЗрд╢рди, рдорд╛рдЙрд╕ рд░рд┐рдбрд╛рдпрд░реЗрдХреНрд╢рди рдЯреВ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди, рдЗрдореЗрдЬ рдХреИрдкреНрдЪрд░ред


рдкреАрдЫреЗ рд╣рдЯрдирд╛

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

рдорд╛рдЙрд╕ рдЕрдиреБрдХрд░рдг

рд╡рд┐рдВрдбреЛрдЬ 4 рдорд╛рдирдХ WinApi рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╛рдЙрд╕ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ 2 рдорд╛рдирдХ рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ : SendMessage рдпрд╛ PostMessage рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЕрдкрдиреЗ рд╡рд┐рдВрдбреЛ рд╕рдВрджреЗрд╢ ( WM_MOUSEMOVE , WM_LBUTTONDOWN , рдЖрджрд┐) рднреЗрдЬрдирд╛ ред

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

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

C # рд╕реЗ WinApi рдлрд╝рдВрдХреНрд╢рди рдХреЛ PInvoke рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЖрдо WinApi рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП PInvoke рд╡рд┐рд╡рд░рдг PInvoke.net рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Mouse_event рдлрд╝рдВрдХреНрд╢рди рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИ ред
[DllImport("user32.dll")] public static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, UIntPtr dwExtraInfo); 


рдорд╛рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ
Mouse_event рдлрд╝рдВрдХреНрд╢рди рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ: рдорд╛рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдорд┐рдХреА рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдкрд┐рдХреНрд╕реЗрд▓ рдирд╣реАрдВред рдкрд┐рдХреНрд╕реА (рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд) рдореЗрдВ рдорд┐рдХреА рдХреА рдкреБрдирд░реНрдЧрдгрдирд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдореБрдЦреНрдп рдореЙрдирд┐рдЯрд░ рдХреЗ рд╕рдВрдХрд▓реНрдк рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред (0,0) рдореЙрдирд┐рдЯрд░ рдХреЗ рдКрдкрд░реА рдмрд╛рдПрдВ рдХреЛрдиреЗ рд╕реЗ, рдФрд░ (65535, 65535) рдирд┐рдЪрд▓реЗ рджрд╛рдПрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдЬреЛ mickey_point = pixel_point * (65536, 65536) / screen_size рдореЗрдВ рдорд┐рдХреНрд╕реА рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрддреНрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд: mickey_point = pixel_point * (65536, 65536) / screen_size pixel_point = mickey_point * screen_size / (65536, 65536) рдФрд░ pixel_point = mickey_point * screen_size / (65536, 65536) ред

рдореВрд▓ рд╕рдВрдЪрд╛рд▓рди
рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдорд╛рдЙрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдСрдкрд░реЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдорд╛рдЙрд╕ рдХрд░реНрд╕рд░ рдХреЛ рдмрд┐рдВрджреБ рдкрд░ рд▓реЗ рдЬрд╛рдПрдБ (x, y):
  mouse_event(MouseEventFlags.MOVE | MouseEventFlags.ABSOLUTE, x * 65536 / screen_width, y * 65536 / screen_height); 

рдмрд╛рдпрд╛рдБ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:
  mouse_event((MouseEventFlags.LEFTDOWN), 0, 0); System.Threading.Thread.Sleep(100); mouse_event((MouseEventFlags.LEFTUP), 0, 0); 

рд░рд╛рдЗрдЯ рдХреНрд▓рд┐рдХ:
  mouse_event((MouseEventFlags.RIGHTDOWN), 0, 0); System.Threading.Thread.Sleep(100); mouse_event((MouseEventFlags.RIGHTUP), 0, 0); 


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

рдПрдХ рдЧреЗрдо рдХреЛ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛

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

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

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

рдкреНрд░реЙрдХреНрд╕реА
рдЫрд╡рд┐ рдЕрддрд┐рдерд┐ рдУрдПрд╕ рдкрд░ рдорд╛рдЙрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЬреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯреАрд╕реАрдкреА рдХрдВрд╕реЛрд▓ рд╕рд░реНрд╡рд░ рд╣реИред рдЗрд╕рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб рдЫреЛрдЯрд╛ рд╣реИ рдФрд░ рдХрдЯ рдХреЗ рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░реАрдореЛрдЯрд┐рдВрдЧ, wcf, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рдирдВрдЧреЗ рд╕реЙрдХреЗрдЯ рдкрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░реЙрдХреНрд╕реА рдХреЛрдб
 using System; using System.Collections.Generic; using System.Linq; using System.Net.Sockets; using System.Runtime.InteropServices; using System.Text; namespace InputProxy { class Program { static void Main(string[] args) { var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Bind(new System.Net.IPEndPoint(System.Net.IPAddress.Any, 7001)); socket.Listen(10); for (; ; ) { var client = socket.Accept(); Console.WriteLine("connected.."); var thread = new System.Threading.Thread(() => { try { var clientReader = new System.IO.BinaryReader(new NetworkStream(client)); for (; ; ) { if (client.Poll(1, SelectMode.SelectRead) && client.Available == 0) { Console.WriteLine("disconnected.."); break; } if (client.Available > 0) { var msgSize = clientReader.ReadInt32(); var message = clientReader.ReadBytes(msgSize); var messageReader = new System.IO.BinaryReader(new System.IO.MemoryStream(message)); var msgKind = messageReader.ReadInt32(); Console.WriteLine("message: kind:{0}, len:{1}", msgKind, message.Length); switch (msgKind) { case 0: { var flags = messageReader.ReadUInt32(); var x = messageReader.ReadInt32(); var y = messageReader.ReadInt32(); var data = messageReader.ReadUInt32(); mouse_event(flags, x, y, data, UIntPtr.Zero); } break; } } else System.Threading.Thread.Sleep(10); } } catch (Exception exc) { Console.WriteLine(exc); } }) { IsBackground = true }; thread.Start(); } } [DllImport("user32.dll")] public static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, UIntPtr dwExtraInfo); } } 


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

рдЧреНрд░рд╛рд╣рдХ
рдкреНрд░реЙрдХреНрд╕реА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЦреБрдж рдкреНрд░реЙрдХреНрд╕реА рдХреЛрдб рд╕реЗ рднреА рдЖрд╕рд╛рди рд╣реИред
  var client = new System.Net.Sockets.TcpClient(vm_host, 7001); var clientStream = client.GetStream(); var clientWriter = new System.IO.BinaryWriter(clientStream); Action<MouseEventFlags, int, int> mouse_event = (flags, x, y) => { var messageStream = new System.IO.MemoryStream(); var messageWriter = new System.IO.BinaryWriter(messageStream); messageWriter.Write(0); messageWriter.Write((uint)flags); messageWriter.Write(x); messageWriter.Write(y); messageWriter.Write(0); var message = messageStream.ToArray(); clientWriter.Write(message.Length); clientWriter.Write(message); clientStream.Flush(); }; 


рдЫрд╡рд┐ рдкрд░ рдХрдмреНрдЬрд╛

рдЫрд╡рд┐ рдХреЛ рд╕реНрдХреНрд░реАрди рд╕реЗ рд╕реАрдзреЗ рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИред рдЗрдирдиреЗрдЯ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рддреИрдпрд╛рд░ рдлрдВрдХреНрд╢рди рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╣реИред рдХреЙрдлрд╝реА рдлрд╝реЙрд░рд╕реНрдХреНрд░реАрди рдЗрд╕рдХреЗ рд▓рд┐рдПред рд╣рдо рдЗрд╕ рдкрджреНрдзрддрд┐ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдореИрдВ рдмрд┐рдЯрдореИрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдирд╣реАрдВ - рдпрд╣ рдПрдХ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
  public static Bitmap GetScreenImage(Rectangle rect) { var bmp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb); using (Graphics graphics = Graphics.FromImage(bmp)) { graphics.CopyFromScreen(rect.Left, rect.Top, 0, 0, rect.Size, CopyPixelOperation.SourceCopy); } return bmp; } 

рджреВрд╕рд░реЗ, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕реНрдХреНрд░реАрди рдХреЗ рдХрд┐рд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЖрдкрдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛ рд╣реИред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдореЗрд╢рд╛ рд╕реНрдХреНрд░реАрди рдХреЗ рдПрдХ рд╣реА рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЦреЗрд▓ рдХреЛ рд╕реНрдХреНрд░реАрди рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкреЛрд░реНрдЯреА рдпрд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рди рдиреНрдпреВрдирддрдо рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред WinApi рдФрд░ PInvoke рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджреЛ рдХрд╛рд░реНрдп: FindWindow рдФрд░ GetWindowRect ред FindWindow рдЖрдкрдХреЛ рд╡рд┐рдВрдбреЛ рд╢реАрд░реНрд╖рдХ рд╕реЗ рд╡рд┐рдВрдбреЛ рдХреЗ рд╣реИрдВрдбрд▓ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╣реИрдВрдбрд▓ рджреНрд╡рд╛рд░рд╛ GetWindowRect рд╕реНрдХреНрд░реАрди рдкрд░ рд╡рд┐рдВрдбреЛ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЖрдХрд╛рд░ рджреЗрддрд╛ рд╣реИред
рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдкрд┐рдирд╡реЛрдХ рд╡рд┐рд╡рд░рдг pinvoke.net рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ: FindWindow рдФрд░ GetWindowRect ред
  [DllImport("user32.dll", SetLastError = true)] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GetWindowRect(IntPtr hwnd, out RECT lpRect); [StructLayout(LayoutKind.Sequential)] public struct RECT { public int Left; public int Top; public int Right; public int Bottom; } 

рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╡рд┐рдВрдбреЛ рдХрд╛ рдЗрдореЗрдЬ рдХреИрдкреНрдЪрд░ рдХреЛрдб рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
  var vm_left = 8; var vm_right = 8; var vm_top = 50; var vm_bottom = 30; var vm_title = "Windows81 [Running] - Oracle VM VirtualBox"; var handle = FindWindow(null, vm_title); if (handle == IntPtr.Zero) throw new Exception("  "); RECT rect; GetWindowRect(handle, out rect); var gameScreenRect = new System.Drawing.Rectangle(rect.Left + vm_left, rect.Top + vm_top, rect.Right - rect.Left - vm_right - vm_left, rect.Bottom - rect.Top - vm_bottom - vm_top); var gameBmp = GetScreenImage(gameScreenRect); 


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

рд▓реВрдк рдЧреЗрдордкреНрд▓реЗ

рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЖрдЬ рдХреЗ рд▓рд┐рдП рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ: рдЦреЗрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд▓реВрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЙрдкрд╢реАрд░реНрд╖рдХ рд╣рд▓ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЬрд╝реВрдорд╛ рдореЗрдВ рдЧреЗрдордкреНрд▓реЗ рддреАрди рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдШреВрдорддрд╛ рд╣реИ: рдореБрдЦреНрдп, рдорд┐рд╢рди рдФрд░ рдПрдХреНрд╢рдиред рдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ рдореЗрдВ рдореБрдЦреНрдп рдореЗрдиреВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЧреЗрдо рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рдорд┐рд╢рди рд╡рд┐рдВрдбреЛ рдПрдХ рдорд┐рд╢рди рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреА рд╣реИ, рдФрд░ рдЧреЗрдо рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХреНрд╢рди рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╣реЛрддреА рд╣реИред
рдмреЙрдЯ рд╡рд░реНрддрдорд╛рди рд╡рд┐рдВрдбреЛ рдХреЛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ: рдХрдИ рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд░рдВрдЧ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ред рдЕрдВрдХ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪреБрдиреЗ рдЧрдП рд╣реИрдВ: "рдХрд░реАрдм peering" рдХреА рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ред
  var screenChecks = new[] { new { Name = "main", Points = new[] { new CheckPoint(200, 190, 0xff554a22), new CheckPoint(65, 400, 0xfff44c41) } }, new { Name = "mission", Points = new[] { new CheckPoint(200, 190, 0xffb5d0c7), new CheckPoint(65, 400, 0xffad7630) } }, new { Name = "action", Points = new[] { new CheckPoint(950, 10, 0xff72554b), new CheckPoint(10, 10, 0xff462b1d), } }, }; Func<Bitmap, string> check = image => screenChecks.Where(_check => image.Check(_check.Points)).Select(_check => _check.Name).FirstOrDefault(); 

рдореБрдЦреНрдп рдмреЙрдЯ рдЪрдХреНрд░:
  var startButtonPoint = new Point(950, 430); var startMissionPoint = new Point(600, 750); for (; ; ) { try { var bmp = GetScreenImage(gameScreenRect); var screenName = check(bmp); Console.Write(screenName + new string(' ', 20) + new string('\x8', 40)); switch (screenName) { case "main": mouse_event(MouseEventFlags.MOVE | MouseEventFlags.ABSOLUTE, startButtonPoint.X * 65536 / game_width, startButtonPoint.Y * 65536 / game_height); System.Threading.Thread.Sleep(400); mouse_event(MouseEventFlags.LEFTDOWN, 0, 0); System.Threading.Thread.Sleep(150); mouse_event(MouseEventFlags.LEFTUP, 0, 0); System.Threading.Thread.Sleep(50); System.Threading.Thread.Sleep(400); break; case "mission": mouse_event(MouseEventFlags.MOVE | MouseEventFlags.ABSOLUTE, startMissionPoint.X * 65536 / game_width, startMissionPoint.Y * 65536 / game_height); System.Threading.Thread.Sleep(10); mouse_event(MouseEventFlags.LEFTDOWN, 0, 0); System.Threading.Thread.Sleep(150); mouse_event(MouseEventFlags.LEFTUP, 0, 0); System.Threading.Thread.Sleep(50); break; case "action": mouse_event(MouseEventFlags.LEFTDOWN, 0, 0); System.Threading.Thread.Sleep(150); mouse_event(MouseEventFlags.LEFTUP, 0, 0); System.Threading.Thread.Sleep(50); break; case null: bmp.Save("unknown.bmp"); break; } } catch (Exception exc) { Console.WriteLine(exc); } } 

рдЧреЗрдо рдЪрд░рдг рдореЗрдВ, рдмреЙрдЯ рд▓рдЧрд╛рддрд╛рд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдЧреЗрдВрджреЛрдВ рдХреЛ рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ (рдмрд▓реНрдХрд┐ рдЧреВрдВрдЧрд╛) рд░рдгрдиреАрддрд┐ рдкрд░, рдкрд╣рд▓реЗ рдорд┐рд╢рди рдореЗрдВ рдмреЙрдЯ 1000-2000 рдЕрдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХрднреА-рдХрднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд╝реВрдорд╛ рдкрдЯреНрдЯреА рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред



рд╕рд╛рд░рд╛рдВрд╢

рд▓рдХреНрд╖реНрдп рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ: рдмреЙрдЯ рдХрд╛ рдлреНрд░реЗрдо рд▓рд┐рдЦрд╛ рд╣реИ - рдЧреЗрдордкреНрд▓реЗ рдХреЛ рд▓реВрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рдХреНрд╖реНрдп: рдУрдкрдирд╕реАрд╡реА рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рдЧреЗрдВрджреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рд░рдВрдЧ рдХреЛ рдкрд╣рдЪрд╛рдиреЗрдВред

рдкреА.рдПрд╕.

рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ред (рдСрд░реЗрдВрдЬ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рдмреЙрдЯ рдХреЗ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЧреЗрдВрджреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рджреЗрддреЗ рд╣реИрдВ)


рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕-рдЖрд░реНрдХреЗрдб рдХреЗ рд▓рд┐рдП рдмреЙрдЯред рднрд╛рдЧ рд╕рдВрдЦреНрдпрд╛ 1: рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ
рдЖрд░реНрдХреЗрдб рдХреЗ рд▓рд┐рдП рдмреЙрдЯред рднрд╛рдЧ рд╕рдВрдЦреНрдпрд╛ 2: рд╣рдо OpenCv рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ

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


All Articles