VB.Net,按住shift键,在某些功能完成后释放?

时间:2014-05-03 18:57:26

标签: vb.net shift

这可能吗?

我想在外部应用程序(例如火狐)中按下我的班次 当我再次按下时释放它, 我想让它像帽子按钮一样工作。

让它更容易理解, 也许像是

按下班次 Keys.Shift.hold = true

再次按下

班次 Keys.shift.hold = false

1 个答案:

答案 0 :(得分:1)

预先为伪代码道歉;我不知道VB.net。如果您对C ++感到满意,可以调整this question中的代码,我将其用作参考。

您可以使用SendInput Windows API。根据函数的描述,它

  

合成击键,鼠标移动和按钮点击。

需要确保您的目标程序的流程完整性低于您的目标程序 - 换句话说,如果您的流程未以管理员身份运行,请勿尝试向管理员提供事件级别的过程 - 但是既然你提到了Firefox,我不认为这对你来说是一个问题。

您需要设置KEYBDINPUT structure,如下所示:

wVk = VK_SHIFT
dwFlags = 0 (this will press a key. You'll want KEYEVENTF_KEYUP instead for releasing it.)

然后,设置INPUT structure,如下所示:

type = INPUT_KEYBOARD
ki = yourKeybdInputStruct

现在将整个INPUT结构传递给SendInput

SendInput(1, &yourInputStruct, sizeof(yourInputStruct))

或者,您可以尝试使用VB.net SendKeys class。这堂课有一些警告;最值得注意的是,

  

如果您的应用程序适用于各种键盘的国际使用,则使用Send可能会产生不可预测的结果,应该避免使用。

此外,官方文档没有提及单独使用修改键(Shift,Ctrl,Alt),也不支持按照您描述的方式按住键,只需发送常规按键(keydown-keyup) )。

但是,如果您愿意处理这些问题,可能会有效:

SendKeys.Send("+")