See the RequestPrint() event. Your application receives this event with PRINT_MSG_END, if a print was successfully completed.
Note: this indicates that the print job was completely handed over to the print-spooler. It is still possible for the user to cancel the print-job in the spooler.