PDA

Просмотр полной версии : Обработка ошибок WinAPI в C#


Dmiii
19.12.2011, 21:14
Пишу программу на C#, нужно работать с окнами посторонних процессов (тот же Айон). Работаю через unmanaged вызовы функций WinAPI, по хендлам. Все ок, но бывает что игра вылетает, и при обращении по устаревшему хендлу вылетает и прога. Установка собственного UnhandledExceptionEventHandler, игнорящего исключения, не помогает. Как корректно решать такую проблему?

// replacing default exception handler
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(LastChanceHandler);

SeregaZ
19.12.2011, 23:37
насколько часто происходит обращение к этому окну по хендлу? если не слишком часто, попробуй перед стартом использования - получить список хендлов всех окон, и сравнить со старым хендлом.
типа если в списке новых хендлов старый присутствует, то выполняем дальше
если не присутствует, то алерт юзеру, дескать окно закрылось, надо запустить по новой.

Dmiii
20.12.2011, 19:58
Даж если проверять, все равно существует малая вероятность, что окно закрывается в момент проверки. Приложение фоновое, крутится 24/7, поэтому хотелось 100% вариант (вроде try-catch, но для WinAPI).

Вдогонку, существует функция проверки валидности хендла окна?

alexteam
20.12.2011, 20:56
function IsWindow(hWnd: HWND): BOOL; stdcall; external 'user32.dll' name 'IsWindow';