2

我对宏有所了解。我不是指 ASSEMBLY 语言类型。我说的是那些你可以用来在另一个程序上执行重复动作的程序。我说的是那些您可以用来在计算机上记录一系列事件的程序,例如鼠标移动和按钮单击,然后您可以回放它们。其中一些非常精细,只能在您指定的特定应用程序上运行。

我曾经写过一种。它是一个启动 Excel 会话的程序,然后使用某种动态数据交换管道来提供 Excel 会话脚本命令。有效。

但我想,操作系统层面的事情是完全不同的故事。

有人如何在 C# 中编写“宏”?

我认为我将采用的方法是使用开发环境附带的 spy 例程来获取正确消息和参数的列表(例如 wm_lbuttondown),然后使用动态数据交换将这些消息发送到应用程序。

所以我有三个问题。

  1. 这是最好的方法吗?
  2. 如何获取已经运行的应用程序的句柄?
  3. 如何向已经运行的应用发送类似用户的消息?
4

2 回答 2

1

基于以下许多因素,有不同的答案:

  • 是第三方还是您自己的应用程序?
  • 是否有自动化接口
  • 应用程序中使用的 GUI 工具包

如果它是第 3 方应用程序,那么您需要通过 PInvoke 在 Windows API 级别上工作 - 子类化 WinMain proc、捕获和发送输入消息等。该任务有第 3 方库。C# 显然不是此类任务的正确选择。

如果应用程序具有自动化模型(如 Excel),那么编写将与该应用程序交互的程序非常简单。

如果您想使用宏功能增强您自己的应用程序,那么您应该在设计状态时考虑到这一点。如果您从一开始就使用命令模式,那么对宏录制进行编程并不难。

您应该提供更多详细信息以获得更好的答案。

哦,我差点忘了回答这三个问题

  1. 这是最好的方法吗?

视具体情况而定

  1. 如何获取已经运行的应用程序的句柄?

取决于应用程序。如果它是本机 Win 应用程序,您可以通过 WinApi 轻松获取进程 ID 和窗口句柄。

  1. 如何向已经运行的应用发送类似用户的消息?

再次取决于应用程序类型。对于原生 win 应用程序,您可以通过 WinAPI 轻松发送 WM_XXX 消息

于 2009-01-19T08:40:56.697 回答
-1

除非您需要在自己的程序中添加它,否则您只需下载键盘/鼠标宏程序并使用它来执行这些可重复的操作。

另一方面,要在您自己的程序中执行宏,您需要找到一种方法来记录单击的按钮并将它们写入可以保存的临时列表,然后通过单击按钮(以编程方式)运行该列表。

于 2010-06-10T07:56:52.930 回答