0

问题可能写得不好。

我有一个图像查看程序,我希望能够将图像发送到另一个程序,比如 Photoshop。

如果图像有保存的源,我可以这样做,但无法找到将未保存的图像发送到另一个程序的方法。目前我正在将图像添加到剪贴板,然后将粘贴命令发送到加载的应用程序 - 这在程序启动后执行粘贴命令的条件下起作用。对于 MSPaint,一个简单的线程睡眠就可以了。但是对于需要不可预测且需要很长时间才能打开的程序(例如 gimp 和 Photoshop),除非我设置了足够高的睡眠值,否则这将不起作用。

所以我的问题是 - 我可以将剪贴板中的图像作为参数发送到程序,还是有办法以某种方式知道程序是否已完全加载?我考虑过首先将图像保存为临时图像并发送它 - 但我宁愿程序在按下保存时不要尝试保存到临时目录。

4

1 回答 1

1

“有没有办法以某种方式知道程序是否已完全加载?”

我认为您将得到的最接近的通用答案是使用Process.WaitForInputIdle()

使用 WaitForInputIdle() 强制应用程序的处理等待消息循环返回到空闲状态。当一个带有用户界面的进程正在执行时,每当操作系统向该进程发送一条 Windows 消息时,它的消息循环就会执行。然后该过程返回到消息循环。当一个进程在消息循环中等待消息时,它被称为处于空闲状态。此状态很有用,例如,当您的应用程序需要等待启动进程完成创建其主窗口后,应用程序才能与该窗口通信。

所以你可以这样做:

    Dim P As Process = Process.Start("someAppHere")
    P.WaitForInputIdle()

但是请记住,并非所有应用程序的加载方式都相同,因此应用程序可能会在完全加载之前进入“空闲”状态......这仅取决于它的设计方式。

于 2013-05-09T14:06:53.653 回答