« Mac OS X用AppleScript/Perlの開発環境「Script Debugger3.0」「Affrus1.0」 | Main | [REALbasic]Mac OS Xでは、GlobalFloatingWindowのFloaterProcessが有効にならない問題 »

2005.08.17

[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が有効にならない問題 »