繁体   English   中英

如何在自定义位置打开Tabtip键盘?

[英]How to open tabtip keyboard in a custom location?

如何在自定义位置打开Tabtip键盘?

这是我的代码:

Private tabtipProcess As Process

Private Sub t_Enter(sender As Object, e As EventArgs)
    tabtipProcess = Process.Start("tabtip")
End Sub

[如果OP决定改用第三方应用程序,则未删除的答案将提供解决方案]

-为了记录,您似乎无法以编程方式更改tabtip的位置。

您可以P / Invoke(也称为Platform Invoke )WinAPI的SetWindowPos()函数 ,并将进程的MainWindowHandle发送给它。 然后,您只需指定要放置窗口的坐标即可。

<DllImport("user32.dll", SetLastError:=True)> _
Private Shared Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As Integer) As Boolean
End Function

Const SWP_NOSIZE As Integer = &H0001

Private tabtipProcess As Process

Private Sub t_Enter(sender As Object, e As EventArgs)
    tabtipProcess = Process.Start("tabtip")
    tabtipProcess.WaitForInputIdle()
    SetWindowPos(tabtipProcess.MainWindowHandle, IntPtr.Zero, 300, 200, 0, 0, SWP_NOSIZE)
End Sub

上面的示例将窗口置于坐标(300,200)。

tabtipProcess.WaitForInputIdle()调用是必需的,因为它用于等待应用程序完成加载和创建窗口句柄。 没有它, tabtipProcess.MainWindowHandle很可能会返回0并在调用SetWindowPos()函数时导致错误。

传递SWP_NOSIZE标志告诉函数该窗口应保留其当前大小。

最终测试完我先前的答案后,我可以确认(如您所说)它不起作用,因此我做了一些研究。

还有一些其他人也想更改其位置,因此在阅读了几篇文章并且对自己进行了一些测试之后, tabtip应用程序似乎已设计为捕获某些窗口消息(更具体地说是WM_MOVE和/或WM_WINDOWPOSCHANGINGWM_WINDOWPOSCHANGED ),这使您无法使用标准方法以编程方式更改其位置或大小。

目前,似乎还没有办法修改其位置。

您可以通过更改tabtip的注册表值来实现。

像这样:

 My.Computer.Registry.SetValue(
    "HKEY_CURRENT_USER\SOFTWARE\Microsoft\TabletTip\1.7",
    "OptimizedKeyboardRelativeXPositionOnScreen",
    &HDB1D,
    Microsoft.Win32.RegistryValueKind.DWord
)
My.Computer.Registry.SetValue(
    "HKEY_CURRENT_USER\SOFTWARE\Microsoft\TabletTip\1.7", 
    "OptimizedKeyboardRelativeYPositionOnScreen",
    &H12016,
    Microsoft.Win32.RegistryValueKind.DWord
)

两个十六进制值是x和y的位置。

杰夫。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM