Set monitor profile/resolution based on whether a laptop is docked or not?

This wouldn't be the easiest solution, but what should work is using the task scheduler. First, check the event logs, I would imagine that something as significant as a dock connecting or disconnecting would be logged somewhere there. Once you've found the event for the docking, click on it, and you should have the option to attach a task to this event. Then, in the action of the task, trigger the resolution change (see Any way of changing Windows screen resolution via command line? ), at least one of those methods should work with Windows 8. Then just do the same thing again but for the undocking event. It's a bit of work to set up at the beginning, but once that's done, it should work pretty seamlessly.