我正在尝试禁用软件中的特定默认密钥,该密钥具有脚本扩展程序提供的代码。脚本扩展程序具有void函数,该函数要求特定于脚本扩展程序环境的单例(代码示例1)。为了尝试使用C ++,我尝试转发原始代码,方法是为我要修改的游戏尝试插入键(0x2D)(根据IDA和Ghidra,此键为0x70)(代码示例2)。该代码通过main.cpp内部的布尔查询加载功能(代码示例3)启用。
所有头文件均已正确实现,但代码不执行任何操作。该插件是.dll,我确实获得了一个跟踪日志,该.dll实际上已加载,但是该功能无法正常工作。另外,对我来说,调试跟踪的唯一方法是通过消息,因为我需要向上述游戏软件添加调试器,而我不能。
那么基本的主要问题是?如何正确解决所说的按键钩,以禁用插入键?而且由于我是该游戏特定的C ++的新手,所以我什至都不知道从哪里开始,因为这似乎不像将C ++用于Civilization V那样容易。
谢谢
example 1
void DIHookControl::SetKeyDisableState(UInt32 keycode, bool bDisable, UInt32 mask)
{
if(!mask) mask = kDisable_All; // default mask value
if(keycode < InputMap::kMaxMacros)
{
KeyInfo * info = &m_keys[keycode];
if(mask & kDisable_User) info->userDisable = bDisable;
if(mask & kDisable_Script) info->scriptDisable = bDisable;
}
}
example 2
DIHookControl::GetSingleton().SetKeyDisableState(0x70, true, 0);
example 3
bool Plugin_Load(const Interface* a_skse)
{
_MESSAGE("[MESSAGE] Unbound Keys Mod loaded");
//DIHookControl::SetKeyDisableState(UInt32 keycode, bool bDisable, UInt32 mask);
DIHookControl::GetSingleton().SetKeyDisableState(0x70, true, 0);
return true;
}