首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >VB.Net,按住shift键,并在某些功能完成后释放?

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

Stack Overflow用户
提问于 2014-05-04 02:57:26
回答 1查看 256关注 0票数 0

这有可能吗?

我想在一个外部应用程序(如fire fox)中按住shift键,然后在再次按下它时释放它,我想让它像caps按钮一样工作。

为了让它更容易理解,可能像这样

按下shift = Keys.Shift.hold = true

再次按shift键Keys.shift.hold = false

EN

回答 1

Stack Overflow用户

发布于 2014-05-04 03:23:11

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

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

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

您需要确保您的目标程序的进程完整性低于您的进程完整性-换句话说,如果您的进程不是以管理员身份运行的,请不要试图将事件提供给管理员级别的进程-但既然您提到了Firefox,我希望这对您来说不会是问题。

您需要像这样设置一个KEYBDINPUT structure

代码语言:javascript
代码运行次数:0
运行
复制
wVk = VK_SHIFT
dwFlags = 0 (this will press a key. You'll want KEYEVENTF_KEYUP instead for releasing it.)

然后,像这样设置一个INPUT structure

代码语言:javascript
代码运行次数:0
运行
复制
type = INPUT_KEYBOARD
ki = yourKeybdInputStruct

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

代码语言:javascript
代码运行次数:0
运行
复制
SendInput(1, &yourInputStruct, sizeof(yourInputStruct))

或者,您可以尝试使用VB.net SendKeys class。这个类有一些注意事项;最值得注意的是,

如果您的应用程序旨在通过各种键盘在国际上使用,则使用Send可能会产生不可预知的结果,因此应避免使用。

此外,官方文档没有提到单独使用修改键(Shift,Ctrl,Alt),似乎也不支持以您所描述的方式按住键,只是发送一个常规的击键(keydown-keyup)。

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

代码语言:javascript
代码运行次数:0
运行
复制
SendKeys.Send("+")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23448596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档