使用 .Net 检测外部应用程序中的拖放操作

2024-04-28

我需要检测拖放操作外用, 是否可以?我想到写一个钩子来检测这些操作。任何人都可以指出我可以尝试挂钩哪些消息或 api 函数来检测拖放事件的正确方向吗?我想用 C# 来做这个。

提前致谢。


您可以通过两条明显的路径来尝试此操作。

第一个是挂钩参与调解拖放操作的 OLE 函数。这假设其他应用程序正在使用真正的拖放而不是某些仅限内部的版本。确定这一点超出了我的能力 - 无需访问该程序 - 但如果可以从该外部应用程序拖动到其他应用程序窗口(包括桌面),则很好地表明该应用程序正在使用真实的东西。

您需要挂钩的功能是注册拖放 http://msdn.microsoft.com/en-us/library/ms678405(VS.85).aspx, 尽管拖放操作 http://msdn.microsoft.com/en-us/library/ms678486(VS.85).aspx可能也有兴趣。RegisterDragDrop被调用来注册一个放置目标,并给你一个机会来包装IDropTarget以您想要的方式(大概是 IPC'ing 到您的实际应用程序中),RevokeDragDrop,然后传递注册,但现在使用您的包装对象。IDropTarget::删除 http://msdn.microsoft.com/en-us/library/ms687242(VS.85).aspx您可能会在其中完成大部分 IPC。

第二种方法是将 Windows 挂钩注入到应用程序中。这只有在以下情况下才容易处理:了解触发拖动的用户操作,并可以检测它们因为您必须区分拖动操作和普通的键盘/鼠标操作。有问题的钩子是WH_CALLWNDPROC钩子,注册于设置WindowsHookEx http://msdn.microsoft.com/en-us/library/ms644990(VS.85).aspx。基本上,你定义一个WndProc它获取应用程序窗口执行的所有消息(包括鼠标移动),并由您决定拖动操作何时开始和何时停止。

无论哪种情况,大量代码都可以用 C# 编写。通过 p\invoke 你可以得到设置WindowsHookEx http://www.pinvoke.net/default.aspx/user32.SetWindowsHookEx,并且您也可以在 C# 中实现 COM 对象(以及扩展这些 COM 对象的包装器)。事实上,有一个删除目标 http://msdn.microsoft.com/en-us/library/system.windows.forms.idroptarget.aspx.NET 2.0 中已有类;这可能已经是 COM 可见的了。

不幸的是,挂钩 API 的级别非常低,您通常必须使用 C 或 C++ 才能完成任何工作。我听说过一些好消息Detours http://research.microsoft.com/en-us/projects/detours/,加上来自 Microsoft 的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 .Net 检测外部应用程序中的拖放操作 的相关文章

  • 信号与信号2

    我的应用程序可能会受益于使用 boost 的信号库之一而不是本土解决方案 该应用程序是多线程的 但执行信号处理的部分是单线程的 如果多线程不是问题 是否有任何理由更喜欢 Boost Signals2 而不是 Boost Signal Boo
  • 头文件中实现的函数的静态与内联

    我想到的方式inline在 C 中用于链接 作用域 我把它放在同一个篮子里extern and static对于全局对象 通常 对于在头文件中实现的函数 我的首选解决方案是将其设为静态 In Foo h static void foo Do
  • Winform DatagridView 数字列排序

    我只使用一个简单的 DataGridView 来保存一堆数据 有趣的是 我在特定列中有小数 但是当按小数列排序时 它的排序是错误的 例如 起始顺序可能是 0 56 3 45 500 89 20078 90 1 56 100 29 2 39
  • 如何使用c#从数据桶中获取所有文档?

    如何获取数据桶中的所有文档 我尝试过一个示例 但我只能获得一个特定的文档 这是我的代码 CouchbaseClient oclient oclient new CouchbaseClient vwspace data bucket name
  • 我可以将 char 或 DateTime 设置为 null 吗?

    我可以将 null 设置为char数据类型 并且DateTime在 C 中 多谢你们 这是不可能的 它是一个值类型 使用 char myChar null DateTime myDate null 这相当于 Nullable
  • 如何在 C++ 和 QML 应用程序中使用 qrc?

    我在 Windows7 上用 c qnd Qt Creator QML 编写了 Qt Quick Desktop 应用程序 现在 我必须部署它 并且我需要隐藏 qml 文件和图像 意味着 将它们放入资源等中 我读到有一个很好的方法可以使用
  • 您认为 ASP.NET MVC 会与 ASP.NET Webforms 竞争吗?

    您认为 ASP NET MVC 会在 Microsoft Web 开发市场中占据重要份额吗 还是会占市场的 10 15 哦是的 它将让 Web 表单脱颖而出 我们已经看到了真正的 MVC 框架在 Java 世界中的价值 在 MS 世界中 这
  • 模板与非模板类,跨编译器的不同行为

    我在一些应用程序中使用编译时计数器 它确实很有用 昨天我想用 gcc 编译一个程序 我之前使用的是 msvc 并且计数器的行为在模板类中发生了变化 它在模板类中不再工作 过于简化的代码 Maximum value the counter c
  • 检查两个函数或成员函数指针的签名是否相等

    我编写了一些代码来检查自由函数的签名是否等于成员函数的签名等 它比较提取的返回类型和函数参数 include
  • 如何在 C++ 运行时更改 QML 对象的属性?

    我想在运行时更改 QML 对象的文本 我尝试如下 但文本仍然为空 这是后端类 class BackEnd public QObject Q OBJECT Q PROPERTY QString userFieldText READ userF
  • ASP.net WebForms - 在标记中使用 GetRouteUrl

    我一直在尝试弄清楚如何将路由功能与 ASP net 4 0 WebForms 一起使用 我将一条路线添加到我的路线集合中 void Application Start RegisterRoutes RouteTable Routes voi
  • Control.Invoke 是否泵送消息?

    Control Invoke 在被阻塞时是否继续在调用它的线程中泵送消息 系统 Windows 窗体 不会 Invoke 是阻塞的 整个线程将阻塞 直到对 Invoke 的调用返回 还有开始调用 http msdn microsoft co
  • 本地时间的内存需要释放吗?

    void log time t current time 0 tm ptm localtime current stuf 只是想确定 我是否需要在方法结束时释放 tm 指针分配的内存 不 你不应该释放它 该结构是静态分配的 检查文档 htt
  • 从具有相同属性的另一个对象创建对象

    我有一个 C 对象 可以说有 20 个属性 它是数据契约的一部分 我还有另一个具有类似属性的业务实体 我想从响应对象中填充该实体 除了将一个对象的每个属性分配给另一个对象的相应属性之外 还有其他方法可以做到这一点吗 是的 看看自动映射器 h
  • 意外的 const 引用行为

    include
  • 在特定线程上运行工作

    我想要一个特定的线程 任务队列并在该单独的线程中处理任务 应用程序将根据用户的使用情况创建任务并将其排队到任务队列中 然后单独的线程处理任务 即使队列为空 保持线程活动并使用它来处理排队任务也至关重要 我尝试过几种实现TaskSchedul
  • 'iter' 的名称查找已更改为新的 ISO 'for' 范围

    我正在尝试编译下面的两个文件 但从编译器收到错误消息 gcc 4 3 3 Linux 错误位于带有以下符号的行 LINE WITH ERROR 我做错了什么 我该怎么改变 路易斯 g c b h b cpp b cpp In functio
  • 展开 std::reference_wrapper 的成本

    Given include
  • C - 获取外部IP地址

    我需要通过 C C 调用获取我的公共 IP 地址 我知道作为替代方案 我可以从 http whatismyip akamai com 等外部链接获取 我写了一个示例来获取外部IP地址 但我的程序没有返回外部 IP 地址 我正在获取内部 IP
  • Unity - 在生成时获取随机颜色

    我有一个小问题 我想在我的场景中生成四边形 它们都应该有红色或绿色作为材质 但 Random Range 函数只能是 int 我该如何解决它 void SpawningSquadsRnd rndColor 0 Color red rndCo

随机推荐

  • PHPUnit:我如何模拟这个文件系统?

    考虑以下场景 这不是生产代码 class MyClass public function myMethod create a directory path sys get temp dir md5 rand if mkdir path th
  • Kotlin AutoCompleteTextView 适配器项目选择给出不同的值

    所以我在这个项目上使用 Kotlin 我主要使用 Java 所以我试图在 Kotlin 中找到等效项来实现相同的功能 我从数据库中获取 JSONArray 并将其存储在名为的可序列化数据类中Congregation它有以下变量id Int
  • 如何解决22端口连接超时问题

    ssh connect to host bitbucket org port 22 Connection timed out fatal Could not read from remote repository Please make s
  • 如何创建静态字符串数组?

    Note这个问题包含 Rust 1 0 之前的语法 代码无效 但概念仍然相关 如何在 Rust 中创建全局静态字符串数组 对于整数 编译如下 static ONE u8 1 static TWO u8 2 static ONETWO sta
  • 当我不使用 CoreData 时,为什么我的 iOS 或 OSX 应用程序会出现 CoreData 错误?

    我在构建过程中收到以下错误 API 滥用 尝试在非拥有协调器上序列化存储访问 PSC 0x7fb5ae208890 存储 PSC 0x0 CoreData 为什么我的应用程序中出现 CoreData 错误 我没有使用 CoreData 此消
  • 从文件中读取第n行的快速方法

    介绍 我有一个名为的 C 进程MyProcess我称之为nbLines时间 地点nbLines是一个名为的大文件的行数InputDataFile txt在其中可以找到输入数据 例如调用 MyProcess InputDataFile txt
  • 为什么我无法“停用”pyenv / virtualenv?如何“修复”安装

    我是新安装的乌班图16 04并考虑到使用最新版本的开发pandas我安装了Python 3 6 0使用虚拟环境 选择 3 6 0 的一个原因是因为我在某处读到这个版本的 Python 可以原生处理虚拟环境 即无需安装任何其他东西 无论如何安
  • 为什么 AnyVal 不能用于 isInstanceOf 检查?

    我想知道 为什么 AnyVal 不能在 isInstanceOf 检查中使用 这种行为背后的原因是什么 scala gt val c t c Char t scala gt c isInstanceOf AnyVal
  • 在 Windows 任务栏中对单独的进程进行分组

    我有许多逻辑上相关的独立进程 但所有进程都是单独启动的 没有共同的 父 进程 是否可以使它们在 Windows 任务栏中显示为一组 工作样本 这是一些受雷米答案启发的工作代码 using System using System Runtim
  • Angular 4:响应式网格列表

    昨晚开始探索 Angular 4 我只是想知道是否有办法使mat grid listMaterial Design 组件响应式与 Boostrap 如何处理它一样简单 任何人 提前谢谢您 不是纯 html 不过你可以找到一些 html ts
  • 不间断破折号 html [重复]

    这个问题在这里已经有答案了 我知道有一个不间断的空白 nbsp 是否有不间断的破折号 我可以使用这样我的单词就不会在该位置换行 中断 另外 有人可以向我指出一个列表 其中包含在断开句子时优先考虑的字符 例如空格 提前致谢 Use 8209
  • iOS Objective-C 以编程方式获取 VPN IP

    我使用第三方应用程序连接VPN 我们可以在以下位置获取详细信息Settings gt VPN gt information 我怎样才能得到Assigned IP通过 Objective C 在我们的应用程序中以编程方式 NSString a
  • 是否可以在 Android 中动态更改 EditTextPreference 的摘要?

    我设置了一个首选项屏幕来编辑应用程序中的设置 我想插入一个 EditTextPreference 其中包含一个标题 如 设置您的名字 和一个包含输入名称的摘要 那可能吗 先感谢您 当然 这是一个简短的例子 EditTextPreferenc
  • VS2010 中使用 lambda 参数捕获的 C++ 嵌套 lambda bug?

    我使用的是 Visual Studio 2010 它显然在 lambda 上有一些错误行为 并且有这个嵌套 lambda 其中内部 lambda 返回包装为 std function 的第二个 lambda 参见MSDN 上的 高阶 Lam
  • 从函数调用动态 SQL

    我正在编写一个返回表的函数 有两个参数传递给该函数 并构建并执行查询并将其插入到返回的表中 但是我收到这个错误 只能从函数内执行函数和一些扩展存储过程 我不想使用存储过程 因为这是一个简单的实用函数 有谁知道这是否可以做到 我的函数编码如下
  • 跨多个类使用 SharedPreferences?

    我有一个 SharedPreferences 目前适用于一类 但不适用于第二类 我想我可能把它称为错误的 因为我得到的错误说 The method getSharedPreferences String int is undefined f
  • Firefox 中忽略的图像最大高度百分比

    HTML div class container div
  • android中无法绕过的Root检测方法

    我知道在 root 设备上运行拥有敏感信息的应用程序根本不安全 因此 开发人员通常在这种情况下进行 root 检测 如果发现设备已 root 则该应用程序将不会安装 一切都好 开发者在root检测中使用的主要技术是检查superuser a
  • Inno Setup,APP启动 Windows启动时

    对于 Inno 设置 我想为 Windows 启动时 MyAPP 自动启动创建一个复选框任务 我的代码如下 并且 如何编写下面的代码 DO Set AutoStart WhenWindowsStart Tasks Name StartMen
  • 使用 .Net 检测外部应用程序中的拖放操作

    我需要检测拖放操作外用 是否可以 我想到写一个钩子来检测这些操作 任何人都可以指出我可以尝试挂钩哪些消息或 api 函数来检测拖放事件的正确方向吗 我想用 C 来做这个 提前致谢 您可以通过两条明显的路径来尝试此操作 第一个是挂钩参与调解拖