PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
23801 11/08/02 18:51:28 RE(2):PB11.5:外部アプリケーションの監視(起動からタスクバーにボタンが作成されるまで) By itigo
23800 11/07/23 08:52:39 RE(1):PB11.5:外部アプリケーションの監視(起動からタスクバーにボタンが作成されるまで) By ace
23799 11/07/21 16:46:12 PB11.5:外部アプリケーションの監視(起動からタスクバーにボタンが作成されるまで) By itigo

カテゴリ:スクリプトの記述
日付:2011年08月02日 18:51 発信者:itigo
題名:RE(2):PB11.5:外部アプリケーションの監視(起動からタスクバーにボタンが作成されるまで)

aceさん、こんばんは。
返信が遅くなり大変申し訳ありません…!!
実はこちらも試験してみたのですが、うまくいかなかったのです。
(どうしてもタスクバーにタスクボタンが出来る前に起動中ウィンドウが消えてしまう…)
アプリB側の処理に何か問題があるのかもしれないですね。
お時間を取らせてしまい申し訳ありません。。


>itigoさん、こんばんは。

>CreateProcessを使用しているのでProcessIDは利用できると思いますそこで
>外部関数として
>FUNCTION UnsignedLong GetWindow (UnsignedLong hWnd,UnsignedLong uCmd) LIBRARY \"USER32.DLL\"
>FUNCTION UnsignedLong GetTopWindow (UnsignedLong hWnd) LIBRARY \"USER32.DLL\"
>FUNCTION Long GetWindowThreadProcessId(UnsignedLong hWnd,ref Long lpdwProcessId) 
>LIBRARY \"USER32.DLL\"
>宣言


>先ほどのスクリプトを利用して記述してみると
>(7/23ラグありそうなのでコメント修正)

>unsignedlong GW_HWNDNEXT = 2
>unsignedlong hWND
>Long lpdwProcessId

>OPEN(w_kidoutyu) // 【起動中…】テキストを張り付けたウィンドウのOPEN

>CreateProcess(Null, アプリBのパス, Null, Null, False, 0, アプリBの格納パス, 
>STARTINFO,PROCESS_INFORMATION)

>if WaitForInputIdle(PROCESS_INFORMATION.hProcess,120000) = 0 then

>  SetNull(hWnd)
>  hWnd = GetTopWindow(hWnd)
>Retry:
>  DO WHILE hWnd <> 0
>    YIELD() //もしOSに制御を渡したければこれも記載
>    GetWindowThreadProcessId(hWnd,lpdwProcessId)
>    IF lpdwProcessId = PROCESS_INFORMATION.dwProcessId THEN
>     EXIT
>    END IF
>    hWnd = GetWindow(hWnd,GW_HWNDNEXT)
>      IF hWnd = 0 THEN GOTO Retry //リトライは何回にするか、決めた方がいいと思います
>  LOOP
>end if

>ここで hWnd にハンドルが取得できているので状態監視ができると思います。
>もっとも、ハンドルが取れているので、このまま
>Close(w_kidoutyu)
>でもいい気がします。



付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS Windows XP
DBMS Sybase SQL Anywhere Client
Browser InternetExplorer

Server SoftWare

OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.