【问题标题】:Hooking into Windows with C# to Produce Windows 7 New Feature [closed]使用 C# 连接到 Windows 以生成 Windows 7 新功能 [关闭]
【发布时间】:2010-09-19 21:23:36
【问题描述】:

我刚刚看到即将推出的 Windows 7 的一个非常有用的 UI 功能(访问 http://www.gizmodo.com.au/2008/10/windows_7_walkthrough_boot_video_and_impressions-2.html 并向下滚动到名为“新窗口大小调整功能的超级科学视频”的视频)

简而言之,您可以通过标题栏将窗口拖动到屏幕顶部以将其最大化,将其向下拖动以恢复并将其拖动到屏幕的左边缘或右边缘以使其对齐位置与您将其拖动到的边缘对接,并调整大小以占据屏幕的一半。

现在我知道有很多基于键盘的应用程序可以做“类似”的事情,但我还没有看到一个基于鼠标的程序可以做到以上,简单,有用,仅此而已。如果你知道一个(或者足够聪明可以写一个),请发布 URL :)

无论如何,如果我想尝试编写一个小应用程序来做到这一点,我有一个问题:

如果我想尝试编写一个小应用程序来执行此操作,我可以将其编写为 .NET 应用程序吗?我想挂钩到 Windows 的窗口拖放处理是相当低级的,也许不是 C#.NET 可以完成的?

这里有谁可以在午休时间敲出这样的小应用程序吗? ;) 我敢肯定,任何模仿 Windows 7 功能的东西都会非常受欢迎,至少在 Windows 7 发布之前是这样。

编辑: AeroSnap 家伙 (http://www.aerosnap.de/index_eng.htm) 在实现此功能方面做得很好,从下载量来看,这是一个受欢迎的功能!

【问题讨论】:

  • 可能还会发布 Windows 7 的发布:P

标签: .net windows-7 pinvoke hook


【解决方案1】:

是的,您可以通过 PInvoke 从 C# 执行此操作。 Tbh,学习此类 API 的最佳方法是查看 Bblean 之类的源代码。这将向您展示您需要了解的内容,并且将其暴露给 PInvoke 非常简单。

【讨论】:

  • 不,不要添加用托管代码编写的挂钩。它将导致运行时加载到系统中的所有应用程序中。更糟糕的是,如果其他应用程序也受管理,您可能会得到错误的运行时版本,无论是针对您的挂钩还是针对其他应用程序。
【解决方案2】:

pinvoke.net

这是一个很好的参考网站,用于在 .NET 应用程序中通过 PInvoke 使用 Windows API。

【讨论】:

  • 感谢 pinvoke.net 的链接。那里有很多 API 细节可供挖掘!
【解决方案3】:

感谢您花时间回答。我将使用 PInvoke 结帐。我假设我需要使用 Windows API 来连接窗口以及实际执行拖动窗口的移动/调整大小?

【讨论】:

  • 是的——根据我的经验,学习这些东西的最好方法是查看 bblean。一位朋友正在开发 Bblean 到 Nemerle(另一种 .NET 语言)的端口——如果您四处搜索,您可能会找到源代码。
【解决方案4】:

如果您的目标是创建一个适用于所有应用程序以及桌面上所有窗口的挂钩,那么您不能使用托管代码程序集。您将不得不使用能够生成传统 DLL 的语言(例如 C++)进行编写。

为了在系统级别挂钩,然后挂钩到所有正在运行的应用程序,您必须提供一个 dll,该 dll 可以放置到所有正在运行的应用程序的地址空间中。我敢说大多数人的日常应用中有很大一部分不是托管的 .net 框架应用。

【讨论】:

  • 这是我在阅读MSDN article on the subject of Windows hooks in C#.NET 底部的“.NET Framework 不支持全局挂钩”后担心的问题。全局钩子和 MSDN 文章中的钩子有什么区别?
  • MSDN 文章正在设置应用程序本地挂钩。当代码示例使用 AppDomain.GetCurrentThreadId() 为 dwThreadId 参数调用 SetWindowsHookEx 时,它会将其挂钩设为本地。将此参数更改为零,您就有了一个全局挂钩 - 只是不要在 .net 中运行它,它会爆炸。
  • 我也推荐尼克指出的文章codeproject.com/KB/system/WilsonSystemGlobalHooks.aspx。我们做了类似的事情来允许 VB 应用程序成为全局输入活动的接收者。我们创建了一个 C++ DLL,它将自定义 win 消息返回到 VB 应用程序中的一个窗口。
【解决方案5】:

试试看这些文章:

【讨论】:

    【解决方案6】:

    也可以试试这个,你有解释、源代码和官方 MSDN 文档的参考。

    http://www.josefcobonnin.com/post/2007/06/19/Hook-Keyboard-and-Mouse.aspx

    【讨论】:

      【解决方案7】:

      有一种官方方式:Windows API Code Pack

      适用于 Microsoft® .NE​​T Framework 的 Windows® API 代码包提供了一个源代码库,可用于从托管代码访问一些新的 Windows 7 功能(以及旧版 Windows 操作系统的一些现有功能)。目前 .NET Framework 中的开发人员无法使用这些 Windows 功能。

      此版本 (v1.0) 库支持的个别功能是:

      Windows 7 任务栏跳转列表、图标叠加、进度条、选项卡式缩略图和缩略图工具栏。 Windows 7 库、已知文件夹、非文件系统容器。 Windows Shell 搜索 API 支持、Shell 命名空间实体的层次结构以及 Shell 对象的拖放功能。 资源管理器浏览器控件。 壳牌财产系统。 Windows Vista 和 Windows 7 通用文件对话框,包括自定义控件。 Windows Vista 和 Windows 7 任务对话框。

      【讨论】:

        猜你喜欢
        • 2012-04-29
        • 2018-05-11
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 2012-09-25
        • 2011-05-24
        • 2010-12-29
        • 1970-01-01
        相关资源
        最近更新 更多