Мой код очень похож на этот: http://www.codekeep.net/snippets/ea68475b-c33e-4a71-8008-90f63d7e918d.aspx
Учитывая, что Print Screen уже делает снимок экрана и помещает его в буфер обмена, рассматривали ли вы вместо этого мониторинг буфера обмена на предмет изменений?
Print Screen
Посмотрите на функцию API SetClipboardViewer . Для пример .
Когда вы делаете что-то, что может вызвать UAC - почему бы сначала не отменить регистрацию горячей клавиши, а затем зарегистрировать ее снова?