В дополнение к ответам, касающимся интервала возврата... просьба об исправности. Определите свои коды выхода в перечислении с Флагами в подходящих случаях. Это делает отладку и обслуживание настолько легче (и, в качестве награды, можно ли легко распечатать коды выхода на экране справки - у Вас действительно есть один из тех, правильно?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
Если можете, попробуйте сохранить порядок окон, затем переместите приложение на передний план, снимите скриншот и очень быстро верните его назад. Может вызвать раздражающее мерцание, но это может быть лучше, чем ничего.
I ' я сделал то же самое, предоставив приложению, которое я хочу, сфокусироваться перед съемкой:
shell=win32com.client.Dispatch("Wscript.Shell")
success = shell.AppActivate(app_name) # Returns true if focus given successfully.
IIRC, не в Windows pre-vista - с Aero каждое окно имеет свой собственный буфер, но перед этим вы просто использовали бы свой метод получения прямоугольника. Я не уверен, поддерживает ли pywin32 Aero или нет.
Может быть вы можете поместить приложение за пределы экрана, затем сделать снимок экрана и вернуть его обратно?