【问题标题】:Writing to textbox in another process in Win32 (c++)在Win32(c ++)中的另一个进程中写入文本框
【发布时间】:2015-02-02 13:57:23
【问题描述】:

假设您需要编写一个进程或服务(进程 1),它将读取或写入另一个应用程序或进程(进程 2)中的文本框。它是如何完成的? 进程 2 的文本框的名称是否写在某种注册表中,以便我可以从某种系统调用中获取它?

谢谢。

【问题讨论】:

  • 您的两个程序是否愿意相互通信以实现这一目标?
  • 假设您只有一个 exe 文件。当您运行它时,您会看到一个带有文本框的窗口。您对文本框的名称一无所知。您需要创建另一个程序来识别该特定 exe 运行,并在这种情况下将“foo”(例如)写入该 exe 文件中的文本框。我只有第一个程序的 exe 文件。所以我不能直接和它交流。
  • 我说通常他们不会使用文本框作为机制进行通信。相反,程序将使用套接字、共享内存或其他一些通信方法。
  • 文本框不是这里的交流方式。只是我认为,当您在 Windows 中运行 exe 时,MFC 对象已在某处注册,您可以以某种方式写入它们。因为那个 exe 是“关闭的”我不知道你怎么能直接改变那个文本框的内容
  • MFC 是一个第三方库,就 Windows 而言。通常,Windows 应用程序不使用 MFC。您似乎还可以互换使用术语 applicationprocess。进程是承载应用程序的内核对象。我也不确定我是否了解您想要实现的目标。如果您希望修改特定控件,则必须能够识别该控件。如果您“对控件一无所知”,您将无法识别它。不过,更改随机控件的内容相当简单。

标签: c++ c windows


【解决方案1】:

文本框由您可以使用 Spy++ 找到的 ID 号标识。使用 FindWindow 和 EnumChildWindows 查找目标文本框的 HWND。使用 HWND,您可以 SendMessage WM_GETTEXT 或 WM_SETTEXT。注意:如果两个进程的安全级别不同,这将不起作用。

【讨论】:

  • 非常感谢您的回答。我可以以某种方式下载 spy++ 的源代码并集成到我的服务应用程序中吗?我只是想让它完全自动化,而无需查看和手动插入 ID。
  • 听起来像是一个临时黑客......你应该在每次使用你的程序之前手动启动这个 Spy++,还是它带有一些 API?
  • @Lundin:spy++ 是一个程序,而不是 API。控件 ID 通常不是动态的。
  • 我不想手动启动 Spy++。我希望我的程序能够识别正在运行的 .exe 应用程序并更改其文本框。
  • @ZAxy:从 Windows Vista 开始,Session 0 与交互式用户会话隔离(请参阅Impact of Session 0 Isolation on Services and Drivers in Windows)。您无法从会话 0 轻松访问交互式用户会话中的 GUI 对象。
猜你喜欢
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 2012-08-19
  • 1970-01-01
相关资源
最近更新 更多