Основная проблема заключается в том, что вы передаете значения дескриптора с типом Long
. Это неверно, их нужно передавать через тип IntPtr
. Под хуками маркеры по сути являются указателями и различаются по размеру в зависимости от того, является ли процесс 32-битным или 64-битным.
Я не знаком с этим API, поэтому не знаю, верны ли остальные параметры или нет. Пример кода на PInvoke.Net предполагает, что некоторые из них должны быть напечатаны на что-то отличное от Long
Вероятно, здесь происходит то, что один из компьютеров, на котором вы работаете, является 64-разрядным, и вызов pinvoke работает, а другой - 32-разрядный, и вызов не выполняется из-за присущего дисбаланса стека.