Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在AppleScript中区分多个java进程_Applescript_Osascript - Fatal编程技术网

如何在AppleScript中区分多个java进程

如何在AppleScript中区分多个java进程,applescript,osascript,Applescript,Osascript,我在编写脚本时遇到问题。我需要“告诉”一个java进程(GUI)做一些事情,但还有其他java进程具有相同的进程名称“java”(也是GUI), 因此,我下面的示例代码不适用于我: osascript \ -e "tell application \"System Events\"" \ -e "tell process \"java\"" \ -e "click button \"MyButton\" of tab group 1 of windo

我在编写脚本时遇到问题。我需要“告诉”一个java进程(GUI)做一些事情,但还有其他java进程具有相同的进程名称“java”(也是GUI), 因此,我下面的示例代码不适用于我:

  osascript \
    -e "tell application \"System Events\"" \
       -e "tell process \"java\"" \
          -e "click button \"MyButton\" of tab group 1 of window \"MyWindow\"" \
       -e "end tell" \
    -e "end tell"

因此,我的问题是如何在这种情况下区分不同的java进程?

根据您对我的评论的回复,我将做如下操作。请注意,我没有测试它,所以您可能需要调整它,但它显示了如何检查这些特定名称。祝你好运

tell application "System Events"
    set javaProcesses to processes whose name is "java"
    repeat with aJavaProcess in javaProcesses
        tell aJavaProcess
            try
                set windowName to name of window 1
                set buttonNames to title of buttons of tab group 1 of window 1
                if windowName is "Java Control Panel" and "Update Now" is in buttonNames then
                    click (first button of tab group 1 of window 1 whose title is "Update Now")
                    exit repeat
                end if
            end try
        end tell
    end repeat
end tell
编辑:也许你可以通过这样的适当流程

tell application "System Events"
    set javaIDs to unix id of processes whose name is "java"
    repeat with i from 1 to count of javaIDs
        set aJavaProcess to (first process whose unix id is (item i of javaIDs))
        tell aJavaProcess
            -- do the stuff in the tell block from the code above
        end tell
    end repeat
end tell

您需要了解您所针对的流程的一些独特之处。按钮是否有特定的名称,或者窗口的标题是否唯一?也许你可以在窗口中查找某些文本。你需要一些可以依靠的东西来找到正确的流程。只有你能回答这个问题。一旦找到它,请返回并再次询问如何定位特定的唯一属性。是的,按钮有一个唯一的名称“立即更新”,窗口有一个唯一的标题“Java控制面板”。提前感谢您的帮助!我尝试了你的代码,但似乎在“告诉aJavaProcess”时,总是需要第一个启动的java应用程序。比方说,在这个循环中,每轮输出都是相同的。如果只有一个java进程,那么一个进程可能包含所有java应用程序的所有窗口。。。可能因此,只需获取java进程的窗口列表,并重复该列表,寻找正确的窗口名称和按钮标题即可。是的,我同意您的假设,但实际上有两个java进程。这就是所有问题的根源,你是说你不能用“将javaProcesses设置为名为“java”的进程”来获得第二个java进程。那么它的名字一定是别的。查看活动监视器,找出它的名称或pid或其他可以让您了解它的内容。不,您误解了我的意思。实际上,JavaProcesss确实包含两个元素:文献中的“java”和“tell aJavaProcess”,但当应用于“tell aJavaProcess”时,applescript似乎会按顺序选择第一个匹配的“java”进程(按顺序,我的意思是,从“……获取每个进程”)获得的进程列表顺序)