UWSCを呼び出したプロセスのIDを取得する

ST_PARENTで取れなかったんだよ
呼び出し元によるのかな?そのへんはちゃんと検証してないんだけどとにかくそういったケースがあるってこった

function GetParentID()
    id = getid(GET_THISUWSC_WIN)
    result = status(id, ST_PARENT)
    if result > -1 then exit
    // ST_PARENT で取得出来なかった場合
    processes = GetWin32Process(status(id, ST_PROCESS), "ParentProcessId")
    for process in processes
        pid = process.ParentProcessId
        break
    next
    result = GetIdFromPid(pid)
fend

function GetWin32Process(pid, properties = "*")
    with createoleobj("WbemScripting.SWbemLocator")
        wmi = .ConnectServer()
    endwith
    result = wmi.ExecQuery("SELECT " + properties + " FROM Win32_Process WHERE ProcessId = " + pid)
fend

function GetIdFromPid(pid)
    result = -1
    for id in getallwin()
        if status(id, ST_PROCESS) = pid then
            result = id
            break
        endif
    next
fend

とりあえずST_PARENTでの取得を試みる
だめだったらWMIで親プログラムのpidを取得
pidから対象プロセスのIDを得る
失敗したら-1を返すようにしている

parent = GetParentID()
msgbox(status(parent, ST_TITLE))

これで呼び出し元のアプリを操作できるよ

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中