1: using System;
2: using System.Runtime.InteropServices;
3: using System.Threading;
4: using System.Windows;
5: using ManagedNite;
6:
7: namespace HandTracking
8: {
9: class Program
10: {
11: [DllImport("user32.dll", SetLastError = true)]
12: [return: MarshalAs(UnmanagedType.Bool)]
13: public static extern bool SetCursorPos(int x, int y);
14:
15: private static XnMOpenNIContext _context;
16: private static XnMSessionManager _sessionManager;
17: private static XnMSelectableSlider2D _slider2D;
18: private static Thread _readerThread;
19: private static bool _shouldRun;
20:
21: static void Main()
22: {
23: Console.WriteLine("Iniciando acceso a Kinect ...");
24: _shouldRun = true;
25:
26: InitSensorInteraction();
27: InitThreadReader();
28:
29: Console.WriteLine("Kinect online. Saluda para comenzar");
30: Console.ReadLine();
31: _shouldRun = false;
32: }
33:
34:
35: #region Sensor Interaction
36: private static void InitSensorInteraction()
37: {
38: _context = new XnMOpenNIContext();
39: _context.Init();
40:
41: _sessionManager = new XnMSessionManager(_context, "Wave", "RaiseHand");
42: _slider2D = new XnMSelectableSlider2D((int)SystemParameters.PrimaryScreenWidth, (int)SystemParameters.PrimaryScreenHeight);
43: _slider2D.ItemHovered += Slider2DItemHovered;
44:
45: _sessionManager.AddListener(_slider2D);
46: }
47:
48: static void Slider2DItemHovered(object sender, SelectableSlider2DHoverEventArgs e)
49: {
50: Console.WriteLine("X: " + e.X + " Y: " + e.Y);
51: SetCursorPos(e.X, e.Y);
52: }
53:
54: #endregion
55:
56: #region Update Thread
57: private static void InitThreadReader()
58: {
59: _readerThread = new Thread(ReaderThread);
60: _readerThread.Start();
61: }
62: private static void ReaderThread()
63: {
64: while (_shouldRun)
65: {
66: var rc = _context.Update();
67: if (rc == 0)
68: _sessionManager.Update(_context);
69: }
70: }
71: #endregion
72: }
73: }