Привязываю некую функцию к ключу, при не правильном серийнике выскакивает сообщение что нужен валидный ключ и приложение закрывается.
А можно настроить так что бы не было сообщения и приложение не закрывалось? Что бы просто эта функция не срабатывала и все?
Есть только один вариант - перед вызовом привязанной к ключу функции анализировать состояние серийника и дальше самому принимать решение:
if (VMProtectGetSerialNumberState() != 0)
Message("Error", ...);
else
LockedFunction();