Kinect + GlovePIE рдпрд╛ рдЦреЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ

Kinect SDK рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ - рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЖрдк рдмрд╣реБрдд рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд╛рддреНрдордХ рд╡реАрдбрд┐рдпреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐рдиреЗрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдФрд░ рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред

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

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

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

рд╣рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рдФрд░ рдЕрддреНрдпрдВрдд рд╕реНрдкрд╖реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рдкреНрд░рддреНрдпрдХреНрд╖ рдХреНрд▓рд┐рдХ рдирд╣реАрдВ:
рдП = рдП
рд╕ = рд╕
рдЕрдВрддрд░рд┐рдХреНрд╖ = рдЕрдВрддрд░рд┐рдХреНрд╖

рд╣рдо рдЗрд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдирд╛рдо рдХреЗ рддрд╣рдд рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВред PIE, рдлрд┐рд░ рдХреЛрдб рдореЗрдВ GlovePIE рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╣рдорд╛рд░реЗ рдХрд╛рдо рдЖрдПрдЧрд╛ред рдЕрдЧрд▓рд╛ рдЪрд░рдг C # рдореЗрдВ рдЕрдкрдиреА рдЦреБрдж рдХреА рдХрдХреНрд╖рд╛ рд▓рд┐рдЦрдирд╛ рд╣реИ, рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рджрдмрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
using System; using System.Diagnostics; using System.Threading; using System.Runtime.InteropServices; class KeyEmulator { const UInt32 WM_KEYDOWN = 0x0100; const UInt32 WM_KEYUP = 0x0101; Process GlovePIE; public KeyEmulator() { if(GlovePIE == null) { GlovePIE = new Process(); GlovePIE.StartInfo = new ProcessStartInfo(тАЬpath_to_glovepie\\PIEFree.exeтАЭ, тАЬ-emulator.PIEтАЭ); if(!GlovePIE.Start()) throw new Exception(тАЬCan't start emulator processтАЭ); } } } 

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЖрдо рддреМрд░ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓ рд░рд╣реА рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛред рдпрд╣ рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕рдВрдХреЗрдд рднреЗрдЬреЗрдЧрд╛:
 [DllImport("user32.dll")] static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); public bool KeyDown(int key_id) { bool result = PostMessage(GlovePIE.MainWindowHandle, WM_KEYDOWN, (IntPtr)key_id, (IntPtr)0); Thread.Sleep(99); return result; } 

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

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

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


All Articles