如何在AppleScript中区分多个java进程
我在编写脚本时遇到问题。我需要“告诉”一个java进程(GUI)做一些事情,但还有其他java进程具有相同的进程名称“java”(也是GUI), 因此,我下面的示例代码不适用于我:如何在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
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”进程(按顺序,我的意思是,从“……获取每个进程”)获得的进程列表顺序)