Я хочу создать «наблюдатель» для перехвата события закрытия этой программы, чтобы сделать главное окно программы скрытым, а не закрытым, когда пользователи пытаются закрыть эту программу.
Нет события закрытия процесса, которое вы можете перехватить. Однако для GUI программ существует WM_CLOSE
и WM_SYSCOMMAND|SC_CLOSE
оконных сообщений, которые вы можете перехватить с помощью SetWindowsHookEx()
.
Я гуглил это, и кто-то говорит, что перехватить API, названный OpenProcess, будет работать.
Тот, кто сказал, что перехват OpenProcess()
является решением этой проблемы, либо ошибался, либо вы неправильно поняли, что это hook фактически использовался для.
Я попытался использовать C# lib под названием "EasyHook" и успешно внедрить удаленный процесс и перехватить MessageBeep API. Затем я попытался подключить OpenProcess и TerminateProcess, но методы этих двух методов никогда не вызывались.
Конечно, потому что вы пытались подключить их в процессе, который завершается, но это не так. откуда они вызываются, они вызываются в процессе, который выполняет завершение (ie, в самом диспетчере задач).
Если нет способа предотвратить завершение процесса с задачей manager
Если используется грубая сила «Завершить процесс (дерево)», то нет возможности отловить / заблокировать ее. Параметр «Завершить задачу» на вкладке «Приложение» пытается выполнить изящное завершение с помощью оконных сообщений, прежде чем оно прибегнет к грубой силе.
Есть ли какие-либо приемы, такие как перехват кнопки закрытия окна и т. Д. c.?
См. Мой первый комментарий выше.