[REALbasic]SafariをREALbasicからAppleEventで操る
Safariのやることを常時監視したい。
パフォーマンスや安定性が重要になるので、REALbasicからのコントロールは、ダイレクトにAppleEventで実装することにする。
AppleEventのログを取るのにもScriptDebuggerが活躍してくれた。
やってみた感じ、パスパスとデータを取ってきてくれて結構速い気がする。AppleScriptを埋め込んだ場合とmicrosecondsを取って比較してみようかな。
■システムのバージョンを得る(GUI Scriptingのため)
Dim ae as AppleEvent
ae=NewAppleEvent("fndr", "gstl", "sevs")
ae.StringParam("----") = "sysv"
if ae.send() then
if ae.replyInteger >= 4144 then
editfield1.text = "OS Version Check OK"
end if
end if
■UI ScriptingがEnableかどうか
Dim ae as AppleEvent
ae=NewAppleEvent("core", "getd", "sevs")
ae.ObjectSpecifierParam("----") = GetPropertyObjectDescriptor(nil, "uien")
if ae.send() then
if ae.replyBoolean then
editfield1.seltext = "UI Scripting Enable"
else
editfield1.seltext = "UI Scripting Disable"
end if
end if
■SafariをActivateする(GUI Scriptingのため)
Dim ae as AppleEvent
//SafariをActivate
ae = NewAppleEvent("misc","actv","sfri")
if ae.send() then
end if
■ウインドウの数を取ってくる
Dim ae as AppleEvent
ae = NewAppleEvent("core","cnte","sfri")
ae.macTypeParam("kocl")="docu"
If ae.send() then
EditFIeld1.Text = str(ae.replyInteger)
end if
■前面のドキュメント中のURLを取ってくる(8.19訂正)
Dim ae As AppleEvent
Dim obj As AppleEventObjectSpecifier
Dim c As TextConverter
obj=GetIndexedObjectDescriptor("docu", Nil , WinNum)
ae = NewAppleEvent("core","getd","sfri")
ae.ObjectSpecifierParam("----") = GetPropertyObjectDescriptor(obj, "pURL")
If ae.send() Then
c = GetTextConverter(Encodings.UTF16, Encodings.UTF8)
Return c.convert(ae.replyString)
End If
■前面のドキュメント中のhtmlを取ってくる
Dim ae as AppleEvent
Dim obj as AppleEventObjectSpecifier
obj=GetIndexedObjectDescriptor("docu", nil , 1)
ae = NewAppleEvent("core","getd","sfri")
ae.ObjectSpecifierParam("----") = GetPropertyObjectDescriptor(obj, "conT")
If ae.send() then
EditFIeld1.Text = ae.replyString
end if
■前面のドキュメント中のウインドウ名(title)を取ってくる
Dim ae as AppleEvent
Dim objA as AppleEventObjectSpecifier
objA=GetIndexedObjectDescriptor("docu", nil , 1)
ae = NewAppleEvent("core","getd","sfri")
ae.ObjectSpecifierParam("----") = GetPropertyObjectDescriptor(objA, "pnam")
If ae.send() then
EditFIeld1.Text = ae.replyString
end if
■開いているすべてのウインドウ名(title)を取ってくる
Dim ae as AppleEvent
Dim i As Integer
Dim objA as AppleEventObjectSpecifier
objA = GetOrdinalObjectDescriptor("docu",NIL,"all ")
ae = NewAppleEvent("core","getd","sfri")
ae.ObjectSpecifierParam("----") = GetPropertyObjectDescriptor(objA, "pnam")
If ae.send() then
ListBox1.DeleteAllRows
for i = 1 to ae.replyDescList.count
ListBox1.addrow ae.replydescList.stringItem(i)
next
end if
« Mac OS X用AppleScript/Perlの開発環境「Script Debugger3.0」「Affrus1.0」 | Main | [REALbasic]Mac OS Xでは、GlobalFloatingWindowのFloaterProcessが有効にならない問題 »
Recent Comments