I'm currently working on a project where I need to monitor all of the user's actions. I need to monitor information such as:

-Active window (foreground) process name and window title

-Keyboard input (I believe I can use hooks for this)

-Mouse clicks (again, hooks)

-When the user clicks a mouse button or enters keyboard input, I also need to know the type of control the clicks or input is being sent to (is it a text box? check box? radio?) and the window title and process the control is contained in

-Start menu actions

-Desktop actions (for instance, when the user right clicks the recycle bin and clicks an option from the right click menu, or when a user double clicks a desktop icon)

-Explorer actions (i.e. determine which icon is clicked from the My Computer window; monitor which files or folders are being opened, etc.)

I have seen programs such as AutoIt and AHK monitor information like this via window info and "spy" tools, but I have no idea how to determine information of that nature. Tips? Suggestions? Any and all code will be helpful. Thanks!