好的,所以我写了一个程序设置为10毫秒的程序,不断检查按钮的状态。当按钮关闭时,我希望它按下我设置的键盘按键,然后释放按钮,我想要设置按键。
Iv尝试了Sendkeys.send
,但由于程序是在计时器上,它只会继续发送垃圾邮件。我也一直试图使用keybd_event(87, 0, 2, 0)
。有了这个,它按下W键,但只有一次,然后出现这个错误......
PInvokeStackImbalance
对PInvoke
函数'Mercury!Mercury.Player1::keybd_event'
的调用使堆栈失衡。这可能是因为托管PInvoke
签名与非托管目标签名不匹配。检查PInvoke
签名的调用约定和参数是否与目标非托管签名匹配。
我不知道这意味着什么,但如果知道它有用,有人可以解释一下吗?谢谢 那么是否有可能在计时器内按下一个键?
提前感谢任何可以提供帮助的人。
答案 0 :(得分:0)
根据回复发表评论作为回答:
OMG,谢谢你!将Long改为Integer正是我所做的 通缉。你不知道多长时间以来一直在寻找这个答案 哈哈。谢谢!
当您的API声明中包含错误的数据类型时,通常会发生PInvokeStackImbalance。很可能你选择了一个适用于VB6的API而没有意识到它。通常,您需要将Long更改为Integer。向我们展示您的API声明,我们可以帮助您更正。