请教高手。。。api 假如使用adobe reader 打开两份pdf文档(是同一进程), 使用什么api 可以找到 最后打开的pdf文档 的窗口句柄呢? 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 e ....谢谢啊,,,忘了 说明,,, 我是用一个进程 打开另一个进程(adobe reader),,这个 时间控件 检查不到所有吧? 你用进程打开一个进程...你打开的时候知道了进程ID ...怎么会是进程ID不同呢.这里你直接就知道了谁先打开谁后打开的... 你有了进程ID 然后枚举所有装体..根据窗体句柄获取进程ID 判断ID是一样就说明你是程序打开的进程... 记录句柄 你有了进程ID 不就知道进程的启动时间....判断时间获取最后一个不就好了?没看出什么复杂的.//根据窗体句柄获取进程ID[DllImport("user32.dll")] public static extern IntPtr GetWindowThreadProcessId(IntPtr hwnd, ref int lpdwProcessId);//枚举所有窗体 [DllImport("user32.dll")] public static extern int EnumWindows(EnumWindowsProc ewp, int lParam); public delegate bool EnumWindowsProc(IntPtr p_Handle, int p_Param); 谢谢 你 解释 的这么 详细。 我说明几点,如下:1、我的应用程序MyApp, 打开pdf文档,pdf文档的关联文件是Adobe Reader。利用Process prc= new Process();prc.startinfo.filename="xxx.pdf";prc.start();2、当我打开这个xxx.pdf之前,存在了一个已经打开的pdf,假设为yyy.pdf。 如果我想要在MyApp中操作xxx.pdf,那么,我就需要找到xxx.pdf的句柄,而不是yyy.pdf的句柄。 而这时用 FindWindow(null,prc.MainWindowTitle),prc.MainWindowTitle为空,我想,难道是adober reader打开文档需要些时间?我就在FindWindow之前加入了Thread.sleep(500),结果在FindWindow方法中会抛出进程已经存在的异常。3、当我打开xxx.pdf 后,这时只有一个adobe reader的进程在运行。我要将xxx.pdf 置为TopMost,既z-order的最顶层。 这时,只有找到xxx.pdf的句柄才可以,EnumWindows 我正尝试。可能我上述方法,有不正确的,希望指正。谢谢 我在7楼写的Thread.sleep(500)和 FindWindow方法,,对于打开xxx.pdf之前,没有存在已经打开的pdf文档时, 是 可以 找到xxx.pdf的句柄的。 返回实体和DataTable的性能哪个好? 为什么用gid+生成的图片PS打不开?? 水晶报表怎么给子报表传递数据? 请问如何在结构中声明数组 很简单的问题 求c#常用笔试问题和答案(急,重分答谢) 中文乱码问题 如何调试com+组件? 请问哪里有C#的测试框架? .net beta2的MSDN文件在哪???? 动态的每显示一行停顿一会 如何使用Parameter【】传递存储过程的参数??有例子最好,谢谢!!!
e ....谢谢啊,,,忘了 说明,,, 我是用一个进程 打开另一个进程(adobe reader),,这个 时间控件 检查不到所有吧?
这里你直接就知道了谁先打开谁后打开的... 你有了进程ID 然后枚举所有装体..根据窗体句柄获取进程ID 判断ID是一样就说明你是程序打开的进程... 记录句柄 你有了进程ID 不就知道进程的启动时间....判断时间获取最后一个不就好了?
没看出什么复杂的.//根据窗体句柄获取进程ID
[DllImport("user32.dll")]
public static extern IntPtr GetWindowThreadProcessId(IntPtr hwnd, ref int lpdwProcessId);//枚举所有窗体
[DllImport("user32.dll")]
public static extern int EnumWindows(EnumWindowsProc ewp, int lParam); public delegate bool EnumWindowsProc(IntPtr p_Handle, int p_Param);
谢谢 你 解释 的这么 详细。 我说明几点,如下:
1、我的应用程序MyApp, 打开pdf文档,pdf文档的关联文件是Adobe Reader。利用Process prc= new Process();
prc.startinfo.filename="xxx.pdf";
prc.start();2、当我打开这个xxx.pdf之前,存在了一个已经打开的pdf,假设为yyy.pdf。 如果我想要在MyApp中操作xxx.pdf,那么,我就需要找到xxx.pdf的句柄,而不是yyy.pdf的句柄。 而这时用 FindWindow(null,prc.MainWindowTitle),prc.MainWindowTitle为空,我想,难道是adober reader打开文档需要些时间?我就在FindWindow之前加入了Thread.sleep(500),结果在FindWindow方法中会抛出进程已经存在的异常。3、当我打开xxx.pdf 后,这时只有一个adobe reader的进程在运行。
我要将xxx.pdf 置为TopMost,既z-order的最顶层。 这时,只有找到xxx.pdf的句柄才可以,
EnumWindows 我正尝试。
可能我上述方法,有不正确的,希望指正。谢谢
我在7楼写的Thread.sleep(500)和 FindWindow方法,,对于打开xxx.pdf之前,没有存在已经打开的pdf文档时, 是 可以 找到xxx.pdf的句柄的。