The logon screen is an isolated desktop running under NT_AUTHORITY\SYSTEM where you don't have access.
To be able to use GUI on such private environment there are some shortcuts like
this[
^], but the definitive tool is
PsExec[
^] by SysInternal's Mark Russinovich. It uses a service helper to run programs on a remote machine, or on a local machine as NT_AUTHORITY\SYSTEM. The helper service opens a named pipe to communicate with local application to get commands and return status.
PsExec is not redistribuitable and sources are not available, but exists an open version called
PaExec[
^]. You can download it and have a look...
You should use PaExec to launch your app under NT_AUTHORITY\SYSTEM to have access to the DC of logon screen and capture immages. But as I said this is an isolated DC so to catch snapshots from user screen and system screen you have to run 2 instances of your app.