Click here to Skip to main content
15,889,034 members
Articles / Programming Languages / C#

Laser Gesture Recognition

Rate me:
Please Sign up or sign in to vote.
4.93/5 (84 votes)
9 Jan 20073 min read 322.2K   7.2K   177  
A quick article on setting up a simple, real-time laser gesture recognition application and using it to control Windows Media Player.
namespace dshow.Core
{
	using System;
	using System.Runtime.InteropServices;

	// IMediaEvent interface
	//
	// The IMediaEvent interface contains methods for retrieving event
	// notifications and for overriding the filter graph's default
	// handling of events.
	//
	[ComImport,
	Guid("56A868B6-0AD4-11CE-B03A-0020AF0BA770"),
	InterfaceType(ComInterfaceType.InterfaceIsDual)]
	public interface IMediaEvent
	{
		// Retrieves a handle to a manual-reset event that remains
		// signaled while the queue contains event notifications
		[PreserveSig]
		int GetEventHandle(
			out IntPtr hEvent);

		// Retrieves the next event notification from the event queue
		[PreserveSig]
		int GetEvent(
			out int lEventCode,
			out int lParam1,
			out int lParam2,
			int msTimeout);

		// Waits for the filter graph to render all available data
		[PreserveSig]
		int GetEvent(
			int msTimeout,
			out int pEvCode);

		// Cancels the filter graph manager's default handling of
		// a specified event
		[PreserveSig]
		int CancelDefaultHandling(
			int lEvCode);

		// Restores the filter graph manager's default handling of
		// a specified event
		[PreserveSig]
		int RestoreDefaultHandling(
			int lEvCode);

		// Frees resources associated with the parameters of an event
		[PreserveSig]
		int FreeEventParams(
			int lEventCode,
			int lParam1,
			int lParam2);
	}


	// IMediaEventEx interface
	//
	// IMediaEventEx adds methods that enable an application window
	// to receive messages when events occur
	//
	[ComImport,
	Guid("56A868C0-0AD4-11CE-B03A-0020AF0BA770"),
	InterfaceType(ComInterfaceType.InterfaceIsDual)]
	public interface IMediaEventEx
	{
		// Retrieves a handle to a manual-reset event that remains
		// signaled while the queue contains event notifications
		[PreserveSig]
		int GetEventHandle(
			out IntPtr hEvent);

		// Retrieves the next event notification from the event queue
		[PreserveSig]
		int GetEvent(
			out int lEventCode,
			out int lParam1,
			out int lParam2,
			int msTimeout);

		// Waits for the filter graph to render all available data
		[PreserveSig]
		int WaitForCompletion(
			int msTimeout,
			out int pEvCode);

		// Cancels the filter graph manager's default handling of
		// a specified event
		[PreserveSig]
		int CancelDefaultHandling(
			int lEvCode);

		// Restores the filter graph manager's default handling of
		// a specified event
		[PreserveSig]
		int RestoreDefaultHandling(
			int lEvCode);

		// Frees resources associated with the parameters of an event
		[PreserveSig]
		int FreeEventParams(
			int lEventCode,
			int lParam1,
			int lParam2);

		// Registers a window to process event notifications
		[PreserveSig]
		int SetNotifyWindow(
			IntPtr hwnd,
			int lMsg,
			IntPtr lInstanceData);

		// Enables or disables event notifications
		// 0 - ON, 1 - OFF
		[PreserveSig]
		int SetNotifyWindow(
			int lNoNotifyFlags);

		// Determines whether event notifications are enabled
		[PreserveSig]
		int GetNotifyFlags(
			out int lNoNotifyFlags);
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
India India

Comments and Discussions