在Win32(c ++)中的另一个进程中写入文本框
Posted
技术标签:
【中文标题】在Win32(c ++)中的另一个进程中写入文本框【英文标题】:Writing to textbox in another process in Win32 (c++) 【发布时间】:2015-02-02 13:57:23 【问题描述】:假设您需要编写一个进程或服务(进程 1),它将读取或写入另一个应用程序或进程(进程 2)中的文本框。它是如何完成的? 进程 2 的文本框的名称是否写在某种注册表中,以便我可以从某种系统调用中获取它?
谢谢。
【问题讨论】:
您的两个程序是否愿意相互通信以实现这一目标? 假设您只有一个 exe 文件。当您运行它时,您会看到一个带有文本框的窗口。您对文本框的名称一无所知。您需要创建另一个程序来识别该特定 exe 运行,并在这种情况下将“foo”(例如)写入该 exe 文件中的文本框。我只有第一个程序的 exe 文件。所以我不能直接和它交流。 我说通常他们不会使用文本框作为机制进行通信。相反,程序将使用套接字、共享内存或其他一些通信方法。 文本框不是这里的交流方式。只是我认为,当您在 Windows 中运行 exe 时,MFC 对象已在某处注册,您可以以某种方式写入它们。因为那个 exe 是“关闭的”我不知道你怎么能直接改变那个文本框的内容 MFC 是一个第三方库,就 Windows 而言。通常,Windows 应用程序不使用 MFC。您似乎还可以互换使用术语 application 和 process。进程是承载应用程序的内核对象。我也不确定我是否了解您想要实现的目标。如果您希望修改特定控件,则必须能够识别该控件。如果您“对控件一无所知”,您将无法识别它。不过,更改随机控件的内容相当简单。 【参考方案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 对象。以上是关于在Win32(c ++)中的另一个进程中写入文本框的主要内容,如果未能解决你的问题,请参考以下文章