Чтение комментариев another question, я вижу, что существует риск столкнуться с условиями гонки при использовании метода Windows API GetWindowThreadProcessId
. Насколько велика вероятность этого?GetWindowThreadProcessId Состояние гонки Риск
Позвольте мне указать, в чем я пытаюсь. Я пишу приложение для хронометража на C# для личного использования. Мое намерение состояло в том, чтобы обнаружить приложение (через вызовы Win API), когда активное окно было изменено, чтобы я мог регистрировать время против используемого приложения. Я уже установил код, который определяет, когда изменяется активное окно; теперь я пытаюсь определить процесс, связанный с этим окном. Я нашел несколько сообщений на SO, которые указывают на GetWindowThreadProcessId
в качестве решения, но, как я уже упоминал, существует потенциальная проблема с его использованием. Если GetWindowThreadProcessId
не является безопасным способом, то я открыт для других альтернатив.
Моя надежда состояла в том, чтобы сохранить код целиком на C#, но я не (полностью) против него, чтобы переместить его части в C/C++, если это необходимо.
Спасибо!
Честно говоря, это то, о чем я думал. HWnd не изменяется, пока окно остается открытым, правильно? Если это так, то я думаю, что единственный раз, когда я должен беспокоиться об этом при закрытии окна. –
Да, это так. Хорошо справляйтесь с ошибками, и это не проблема. Windows пытается избежать повторного использования дескрипторов. У вас не будет проблем. –