I'm not aware of what exactly DSPF is, but solutions could include the following:
1. Time the amount of time from the beginning of data entry (first key entered) to completion. If the timer takes more than a small amount of time then data entry is occurring via the keyboard. I have used this method many times to capture data entry in a buffer, time the next entry, and parse data differently based on manual or scanned entry.
2. DougP's solution, but based on your comment about additional information, I don't think this is possible.
3. Some scanners are programmable and you can add identifying characters via the programming to the data that is put in to the scanner. If you don't have this ability maybe you have the ability to return the data plus any check digits, you could then use the standardized algorithm to verify the check digits, remove these digits and move forward.
4. Train people not to do manual entry.
5. Fire people. There is only so much you can do in your program to prevent people from doing something. At some point you need to threaten, then fire the people who don't follow instructions. As a consultant, the number one reason I convince clients not to develop custom solutions is because they were planning on spending thousands of dollars to program around a single individual or group of people that nobody wants to confront.