рд╣рдо рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рд░рд┐рдореЛрдЯ-рдбреЗрд╕реНрдХрдЯреЙрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред рднрд╛рдЧ 1: рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб

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

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

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

рдореИрдВ рд╕реА # рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдорд╛рдлреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдерд╛ - рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЫреЛрдЯреА рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рджреВрд╕рд░реА рдмрд╛рдд, рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░рд▓ рд╣реИ рдФрд░ рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдирд╕реНрд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред рдХреНрдпреЛрдВ, рдареАрдХ рд╣реИ, рдФрд░ рддреАрд╕рд░реА рдмрд╛рдд, C # рдЕрдм рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ OOP рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИред

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЫреЛрдЯреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг, рдореИрдВрдиреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ "рдШреБрдЯрдиреЗ-рдЧрд╣рд░реА" рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рднреА рдЪреБрдирд╛ рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ - рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╕рд░рд▓ рдЬрдЯрд┐рд▓рддрд╛рдУрдВред

рдЖрдЗрдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬреЛ рд╣рдореЗрдВ рдЧрддрд┐ рдореЗрдВ рд╣рдорд╛рд░реЗ рдбреЗрд╕реНрдХрдЯреЙрдк рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:
using System; using System.Collections.Generic; using System.Windows.Forms; using System.Drawing; namespace rd2 { class Program { static void Main(string[] args) { Form f = new Form(); var timer = new System.Windows.Forms.Timer() { Interval = 40 }; timer.Tick += (s, e) => { Graphics g = f.CreateGraphics(); g.CopyFromScreen(0, 0, 0, 0, f.Size); g.Dispose(); }; timer.Start(); Application.Run(f); } } } 

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

рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдЕрдм рдПрдХ рдбреЗрд╕реНрдХрдЯреЙрдк рдбреНрд░реИрдЧ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╡рд┐рдВрдбреЛ рдХреЗ рдЕрдВрджрд░ рдбреНрд░реЙрдк рдХрд░реЗрдВред рдлреЙрд░реНрдо рдмрдирд╛рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдбрд╛рд▓реЗрдВ:
 Point window_topleft = new Point(); Size mouse_prev_loc = new Size(); bool mouse_lbdown = false; f.MouseDown += (s,e) => { mouse_lbdown = true; }; f.MouseUp += (s, e) => { mouse_lbdown = false; }; f.MouseMove += (s, e) => { if (mouse_lbdown) window_topleft += mouse_prev_loc - (Size)(e.Location); mouse_prev_loc = (Size)e.Location; }; 

рдЪрд░ window_topleft рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдКрдкрд░реА рдмрд╛рдПрдВ рдХреЛрдиреЗ рдХрд╛ рд╕рдордиреНрд╡рдп рд╣реИ рдЬреЛ рдЦрд┐рдбрд╝рдХреА рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдлрд┐рдХреНрд╕ рдХреЙрдкреАрдлреНрд░реЙрдорд╕реНрдХреНрд░реАрди:
 g.CopyFromScreen(window_topleft.X, window_topleft.Y, 0, 0, f.Size); 

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдШрд╕реАрдЯрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдЕрдм рд╣рдо рдмрд╛рдИрдВ рдорд╛рдЙрд╕ рдмрдЯрди рдХреЗ рдХреНрд▓рд┐рдХ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЦрд┐рдбрд╝рдХреА рдХреЗ рдЕрдВрджрд░ рдХрд╛ рдХреНрд▓рд┐рдХ рдЗрд╕ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рд┐рдХ рдкрд░ рдЕрдиреБрд╡рд╛рдж рд╣реЛред рдЦреАрдВрдЪрдиреЗ рдФрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХреЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦреВрдВрдЧрд╛ рдЬрд┐рдирдореЗрдВ рдорд╛рдЙрд╕ рдмрдЯрди рдХреЛ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдпрджрд┐ рдорд╛рдЙрд╕ рджрдмрд╛рдиреЗ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ рдбреНрд░реИрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдорд╛рдЙрд╕ рдХреНрд▓рд┐рдХ рдЙрддреНрдкрдиреНрди рдХрд░реВрдБрдЧрд╛ред рдЗрд╕ рддрд░рд╣:
 Point mouse_down_loc = new Point(); f.MouseDown += (s, e) => { mouse_lbdown = true; mouse_down_loc = e.Location; }; f.MouseUp += (s, e) => { mouse_lbdown = false; if( Math.Abs(e.Location.X - mouse_down_loc.X) <1 && Math.Abs(e.Location.Y - mouse_down_loc.Y) <1) { int click_to_x = (window_topleft.X + mouse_down_loc.X) * 65536 / Screen.PrimaryScreen.Bounds.Width; int click_to_y = (window_topleft.Y + mouse_down_loc.Y) * 65536 / Screen.PrimaryScreen.Bounds.Height; mouse_event((uint)(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE), (uint)click_to_x, (uint)click_to_y, 0, 0); mouse_event((uint)(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE), (uint)click_to_x, (uint)click_to_y, 0, 0); } }; 

WinAPI mouse_event рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рджреЛ рдХреЙрд▓ рд╕реЗ рдПрдХ рдорд╛рдЙрд╕ рдХреНрд▓рд┐рдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдХреЙрд▓ рдмрдЯрди рдкреНрд░реЗрд╕ (MOUSEEVENTF_LEFTDOWN) рд╣реИ, рджреВрд╕рд░рд╛ рд░рд┐рд▓реАрдЬрд╝ (MOUSEEVENTF_LEFTUP) рд╣реИред рдПрдХ рдмрдЯрди рдХреЗ рдХреНрд▓рд┐рдХ рдХреЗ рд╕рд╛рде, рд╣рдо рдорд╛рдЙрд╕ рдХреЗ рдЖрдВрджреЛрд▓рди (MOUSEEVENTF_MOVE) рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдирд┐рд░рдкреЗрдХреНрд╖ рдорд╛рди (MOUSEEVENTF_ABSOLUTE) рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╢реВрдиреНрдп рдирд┐рд░рдкреЗрдХреНрд╖ рдорд╛рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рд╛рдердорд┐рдХ рд╕реНрдХреНрд░реАрди (рдкреНрд░рд╛рдЗрдорд░реАрд╕реНрдХреНрд░реАрди) рдХреЗ рдКрдкрд░реА рдмрд╛рдПрдБ рдХреЛрдиреЗ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рдмрд┐рдВрджреБ (65535, 65535) рдЙрд╕реА рд╕реНрдХреНрд░реАрди рдХреЗ рдирд┐рдЪрд▓реЗ рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдЕрдиреНрдп рд╕рднреА рд╕реНрдХреНрд░реАрди, рдпрджрд┐ рд╡реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╣реИрдВ, рдЗрд╕ рд╡рд░реНрдЧ рд╕реЗ рд╕рдЯреЗ рд╣реИрдВред

рдареАрдХ рд╣реИ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЖрдк рдХреЛ mouse_event рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдШреЛрд╖рдгрд╛ рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ:
 [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo); private const int MOUSEEVENTF_MOVE = 0x01; private const int MOUSEEVENTF_LEFTDOWN = 0x02; private const int MOUSEEVENTF_LEFTUP = 0x04; private const int MOUSEEVENTF_ABSOLUTE = 0x8000; 

рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЛрдЪрдиреЗ рд╡рд╛рд▓реА рдмрд╛рддреЗрдВред


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

рдПрдХ рд╕реНрдХреНрд░реАрди рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ 10 рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рд╕реНрдХреНрд░реАрди рдХрд╛ рдЖрдХрд╛рд░ 3 * 800 * 480 * 10 = 11520000 рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд╣реИред рдпрд╣ рд▓рдЧрднрдЧ 100 рдореЗрдЧрд╛рдмрд┐рдЯреНрд╕ рд╣реИред рдЖрдк рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рд╕реНрдХреНрд░реАрди рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдирд╣реАрдВ рдмрджрд▓реЗ рд╣реИрдВ - рдХреБрдЫ рдХрд╛рдлреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрдк рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рднрд╛рдЧреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рднреЗрдЬрдиреЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрдВрдХрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЪреИрдирд▓ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдкрд░ рдХреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред

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

рд╣рдо рджреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИрдВ


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

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

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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд░реНрд╡рд░ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
 struct ImageChunk { public Rectangle place; public Bitmap img; }; struct ControlData { public enum Action : byte { Shift, Click }; public Action action; public Point point; } 

рдЗрд╕рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЫрд╡рд┐ рднреЗрдЬрддрд╛ рд╣реИ, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрд╕рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд┐рдд рдерд╛, рдореЙрдирд┐рдЯрд░ред рд░рд┐рд╡рд░реНрд╕ - рд╢рд┐рдлреНрдЯреНрд╕ (рд╢рд┐рдлреНрдЯ) рдФрд░ рдорд╛рдЙрд╕ рдХреНрд▓рд┐рдХ (рдХреНрд▓рд┐рдХ); рд╣рдо рд╣рд░ рдЬрдЧрд╣ рд╕рд░реНрд╡рд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реИрдВред

рдЕрдм рдореМрдЬреВрджрд╛ рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрдкреА рдХрд░реЗрдВ, рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рджреЛрдиреЛрдВ рдкреНрд░рддрд┐рдпреЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ, рдФрд░ рдПрдХ рдирдпрд╛ рдореБрдЦреНрдп рд▓рд┐рдЦреЗрдВ:
 static void Main(string[] args) { var img_channel = new BlockingCollection<ImageChunk>( new ConcurrentQueue<ImageChunk>() ); var control_channel = new BlockingCollection<ControlData>( new ConcurrentQueue<ControlData>()); Server(control_channel, img_channel); Client(img_channel, control_channel); } 

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлреНрд▓реЛрдЪрд╛рд░реНрдЯ рдХреЗ рдкрд╛рда рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рд╣реИ рдирд╛?

рд╣рдо рд╕рд░реНрд╡рд░ рд╕реЗ рд╡рд╣ рд╕рдм рд╣рдЯрд╛ рджреЗрдВрдЧреЗ рдЬреЛ рд╕реНрдХреНрд░реАрди рдХреИрдкреНрдЪрд░ рдФрд░ рдХрддрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдореИрдВрдиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ 400x300 рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рд╡рд┐рдВрдбреЛ рдХрд╛ рдЖрдХрд╛рд░ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рддрд╛рдХрд┐ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рдПрдХ рдФрд░ рдЬреЛрдбрд╝реЗ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рди рдХрд░ рд╕рдХреЗред
 static void Server(BlockingCollection<ControlData> input, BlockingCollection<ImageChunk> output) { Point window_topleft = new Point(); Size window_size = new Size(400, 300); var timer = new System.Windows.Forms.Timer() { Interval = 40 }; timer.Tick += (s, e) => { //       ControlData incoming; while (input.TryTake(out incoming)) { switch (incoming.action) { case ControlData.Action.Click: mouse_event((uint)(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE), (uint)incoming.point.X, (uint)incoming.point.Y, 0, 0); mouse_event((uint)(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE), (uint)incoming.point.X, (uint)incoming.point.Y, 0, 0); break; case ControlData.Action.Shift: window_topleft = incoming.point; break; } } //        var b = new Bitmap(window_size.Width,window_size.Height); var g = Graphics.FromImage(b); g.CopyFromScreen(window_topleft.X, window_topleft.Y, 0, 0, window_size); g.Dispose(); output.Add(new ImageChunk() { img = b, place = new Rectangle(window_topleft, window_size) } ); }; timer.Start(); } 

рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ, рд╣рдо рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рд╕рд░реНрд╡рд░ рдЕрдм рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ:
 static void Client(BlockingCollection<ImageChunk> input, BlockingCollection<ControlData> output) { Form f = new Form(){ ClientSize = new Size(400, 300) }; Point window_topleft = new Point(); Size mouse_prev_loc = new Size(); bool mouse_lbdown = false; Point mouse_down_loc = new Point(); //    f.MouseDown += (s, e) => { mouse_lbdown = true; mouse_down_loc = e.Location; }; f.MouseUp += (s, e) => { mouse_lbdown = false; if (Math.Abs(e.Location.X - mouse_down_loc.X) < 1 && Math.Abs(e.Location.Y - mouse_down_loc.Y) < 1) { int click_to_x = (window_topleft.X + mouse_down_loc.X) * 65536 / Screen.PrimaryScreen.Bounds.Width; int click_to_y = (window_topleft.Y + mouse_down_loc.Y) * 65536 / Screen.PrimaryScreen.Bounds.Height; output.Add(new ControlData() { action=ControlData.Action.Click, point=new Point(click_to_x,click_to_y) }); } }; f.MouseMove += (s, e) => { if (mouse_lbdown) { window_topleft += mouse_prev_loc - (Size)(e.Location); output.Add(new ControlData() { action = ControlData.Action.Shift, point = window_topleft } ); } mouse_prev_loc = (Size)e.Location; }; //    var timer = new System.Windows.Forms.Timer() { Interval = 40 }; timer.Tick += (s, e) => { ImageChunk incoming; //    -  if( ! input.TryTake(out incoming,5) ) return; Graphics g = f.CreateGraphics(); g.DrawImageUnscaled(incoming.img, incoming.place.X - window_topleft.X, incoming.place.Y - window_topleft.Y); g.Dispose(); incoming.img.Dispose(); }; timer.Start(); Application.Run(f); } 

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╕реНрд╡рд░реВрдк рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

NB: рд╡реИрд╕реЗ, рдЖрдк рдпрд╣рд╛рдБ рдХрд╛рдВрдЯрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ..


... рдФрд░ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рджреВрд░рд╕реНрде рдбреЗрд╕реНрдХрдЯреЙрдк рдмрдирд╛рддреЗ рд╣реИрдВ, http рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, RS232 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЖрджрд┐ рдмрд╕ рдХреНрд░рдордмрджреНрдзрддрд╛, рд╕рдВрдкреАрдбрд╝рди, рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд╣рди рд▓рд┐рдЦреЗрдВ рдЬреЛ рдХрд┐ рдХрддрд╛рд░реЛрдВ рдореЗрдВ рд╣реИрдВред

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

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


All Articles