Someone's current salary is none of your business, it's that simple and as a block of reasonably intelligent professionals we could simply all agree to never supply that information to the company hiring.
Note that almost all of the risk at the time of a job change is already born by the employee, the employer using a recruiter is actively looking to dislodge employees elsewhere and has a few tools at his/her disposal to effect this.
Since recruiters are paid by the future employer they should be considered an extension of that employer and in no way are they to be taken to be independents or objective, their job is simply to dislodge you for the minimum amount required.
If you want to know that your employer and the candidate are on the same page then why don't you, the person initiating the contact disclose the range of salary offered plus or minus 10% so the prospective employee can decide whether or not you're on the same page? That's because you'd like to snag them for a little bit over what they are currently making, and you'd be happier if you could deliver a 'gem' well under the budget your employer has set aside. You might even get a bonus for that.
If 95% of your software engineering candidates have no qualms about sharing their salary then that is what should change if you continue to game the process by asking such questions. What a software engineer makes is their private information, and asking for it is just another means of price-fixing between employers.
And those candidates that challenge that requirement are not more trouble then they're worth, they are the only ones that apparently understand your game enough to not be easy marks and that is why you feel they are more trouble than they are worth because it isn't easy money.