c# – 如何将一些按键转换为其他按键?
我对考试作弊有很好的想法.我的学校使用非常旧的IDE(想想Turbo Pascal,Turbo C和其他80年代的IDE),我想做的是:
>在后台启动我的程序 我找到了Stephen Toub’s篇关于记录密钥的文章,我认为这将是构建这个“工具”的良好开端.拦截系统中按下的所有按键是否有比SetWindowsHookEx更好的替代方法?代码是否会被防病毒程序标记为可疑程序?如果是这样,还有什么我可以用来实现这一点而不被防病毒软件标记?是否需要管理员权限? 我知道你们中的一些人会说,如果我对学习的兴趣与避免学习一样多,我会做得很好,但我想尝试一下. 编辑:我添加了一个赏金,我对捕获击键的一些技术感兴趣(我对低级挂钩或高级东西不感兴趣 – 基本的东西很好),主要是方法名称和一些文档链接.我还想知道它们是否会像防病毒一样出现恶意软件. 解决方法
神!前几天我刚刚找到了完美的课程..花了一些时间才找到原始来源:
http://www.codeproject.com/KB/cs/globalhook.aspx 我单独使用此(和SendKeys)完全满足您的需要,您需要使用Handle = true来阻止原始密钥消息. SendKeys有点难看……如果您愿意,可以寻找替代品……但SendKeys会为您效劳. 使用SendKeys,它是这样的: private void HookManager_KeyDown(object sender,KeyEventArgs e) { if (e.KeyCode == Keys.D){ e.Handled = true; SendKeys.Send("F"); } } 我实际上也使用这种方法来确定什么样的prccess’窗口是焦点,所以如果你在另一个应用程序上,应用程序将什么都不做: /// <summary> /// The GetForegroundWindow function returns a handle to the foreground window. /// </summary> [DllImport("user32.dll")] static extern IntPtr GetForegroundWindow(); static bool IsProcessFocused(string processname) { if (processname == null || processname.Length == 0) { throw new ArgumentNullException("processname"); } Process[] runninProcesses = Process.GetProcessesByName(processname); IntPtr activeWindowHandle = GetForegroundWindow(); foreach (Process process in runninProcesses) { if (process.MainWindowHandle.Equals(activeWindowHandle)) { return true; } } // Process was not found or didn't had the focus. return false; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |