Сценарии я использую IDisposable: очистите неуправляемые ресурсы, откажитесь от подписки для событий, близкие соединения
идиома, которую я использую для реализации IDisposable ( не ориентированный на многопотоковое исполнение ):
class MyClass : IDisposable {
// ...
#region IDisposable Members and Helpers
private bool disposed = false;
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing) {
if (!this.disposed) {
if (disposing) {
// cleanup code goes here
}
disposed = true;
}
}
~MyClass() {
Dispose(false);
}
#endregion
}
Вот довольно полный пример того, как реализовать средство поиска шпионов ++.
WindowFromPoint
или ChildWindowFromPoint
API-функции.
Не цитируйте меня, но я считаю, что шпион ++ установит ловушку WH_CALLWNDPROC. Затем ему отправляются все сообщения WM_MOUSEMOVE, прежде чем они достигнут своих целевых окон. Таким образом, как только вы наводите курсор мыши на окно, шпион ++ получает сообщение о том, какое окно.