Const PROCESS_QUERY_INFORMATION = &H400
Const STILL_ALIVE = &H103
Const INFINITE = &HFFFF
Public Sub aaa()
         
   ocrexe = "C:\Program Files\Common Files\Microsoft Shared\MODI\11.0\MSPVIEW.EXE "
   flpath = "F:\91.tif"
     
   FileString = ocrexe & " " & Chr(34) & flpath & Chr(34)
    pid = Shell(FileString, vbNormalFocus)
    'hProc = OpenProcess(PROCESS_QUERY_INFORMATION, False, pid)
     
   SendKeys "%(t)", ture
   SendKeys "t", ture   MsgBox "ok"
______________________________________________
上面程序,在shell后如果延时,可以成功执行,如果不延时,则会出错,或无反应因为Shell执行后初始化窗口成功后,是当前活动窗口,获得焦点,可以sendkey,否则sendkey 无效但延时不好把握,太长浪费时间,太短仍sendkeys无效请问如何判断shell打开文档成功且初始化窗口成功并获得焦点呢?
   

解决方案 »

  1.   

    看看當前的窗口是否的Open 的窗口。
      

  2.   

    WaitForSingleObject好象不行shell打开窗口后是一直运行的,只是不知道什么时间可以有焦点!没有办法获得这个消息!
      

  3.   

    看看當前的窗口是否的Open   的窗口。
    这个办法听起来是有道理的,但我不知道如何操作!其实设个定时器,等个3、5秒中,让其一直DOevents!自然会得焦点!
    测试open windows时如何一直DOevents?个人认为,如果是异步执行,DOevents是必可可少的!
    如果同步执行,也存在窗口成为活动窗口的问题,否则sendkeys无效!
    如果是同步执行,且不打开窗口,就不会有那么多的问题了!各位大侠有招的话可给个简单的代码!俺 会加分!
      

  4.   

    lngShellId=shell(...)
    ...
    WaitForSingleObject
    do while lngProcessId <> lngShellId
        doevnets
        sleep 1
        hWnd = GetActiveWindow
        GetWindowThreadProcessId(hwnd,lngProcessId)
    loop