C#非常简单的键盘钩子
im试图在C#中创建一个自定义宏程序,我想知道如何创建一个低级键盘钩.我环顾四周,发现了一些,但我不明白它们的工作方式或如何自定义:/ 任何人都可以告诉我如何创建一个基本上可以做到的键盘钩: 按下任何键,int键代码将设置为方法(我认为VK代码是我需要的?) 我在网上发现的Exampels似乎太复杂了:/ 谢谢:) 解决方案 一个简单的C#全球低级键盘挂钩在CodeProject上似乎似乎是差不多.当我搜索"键盘钩"时,这是Google上的第二次打击,而当我搜索您的确切标题时,这是第一个. 你尝试过吗? 其他解决方案 我在代码项目上写了一个原始输入示例>在这里,这可能是起点.
20 2024-04-26
编程技术问答社区
如何使用Global Hook
我尝试使用全局钩,当我输入using gma.System.Windows;时,它没有识别GMA?我需要做什么? 解决方案 看起来您可能正在使用其他解决方案 如果您想呆在C#世界内,则仅限于低级钩子.有一些代码在这里
30 2024-04-26
编程技术问答社区
本地键盘钩子终止了目标进程
我正在尝试将 local 键盘挂钩使用来自托管C#代码的C ++ DLL的过程,如下: public class KeyboardHook { [UnmanagedFunctionPointer(CallingConvention.StdCall)] public delegate IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam); [DllImport("DLL.dll", CallingConvention = CallingConvention.Cdecl)] protected static extern IntPtr Install(int idHook, IntPtr windowHandle, HookCallback callback); private IntPtr instance; private HookCallback handler
18 2024-04-26
编程技术问答社区
C#在不同的线程中接收键盘钩子的回调
我写了一些程序.它通过setWindowShookex连接用户输入.而且效果很好. ,然后我想知道如何在不同线程中实现Windershook,以学习C#. 但是我刚在C#中,所以我找不到答案. 帮助我. 谢谢. 编辑 这是我的Inputhook类.一些代码被缩写. public class InputHooker { public delegate IntPtr inputHookedDelegate(int nCode, IntPtr wParam, IntPtr lParam); public inputHookedDelegate keyHookHandler; public InputHooker() { keyHookHandler = onKeyHooked; } public void StartInputHook() { using (
10 2024-04-25
编程技术问答社区
主要控制关闭儿童
我有一个MainControl包含一个ChildControl. ChildControl有一个隐藏按钮可以隐藏自身. 当隐藏时,我希望MainControl挂接事件并将其处置. 主控制 ChildControl>隐藏按钮 无法弄清楚我应该如何连接. 有小费吗?谢谢! 解决方案 您可以创建一个事件,该事件将通知主要控件隐藏子女控制,并且在您的主要控件中处理事件,您可以处置您的控件. 以下是如何为隐藏动作创建事件的小示例代码. class MainControl { ChildControl childControl; public MainControl() { childControl = new ChildControl(); childControl.VisibilityChanged += childControl_Visibi
20 2024-04-25
编程技术问答社区
钩住c#窗口服务应用程序的窗口事件不工作
我正在尝试开发一个应用程序,该应用程序将挂钩Windows事件并通知我何时进行.活动窗口已更改.我正在使用Win7 64与.NET 4.0 vs 2010 为此,我制作了一个项目的窗口服务类型,在其中创建了一个服务安装程序,然后使用User32.dll的SetWineVenthook注册为事件的"模板服务"项目的OnStart方法.除了我没有通过回调方法传递给setwineventhook的事实,一切似乎都很好. 我的代码看起来像这样: protected override void OnStart(string[] args) { workerThread = new Thread(OnTimer); workerThread.Start(); } public void OnTimer() { UserWatchdog userWatchdog = new UserWatchdog(); UserWatchdog.Subscri
10 2024-04-25
编程技术问答社区
UWP中的鼠标和键盘挂钩:原始输入VS按键事件VS全局挂钩
我想在UWP应用中挂起鼠标和键盘,我想知道原始输入,全局钩和简单的XAML密钥事件. 简单地说,我正在开发一个UWP应用程序,该应用程序会流传输游戏(使用云服务器渲染,例如Nvidia Grid),我想连接用户事件(键盘和鼠标)来告诉我的服务器用户是用户在游戏中移动(例如). 我想到了几种方法: 在C ++/CX中创建Windows运行时组件,该组件由我的通用应用在C#中消费.该组件将使用原始输入或全局挂钩来提高鼠标或键盘事件,然后将其发送回我的UWP应用程序. 只需使用关键事件,例如在网格或另一个UI元素上的键盘和指针事件并收听. 使用套接字连接将输出发送到我的服务器. 表演和简单性的最佳解决方案是什么? 解决方案 似乎只允许关键事件在UWP中输入. 其他解决方案 您是否尝试过这样的顶部挂钩? Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown; Window.Curren
44 2024-04-24
编程技术问答社区
C#钩子hwnd总是0
我在以下回调上附带了一个钩子.但是,它可以很好地发射,但是,对于Mousehookstruct而言,HWND总是为零. private static IntPtr SetHook(LowLevelMouseProc proc) { using (Process curProcess = Process.GetCurrentProcess()) using (ProcessModule curModule = curProcess.MainModule) { IntPtr ptr = GetModuleHandle(curModule.ModuleName); return SetWindowsHookEx(WH_MOUSE_LL, proc, GetModuleHandle(curModule.ModuleName), 0); }
14 2024-04-24
编程技术问答社区
用c#和RichEditBox使用EM_STREAMOUT的例子
我试图从WM_GetText的Richedit字段中获取文本,但是我遇到了一些问题,因此我发现EM_Streamout,这尤其适用于Richedit.我找到了这个代码并玩了 有一点,但我无法让他们工作: delegate uint EditStreamCallback(IntPtr dwCookie, IntPtr pbBuff, int cb, out int pcb); struct EDITSTREAM { public IntPtr dwCookie; public uint dwError; public EditStreamCallback pfnCallback; } [DllImport("user32.dll", CharSet=CharSet.Auto)] static extern IntPtr SendMessage(HandleRef hwnd, uint msg, uint wParam, ref EDITSTREAM lParam); 也许有人
46 2024-04-24
编程技术问答社区
C# 钩住Windows进程以检查调试进程
我想知道是否有一种方法可以挂接Windows进程以检查是否有任何可疑程序(Wireshark,Fiddler,ollydbg等). 我想连接Windows进程,因此它将在检测不良过程时实时关闭客户端或弹出消息. 如果你们可以为我提供任何可以很好的链接. 谢谢! 解决方案 Process[] processlist = Process.GetProcesses(); 然后沿着列表走并根据您不想运行的应用程序进行期望. 其他解决方案 您可以通过使用 Win32_Process .每个过程都会创建Win32_Process的实例,因此查看新实例将在实时(接近)实时告诉您有关过程创建的信息. 要接收WMI创建事件,请参阅此页面: http://sdn.microsoft.com/en-us/library/system.management.eventquery.aspx (编辑:不同的链接,现在以c#sampe in C#). 其他解决方案
18 2024-04-24
编程技术问答社区
全球钩子(非活动项目)
我正在创建一个程序,使您可以粘贴文本,但看起来就像是在粘贴时键入它. 我想使用Ctrl + b来介绍粘贴,但是我对热键有疑问. 我认为我需要使用WH_KEYBOARD_LL挂钩并包括该用户32文件,但是当我添加它和名称空间时,我通常会出现错误. 我最接近: http://thedarkjoker94.cer3333.com/?p=1111 - 但它似乎与Ctrl,alt和其他修饰符无法使用,即使我使用KeyData. . 我需要一种制作热键的方法,即使程序不是活动窗口,也可以工作.这是Microsoft Visual C#2010中的Windows Forms应用程序. 有很多stackoverlow主题,但它们已经过时了,我还不够完整以使我无法运行. 解决方案 您是在谈论 hookmanager ? 我成功地使用它: HookManager.KeyDown += new KeyEventHandler(HookManager_KeyDow
20 2024-04-24
编程技术问答社区
如何在C#中了解选定的文件
我想构建一个软件. 该软件只会获得当前选择的文件的路径. 假设我单击桌面上的文件. 现在我想了解此文件的路径. 因此,每当进行新选择时,只需获得新选择的文件的路径. 有什么想法吗? 解决方案 Windows桌面窗口是一个listView控件(至少是在Windows XP中...),因此,如果您需要知道listView的选定项目,则基本上需要获取该句柄桌面并检查已选择的内容. 不确定Windows Vista和7位,我猜这没有太大的不同,正如David所说,如果您想要每个Explorer窗口可能会更困难,但仍然应该是可能的,请在此处看看: 如何获得窗口句柄桌面? 其他解决方案 也许您应该查看 openfiledialog class 其他解决方案 我想您可以使用Shaun对OpenFileDialog的看法. 您还可以参考以下以下链接: 如何使用openfiledialog 该链接还会教您如何更改标题,过滤类型的文件以及其他关
20 2024-04-24
编程技术问答社区
检测最小化窗口的钩子 C#
大家好 如何在C#中检测到用户单击外部程序的最小化按钮(例如记事本)? 谢谢 解决方案 这应该有效: public class myClass { [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl); const UInt32 SW_HIDE = 0; const UInt32 SW_SHOWNORMAL = 1; const UInt32 SW_NORMAL = 1; const UInt32 SW_SHOWMINIMIZED = 2; const UInt32 SW_SHOWMAXIMIZED = 3;
16 2024-04-23
编程技术问答社区
全局性的键盘钩子拖累了电脑
我正在使用此private const int WH_KEYBOARD_LL = 13; private const int WM_KEYDOWN = 0x0100; private static LowLevelKeyboardProc _proc = HookCallback; private static IntPtr _hookID = IntPtr.Zero; public static void Main() { _hookID = SetHook(_proc); //Application.Run(); //UnhookWindowsHookEx(_hookID); } private static IntPtr SetHook(LowLevelKeyboardProc proc) { using (Process curProcess = Process.GetCurrentProcess()) using (ProcessModule curModule = curPr
26 2024-04-23
编程技术问答社区
我怎样才能从进程的开始捕获所有的应用程序/窗口信息?
我试图确切地弄清楚如何从C#启动的过程/窗口捕获过程/窗口的所有窗口消息.这个过程不是我自己的,所以我需要使用某种钩子.我的目标是从初始窗口创建之前开始实时捕获所有消息,到应用程序退出并输出所有消息到文本框或文件.因此,从执行申请的那一刻起. 由于我想从启动的时间开始捕获它,所以我可能不会有一个窗户句柄,因为他们的手柄还没有.因此,我在说这可能很棘手. 他们的应用程序是可以使用的吗?我只希望所有来自应用程序的消息. 解决方案 我的目标是从前开始实时捕获所有消息 最初的窗口创建,到应用程序退出和输出 消息到文本框或文件. 听起来您想要"实时"注册表,文件系统,进程和等活动的监视. Process Monitor 使用 easyhook 由于我想从启动开始就捕获它,所以我可能 不会有一个窗户手柄,因为他们还没有窗口.我也是 盖子可能很棘手. 此代码项目文章具有防止在特定计算机上运行的软件列表中执行任何程序的方法.也许您可以调整它以适应您的需求.
14 2024-04-23
编程技术问答社区
钩住浏览器的标签改变事件
在正在进行的项目(Windows,.NET C#)中,我们在开发中遇到了瓶颈: 我们必须观察所有主要浏览器(即FF,Chrome,Opera,Safari)中当前选项卡的更改. 一旦捕获更改事件,就必须将其写入文件. 这是可行的吗? 解决方案 我最终所做的是以下内容: 跟踪窗口标题的event_object_namechange 标题更改后,我就知道有一些"新"已加载,因此我使用各种技术检查了浏览器的URL(NDDE for Firefox和Opera,检查了Chrome的特定窗口类别,等等. .. !!! 其他解决方案 我不知道该怎么做...您可以尝试的一件事就是找到浏览器的选项卡控件的窗口句柄并挂在其中,但这是一项令人讨厌的任务.而且不能保证他们不使用自定义标签控件,所以我会说这是不能做的. 您能提供更多有关为什么需要的信息吗?也许您没有想到其他解决方案? 其他解决方案 您可以将这两个结合在一起以获取您想要的东西: 在有一种方法可以
8 2024-04-23
编程技术问答社区
窗口钩子的奇怪行为
我正在寻找可能在OS中激活任何窗口时在.NET Windows应用程序中通知的可能性(Windows XP 32-C).在CodeProject上,我通过使用全局系统钩找到了一个解决方案. 这是此过程的简短摘要: 在不受管理的组件(用C ++编写)中,实现了安装WH_CBT钩的方法. bool InitializeCbtHook(int threadID, HWND destination) { if (g_appInstance == NULL) { return false; } if (GetProp(GetDesktopWindow(), " HOOK_HWND_CBT") != NULL) { SendNotifyMessage((HWND)GetProp(GetDesktopWindow(), "HOOK_HWND_CBT"), Registe
28 2024-04-23
编程技术问答社区
调用外部SetWindowsHookEx和GetModuleHandle的PInvoke错误
我试图将程序中的Windows挂钩设置为外部EXE.这将用于监视窗口的调整大小/最小化,因此我可以类似地调整程序大小,将其停靠在窗口上. 我如何解决错误代码 1428 和 126 下面? 在用零HMOD调用 setWindowShookex 时,我遇到了此错误 1428 .如果传递当前模块(而不是intptr.zero),我会遇到相同的错误,这似乎是正确的: IntPtr module = PInvoke.GetModuleHandle(null); [...] SetWindowsHookEx(...,...,module,...); int error = PInvoke.GetLastError(); 1428 = 如果没有模块句柄,无法设置非局部钩 我还试图使用 getModulehandle : 抓住我将作为模块挂接的外部程序 IntPtr module = PInvoke.GetModuleHandle("communicator.exe");
24 2024-04-23
编程技术问答社区
如何使用 git 钩子 premerge-commit 获取起源合并分支名称
我正在尝试使用新的Git Hook Pre-Merge-Commit创建一个特定的脚本,但没有参数. 是否有解决方法,所以我可以得到合并的分支的名称? 示例: 在分支MyBranch上,我称为" Git Merge TestingBranch",我想在脚本中获得"测试". 原因:我需要将合并一个特定的分支从项目中与其他任何分支进行阻止. 因此,就像: if [[ "$originOfMergeBranchName" == "testingBranch" ]] then echo "You can't merge this branch to any other" exit 2 fi 我在思考如何获得该orighofmergebranchname 方面遇到困难 预先感谢:D 解决方案 我修改了我找到的脚本,我发现了#!/bin/sh if [[ $GIT_REFLOG_ACTION == *merge* ]];
28 2024-04-22
编程技术问答社区