Windows实用程序,用于渲染我在屏幕上按下的键


52

我正在对一大群人进行远程培训,并且将介绍许多应用程序快捷键。

我已经看过MousePose在屏幕上显示的击键;Windows是否有类似的产品?

MousePose屏幕截图

MousePose的其他功能(精美的鼠标指针等)对我来说并不是真正有用的,只是按键的OSD。

Answers:


36

KeyPosé是Windows的MousePosé免费替代品。您可以在截屏中看到它的运行情况。

这是一个示例屏幕截图:

替代文字


@richard非常欢迎您!
约翰T

4
我认为这有一些问题。您无法更改显示键的位置,有时即使您不按任何键,灰色区域也会一直显示,并且不会显示胜利/超级键。涉及两个以上按键的组合(例如ctrl + alt + c)以一种奇怪的方式显示,例如首先是CTRL,然后是ALT(我想它应该显示CTRL + ALT),最后是CTRL + ALT + C。总比没有好,但我认为有更好的选择。
Alter Lagos

由于某些原因未注册Tab键...
laggingreflex

不注册WIN组合,不显示CTRL + SHIFT + ESC。嗯
Ev0oD 16-10-27

1
请在下方使用Carnac。我对两者进行了测试,Carnac为您提供了多种视觉选择。github.com/bfritscher/carnac/releases/tag/v3-beta
Kai Noack

13

我强烈推荐Carnac。这是一个托管在GitHub上的免费项目。

键盘记录和演示实用程序,用于演示,截屏,并帮助您成为更好的键盘用户。

它执行良好,设计合理,并且在GitHub上开源

屏幕截图

在此处找到具有修复和鼠标输入可视化效果的fork版本:https//github.com/bfritscher/carnac/releases/tag/v3-beta


有趣,但不如KeyPosé精美。
巴吉(Basj)

项目页面仅提供一个carnac.application文件,YouTube视频youtube.com/watch?v=qSUDfzUkwnc显示了一个文件Carnac.exe。不久之后,我意识到我可以carnac.application在Windows中启动,并且它可以下载并安装该程序。我还在这里找到了zip / exe:github.com/downloads/Code52/carnac/Carnac.zip
Kai Noack

2
@Basj Carnac比KeyPosé(仅将字母显示为纯文本)“漂亮”得多。使用Carnac,您可以更改所显示键的外观(字体大小,不透明度,颜色)。
Kai Noack

@KaiNoack我的意思是Carnac的默认样式不像Keyposé那样时尚/简约。默认设计应予以改善;)
Basj

如何更改按键显示区域的位置?我似乎可以找到任何文档。
jdhao

10

我想分享一下我的工具-keycastow。

https://brookhong.github.io/2014/04/28/keycast-on-windows.html

在此处输入图片说明


1
好东西!另外LICECap也很棒,不知道一个:)
LogicDaemon

@brookhong您是用什么来制作动画吉夫的?
里卡多C

@RicardoC是licecap,cockos.com/licecap
布鲁克·洪

Microsoft Security Essentials将其分类为威胁。那好吧!
拉斯

1
该工具不能作为二进制文件下载;您必须自己构建它,对我来说这是个问题,因为我没有许可。
Lqueryvg

5

为此,我编写了一个AutoHotkey_L脚本。

要运行它,请使用AutoHotkey_L直接dl),它是FOSS。另外,使用AutoHotkey,您可以将脚本编译为EXE(简单地称为)。Ahk2Exe.exe /inDisplayPressedKeyOnScreen.ahk/outDisplayPressedKeyOnScreen.exe

它可以在鼠标光标附近显示类似于OSD的按下键或标准工具提示。此外,它还显示鼠标单击和滚轮滚动。

(请注意,为了说明目的而进行了框架和模糊处理,脚本本身仅显示没有干扰的文本) 屏幕截图

这是脚本(将其复制并粘贴到记事本,另存为DisplayPressedKeysOnScreen.ahk):

#NoEnv
#SingleInstance force
#InstallKeybdHook

Global KeyStates, MouseState, ClickCount, IdleDelay, LargeDisplay

IdleDelay=3000

LargeDisplay=1
; 0 = Tooltip near mouse pointer
; 1 = Big pane at screen bottom

If LargeDisplay
{
;Initializing GUI
;modded func originated from http://www.autohotkey.com/board/topic/8190-osd-function/

SysGet Monitor, Monitor

GUIx := MonitorLeft
GUIw := MonitorRight - MonitorLeft
GUIh := (MonitorBottom - MonitorTop) * GUIw * 0.00003
If (GUIh > ((MonitorBottom - MonitorTop) * 0.3))
    GUIh := (MonitorBottom - MonitorTop) * 0.3

opacity=230
fname="Tahoma"
fsize:=GUIh * 0.65 ; really, pixel = 0.75 point, but with 0.75 lowercase letter with lower part (like "g") get cut
fcolor=cccccc
bcolor=222222
fformat="600"

Gui +LastFound +AlwaysOnTop +ToolWindow -Caption
Gui Margin, 0, 0 ;pixels of space to leave at the left/right and top/bottom sides of the window when auto-positioning.
Gui Color, ffffff ;changes background color
Gui Font, s%fsize% w%fformat%, %fname%

;    0x80 = SS_NOPREFIX -> Ampersand (&) is shown instead of underline one letter for Alt+letter navigation
Gui Add, Text, c%bcolor% Center +0x80 w%GUIw% h%GUIh% BackgroundTrans VblkOsdCtrlName, tesT test test
Gui Add, Text, c%fcolor% Center +0x80 w%GUIw% h%GUIh% BackgroundTrans VblkOsdCtrlName2 xp-3 yp-3 , tesT test test

WinSet ExStyle, +0x20 ; WS_EX_TRANSPARENT -> mouse klickthrough
WinSet TransColor, ffffff %opacity%
}


TrayTip %A_ScriptName%, To Exit`, press the Right Windows logo key.

Loop
{
Input SingleKey, L1 V M I B, {LControl}{RControl}{LAlt}{RAlt}{LShift}{RShift}{LWin}{AppsKey}{F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}{Left}{Right}{Up}{Down}{Home}{End}{PgUp}{PgDn}{Del}{Ins}{BS}{Capslock}{Numlock}{PrintScreen}{Pause}
GetKeyStates()

;    IfInString ErrorLevel, EndKey
;   CollectedText .= (CollectedText =="" ? "" : " + " ) . SubStr(ErrorLevel, 8)
If SingleKey
{
    SingleKeyText=
    If (SingleKey==Chr(27))
    SingleKeyText=Esc
    Else If (SingleKey==Chr(32))
    SingleKeyText=Space

    If (GetKeyState("LControl", "P") || GetKeyState("RControl", "P"))
    {
    If (SingleKey==Chr(10) && EnterPressed)
        SingleKeyText=Enter
    Else If (SingleKey >= Chr(1) && SingleKey <= Chr(26)) ; With "M" in Input, Ctrl-A through Ctrl-Z correspond to Chr(1) through Chr(26)
        SingleKeyText := Chr(Asc("A")-1+Asc(SingleKey))
    } Else {
    If (SingleKey==Chr(10))
        SingleKeyText=Enter
    }

    If Not SingleKeyText
    SingleKeyText:=SingleKey
    ShowKeys(KeyStates . SingleKeyText)
;    . (MouseState ? "`n" . MouseState : "")
    EnterPressed=0
    GoSub ClearMouseState
} Else {
    ShowKeys(SubStr(KeyStates, 1, -3) . (MouseState ? " + " . MouseState : ""))
}
SetTimer TooltipOff, % -IdleDelay
}

RWin::
ExitApp

~*Enter::
EnterPressed=1
return

~*LButton::
~*RButton::
~*MButton::
~*XButton1::
~*XButton2::
MouseState := "Mouse " . SubStr(A_ThisHotkey, 3) . " Pressed"
MouseTooltip()
return

~*WheelDown::
~*WheelUp::
~*WheelLeft::
~*WheelRight::
MouseState := "Mouse " . SubStr(A_ThisHotkey, 3)
MouseTooltip()
return

~*LButton Up::
~*RButton Up::
~*MButton Up::
~*XButton1 Up::
~*XButton2 Up::
;    MsgBox %A_PriorHotkey%`n%A_ThisHotkey%
If (A_PriorHotkey == SubStr(A_ThisHotkey, 1, -3) && A_TimeSincePriorHotkey < 200)
{
    ClickCount++
    Suffix := " Clicked " . ClickCount . "x"
} Else {
    ClickCount:=0
    Suffix := " Released"
}
MouseState := "Mouse " . SubStr(A_ThisHotkey, 3, -3) . Suffix
MouseTooltip()
return

MouseTooltip(){
GetKeyStates()
ShowKeys(KeyStates . MouseState)
SetTimer ClearMouseState,  % -IdleDelay
SetTimer TooltipOff, % -IdleDelay
}

ClearMouseState:
MouseState=
ClickCount=0
return
TooltipOff:
If LargeDisplay
    Gui Hide
Else
    Tooltip
return

GetKeyStates() {
KeyStates := ""
    . ( GetKeyState("LControl", "P") ? "LControl + " : "" )
    . ( GetKeyState("RControl", "P") ? "RControl + " : "" )
    . ( GetKeyState("LAlt", "P") ? "LAlt + " : "" )
    . ( GetKeyState("RAlt", "P") ? "RAlt + " : "" )
    . ( GetKeyState("LShift", "P") ? "LShift + " : "" )
    . ( GetKeyState("RShift", "P") ? "RShift + " : "" )
    . ( GetKeyState("LWin", "P") ? "LWin + " : "" )
    . ( GetKeyState("AppsKey", "P") ? "AppsKey + " : "" )
    . ( GetKeyState("F1", "P") ? "F1 + " : "" )
    . ( GetKeyState("F2", "P") ? "F2 + " : "" )
    . ( GetKeyState("F3", "P") ? "F3 + " : "" )
    . ( GetKeyState("F4", "P") ? "F4 + " : "" )
    . ( GetKeyState("F5", "P") ? "F5 + " : "" )
    . ( GetKeyState("F6", "P") ? "F6 + " : "" )
    . ( GetKeyState("F7", "P") ? "F7 + " : "" )
    . ( GetKeyState("F8", "P") ? "F8 + " : "" )
    . ( GetKeyState("F9", "P") ? "F9 + " : "" )
    . ( GetKeyState("F10", "P") ? "F10 + " : "" )
    . ( GetKeyState("F11", "P") ? "F11 + " : "" )
    . ( GetKeyState("F12", "P") ? "F12 + " : "" )
    . ( GetKeyState("Left", "P") ? "Left + " : "" )
    . ( GetKeyState("Right", "P") ? "Right + " : "" )
    . ( GetKeyState("Up", "P") ? "Up + " : "" )
    . ( GetKeyState("Down", "P") ? "Down + " : "" )
    . ( GetKeyState("Home", "P") ? "Home + " : "" )
    . ( GetKeyState("End", "P") ? "End + " : "" )x
    . ( GetKeyState("PgUp", "P") ? "PgUp + " : "" )
    . ( GetKeyState("PgDn", "P") ? "PgDn + " : "" )
    . ( GetKeyState("Del", "P") ? "Del + " : "" )
    . ( GetKeyState("Ins", "P") ? "Ins + " : "" )
    . ( GetKeyState("BS", "P") ? "BS + " : "" )
    . ( GetKeyState("Capslock", "P") ? "Capslock + " : "" )
    . ( GetKeyState("Numlock", "P") ? "Numlock + " : "" )
    . ( GetKeyState("PrintScreen", "P") ? "PrintScreen + " : "" )
    . ( GetKeyState("Pause", "P") ? "Pause + " : "" )
}

ShowKeys(text) {
If LargeDisplay
{
    Global blkOsdCtrlName, blkOsdCtrlName2, MonitorLeft, MonitorRight, MonitorBottom, MonitorTop, GUIx, GUIy, GUIh

    CoordMode Mouse, Screen
    MouseGetPos MouseX, MouseY

    If ((!GUIy) || (MouseX >= MonitorLeft && MouseX <= MonitorRight && MouseY >= GUIy && MouseY <= (GUIy+GUIh)) ) {
    If (MouseY < (MonitorTop + (MonitorBottom - MonitorTop) / 2) )
        GUIy := MonitorBottom - (MonitorBottom - MonitorTop) * 0.2
    Else
        GUIy := MonitorTop + (MonitorBottom - MonitorTop) * 0.2
    }

    GuiControl Text, blkOsdCtrlName, %text%
    GuiControl Text, blkOsdCtrlName2, %text%

    Gui, Show, x%GUIx% y%GUIy% NoActivate
} Else {
    Tooltip % text
}
}

我试图在Win7 64位上启动“ DisplayPressedKeyOnScreen.exe”。我收到错误消息Windows cannot access the specified device, path, or file. You may not have the appropriate permissions to access the item.exe文件是独立文件吗?还是我必须事先安装AutoHotkey?
Kai Noack 2014年

@EchtEinfachTV我确定它是独立的。另外,我刚刚下载并成功在32位Win 8.1上启动了它。我们可以比较MD5吗?我的文件是d788516439ed743b3553eb3ae7b9082c,文件大小是332288字节。
LogicDaemon 2014年

我从上面链接下载的文件显示了MD5:D788516439ED743B3553EB3AE7B9082C,文件大小为332288。因此,它应该是完全相同的文件。同样奇怪的是,在Windows 7中出现错误消息后,病毒扫描程序Panda Cloud弹出,将“恶意”文件移至隔离区。
Kai Noack 2014年

@EchtEinfachTV显然是在您尝试启动文件时防病毒功能拒绝了对文件的访问,这就是为什么您收到无法访问文件的Windows消息的原因。尽管我不知道为什么它会阻止,但是您可以检查:它是标准的autohotkey二进制文件,与纯文本(但已重新格式化)脚本源结合在一起。
LogicDaemon

1
@Amina ty,我想这是我的保管箱文件夹的意外移动。将修复我的帖子。
LogicDaemon

2

您可以使用屏幕键盘显示Windows附带的按键。当您在物理键盘上键入内容时,屏幕上会高亮显示该键。


1
谢谢,我已经尝试过了,但是突出显示的唯一修饰键是Shift键。
richardtallent

在Windows 7中,在开始菜单搜索框中键入“键盘”,然后选择“屏幕键盘”
xhafan

它不适合我(赢10个)。
NounVerber

1

Presentation Pointer是Windows的MousePosé的最佳替代方案。它提供了指针效果,鼠标单击效果,击键,甚至允许您在屏幕上自由绘制但不能锁定屏幕。这确实是该程序的优势。


1
...目前为30美元。
miroxlav's


1

我已经编写了一个名为QiPress的小型Windows应用程序。它具有可更改外观,显示或忽略某些键组甚至添加静态文本(例如,您自己的名称或公司名称)的控件。可以通过禁用点击并单击并拖动弹出窗口来进行定位。您可能还不需要其他功能,但是它可以满足您的所有需求。


3
当前30 USD
miroxlav '17

要澄清版本,请执行以下操作:免费版本:供个人,非商业用途。某些高级功能已禁用(例如各种语言的键盘,多台显示器,操纵杆显示等)。没有时间限制。付费版本:所有用途。启用所有高级功能。没有时间限制。
aalapshah

0

您可以使用PassMark KeyboardTest(30天免费评估版,然后购买US $ 24.00)。

在此处输入图片说明

仅供参考:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.