当前位置: 首页 > 编程语言 > C#

从任何进程中获取密钥共享

时间:2023-04-11 12:10:33 C#

从任何进程中获取密钥我在网上看到了很多解决方案,但没有一个完全符合我的需求。当我的应用程序在后台运行时,在给定进程(不是我的控制台应用程序)中按任意键的最佳/最简单方法是什么?我不需要修饰符或任何东西。如果您不特别关心按下哪个键,最简单的方法是调用GetAsyncKeyState。它相当有限,因为它不会挂接键盘并且需要您连续调用它。在我看来,最好的办法就是勾住键盘。使用SetWindowsHookEx,您实际上可以显式指定与挂钩进程关联的线程的标识符,以便您可以挂钩特定的进程键(请参阅dwThreadId)。这是一个你可以使用的类(最初在Micrsoft博客上找到,但我现在似乎找不到作者的名字了!)publicdelegateIntPtrKeyboardProcess(intnCode,IntPtrwParam,IntPtrlParam);publicsealedclassKeyboardHook{publicstaticeventEventHandlerKeyPressed;私人常量intWH_KEYBOARD=13;私人常量intWM_KEYDOWN=0x0100;privatestaticKeyboardProcesskeyboardProc=HookCallback;privatestaticIntPtrhookID=IntPtr.Zero;publicstaticvoidCreateHook(){hookID=SetHook(keyboardProc);}publicstaticvoidDisposeHook(){UnhookWindowsHookEx(hookID);}privatestaticIntPtrSetHook(KeyboardProcesskeyboardProc){使用(ProcesscurrentProcess=Process.GetCurrentProcess())使用(ProcessModulecurrentProcessModule=currentProcess.MainModule){returnSetWindowsHookEx(WH_KEYBOARD,keyboardProc,GetModuleHandle(currentProcessModule.ModuleName),0);}}privatestaticIntPtrHookCallback(intnCode,IntPtrwParam,IntPtrlParam){if(nCode>=0&&wParam==(IntPtr)WM_KEYDOWN){intvkCode=Marshal.ReadInt32(lParam);if(KeyPressed!=null)KeyPressed(null,newKeyPressedEventArgs((Keys)vkCode));}返回CallNextHookEx(hookID,nCode,wParam,lParam);}[DllImport("user32.dll",CharSet=CharSet.Auto,SetLastError=true)]privatestaticexternIntPtrSetWindowsHookEx(intidHook,KeyboardProcesslpfn,IntPtrhMod,uintdwThreadId);[DllImport("user32.dll",CharSet=CharSet.Auto,SetLastError=true)]privatestaticexternIntPtrCallNextHookEx(IntPtrhhk,intnCode,IntPtrwParam,IntPtrlParam);[DllImport("kernel32.dll",CharSet=CharSet.Auto,SetLastError=true)]privatestaticexternIntPtrGetModuleHandle(stringlpModuleName);[DllImport("user32.dll",CharSet=CharSet.Auto,SetLastError=true)][返回:MarshalAs(UnmanagedType.Bool)]privatestaticexternboolUnhookWindowsHookEx(IntPtrhhk);}publicclassKeyPressedEventArgs:EventArgs{publicKeysKeyCode{get;放;}publicKeyPressedEventArgs(KeysKey){键码=键;}}通过控制台应用程序实现:classProgram{staticvoidMain(string[]args){KeyboardHook.CreateHook();KeyboardHook.KeyPressed+=KeyboardHook_KeyPressed;应用程序运行();KeyboardHook.DisposeHook();}staticvoidKeyboardHook_KeyPressed(objectsender,KeyPressedEventArgse){Console.WriteLine(e.KeyCode.ToString());您正在寻找的是全局键盘挂钩您可以在MSDN上找到更多信息和示例。哦,所以你在寻找老式游戏术语中的“Autofire”?与其编写自己的键盘挂钩应用程序(除非您这样做是为了乐趣/刺激/练习),您可能想看看AutoIt或AutoHotkey,它们都非常适合键盘/鼠标自动化。例如,请参阅此线程...http://www.autohotkey.com/board/topic/40598-autofire-keyboard/这就是C#学习教程的全部内容:从任何进程中获取密钥共享,如果它对您有帮助的话有用且需要了解更多C#学习教程,希望大家多多关注—本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢