<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Architecting Life &#187; Mac</title>
	<atom:link href="http://www.xujiwei.com/blog/tags/mac/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.xujiwei.com/blog</link>
	<description>Just do it</description>
	<lastBuildDate>Wed, 21 Jul 2010 05:56:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<atom:link rel='hub' href='http://www.xujiwei.com/blog/?pushpress=hub'/>
		<item>
		<title>[Cocoa学习] 限制 NSTextField 中输入文本的长度</title>
		<link>http://www.xujiwei.com/blog/2010/05/25/limit-text-length-of-nstextfield/</link>
		<comments>http://www.xujiwei.com/blog/2010/05/25/limit-text-length-of-nstextfield/#comments</comments>
		<pubDate>Tue, 25 May 2010 07:36:39 +0000</pubDate>
		<dc:creator>Xu Jiwei</dc:creator>
				<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[NSTextField]]></category>

		<guid isPermaLink="false">http://www.xujiwei.com/blog/?p=299</guid>
		<description><![CDATA[需求 NSTextField 作为一个常用的输入控件，有些在使用时需要去限制其中可以输入文本的长度，而 NSTextField 本身并没有提供这个功能，这就需要我们自己去想办法来实现了。 方法 在网上找了一下，发现可以通过继承 NSFormatter 实现一个子类来实现这个功能，参考了一下找到的代码[1]，再将主要的 isPartialStringValid 方法根据自己的需要改了一下。 &#160; - &#40;BOOL&#41;isPartialStringValid:&#40;NSString **&#41;partialStringPtr proposedSelectedRange:&#40;NSRangePointer&#41;proposedSelRangePtr originalString:&#40;NSString *&#41;origString originalSelectedRange:&#40;NSRange&#41;origSelRange errorDescription:&#40;NSString **&#41;error &#123; int size = &#91;*partialStringPtr length&#93;; if &#40; size &#62; maxLength &#41; &#123; if &#40;origSelRange.location == &#91;origString length&#93;&#41; &#123; // 如果修改的位置在原来字符串的最后，则不做修改，只是拒绝内容修改 &#125; else &#123; // 如果修改的位置在原来字符串的中间，就根据剩余的可用的长度把新增加的字符串进行截取 int preLen = origSelRange.location + &#40;maxLength - &#91;origString <a href="http://www.xujiwei.com/blog/2010/05/25/limit-text-length-of-nstextfield/" class="more-link">More &#62;</a>]]></description>
			<content:encoded><![CDATA[<h4>需求</h4>
<p>NSTextField 作为一个常用的输入控件，有些在使用时需要去限制其中可以输入文本的长度，而 NSTextField 本身并没有提供这个功能，这就需要我们自己去想办法来实现了。</p>
<h4>方法</h4>
<p>在网上找了一下，发现可以通过继承 NSFormatter 实现一个子类来实现这个功能，参考了一下找到的代码<sup><a href="#ref-1">[1]</a></sup>，再将主要的 isPartialStringValid 方法根据自己的需要改了一下。</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;">&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">BOOL</span><span style="color: #002200;">&#41;</span>isPartialStringValid<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span> <span style="color: #002200;">**</span><span style="color: #002200;">&#41;</span>partialStringPtr
       proposedSelectedRange<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>NSRangePointer<span style="color: #002200;">&#41;</span>proposedSelRangePtr
              originalString<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>origString
       originalSelectedRange<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">NSRange</span><span style="color: #002200;">&#41;</span>origSelRange
            errorDescription<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span> <span style="color: #002200;">**</span><span style="color: #002200;">&#41;</span>error 
<span style="color: #002200;">&#123;</span>
    <span style="color: #a61390;">int</span> size <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">*</span>partialStringPtr length<span style="color: #002200;">&#93;</span>;
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> size &gt; maxLength <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
        <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>origSelRange.location <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span>origString length<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
            <span style="color: #11740a; font-style: italic;">// 如果修改的位置在原来字符串的最后，则不做修改，只是拒绝内容修改</span>
        <span style="color: #002200;">&#125;</span> <span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span>
            <span style="color: #11740a; font-style: italic;">// 如果修改的位置在原来字符串的中间，就根据剩余的可用的长度把新增加的字符串进行截取</span>
            <span style="color: #a61390;">int</span> preLen <span style="color: #002200;">=</span> origSelRange.location <span style="color: #002200;">+</span> <span style="color: #002200;">&#40;</span>maxLength <span style="color: #002200;">-</span> <span style="color: #002200;">&#91;</span>origString length<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">+</span> origSelRange.length;
            <span style="color: #002200;">*</span>partialStringPtr <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSString</span> stringWithFormat<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%@%@&quot;</span>,
                                 <span style="color: #002200;">&#91;</span><span style="color: #002200;">*</span>partialStringPtr substringToIndex<span style="color: #002200;">:</span>preLen<span style="color: #002200;">&#93;</span>,
                                 <span style="color: #002200;">&#91;</span>origString substringFromIndex<span style="color: #002200;">:</span>origSelRange.location<span style="color: #002200;">+</span>origSelRange.length<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
&nbsp;
            <span style="color: #002200;">&#40;</span><span style="color: #002200;">*</span>proposedSelRangePtr<span style="color: #002200;">&#41;</span>.location <span style="color: #002200;">=</span> preLen;
        <span style="color: #002200;">&#125;</span>
&nbsp;
        <span style="color: #a61390;">return</span> <span style="color: #a61390;">NO</span>;
    <span style="color: #002200;">&#125;</span>
    <span style="color: #a61390;">return</span> <span style="color: #a61390;">YES</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<h4>参考资料</h4>
<ul>
<li id="ref-1"><a href="http://stackoverflow.com/questions/827014/how-to-limit-nstextfield-text-length-and-keep-it-always-upper-case">How to limit NSTextField text length and keep it always upper case?</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.xujiwei.com/blog/2010/05/25/limit-text-length-of-nstextfield/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[HOWTO] 在 Mac 下的 Safari 中直接打开 iWangWang 进行聊天</title>
		<link>http://www.xujiwei.com/blog/2010/03/19/use-iwangwang-in-safari/</link>
		<comments>http://www.xujiwei.com/blog/2010/03/19/use-iwangwang-in-safari/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 04:20:33 +0000</pubDate>
		<dc:creator>Xu Jiwei</dc:creator>
				<category><![CDATA[iWangWang]]></category>
		<category><![CDATA[GreaseKit]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[SIMBL]]></category>
		<category><![CDATA[旺旺]]></category>
		<category><![CDATA[淘宝]]></category>

		<guid isPermaLink="false">http://www.xujiwei.com/blog/?p=267</guid>
		<description><![CDATA[鉴于支付宝已经发布供 Safari 使用的安全登录控件，并且 Safari 可以自动调用关联程序来打开自定义协议，所有 Safari 下的点击旺旺图标打开 iWangWang 进行聊天比较容易实现，使用一个用户脚本就行。 要实现在 Safari 中点击旺旺图标进行聊天，步骤如下： 安装 SIMBL 下载地址：http://www.culater.net/software/SIMBL/SIMBL.php SIMBL 可以理解为一个扩展加载器，因为 Safari 本身并不支持扩展机制，所有 SIMBL 使用了一种 Hack 的方式来方便加载第三方扩展。 安装 GreaseKit 下载地址：http://8-p.info/greasekit/ GreaseKit 是一个类似于 GreaseMonkey 的扩展，可以通过它在 Safari 运行用户脚本。 如果你的系统是 Mac OS X Leopard，那么可能会出现安装 GreaseKit 失败的情况，这时可以试试一位网友重新编译的 GreaseKit，下载地址，关于这个问题的讨论可以看这里。 最后，安装 iWangWang 聊天用户脚本 安装地址：http://iwangwang.googlecode.com/hg/wwprotocol.user.js 如果已经正确安装了 GreaseKit，那么在访问这个地址时，浏览器会询问是否安装“WangWang Protocol Handler”，选择“是”即可。 如果你已经将 iWangWang 放到了应用程序目录，那么在点击旺旺图标聊天时，会自动打开 iWangWang，如果 iWangWang 没有放到应用程序目录，那么你可能需要先运行 iWangWang <a href="http://www.xujiwei.com/blog/2010/03/19/use-iwangwang-in-safari/" class="more-link">More &#62;</a>]]></description>
			<content:encoded><![CDATA[<p>鉴于支付宝已经发布供 Safari 使用的安全登录控件，并且 Safari 可以自动调用关联程序来打开自定义协议，所有 Safari 下的点击旺旺图标打开 iWangWang 进行聊天比较容易实现，使用一个用户脚本就行。</p>
<p>要实现在 Safari 中点击旺旺图标进行聊天，步骤如下：</p>
<ol>
<li>安装 SIMBL<br />
下载地址：<a href="http://www.culater.net/software/SIMBL/SIMBL.php">http://www.culater.net/software/SIMBL/SIMBL.php</a><br />
SIMBL 可以理解为一个扩展加载器，因为 Safari 本身并不支持扩展机制，所有 SIMBL 使用了一种 Hack 的方式来方便加载第三方扩展。</li>
<li>安装 GreaseKit<br />
下载地址：<a href="http://8-p.info/greasekit/">http://8-p.info/greasekit/<br />
</a>GreaseKit 是一个类似于 GreaseMonkey 的扩展，可以通过它在 Safari 运行用户脚本。<br />
如果你的系统是 Mac OS X Leopard，那么可能会出现安装 GreaseKit 失败的情况，这时可以试试一位网友重新编译的 GreaseKit，<a href="http://code.google.com/p/iwangwang/downloads/detail?name=GreaseKit-1.7_leo.zip&amp;can=2&amp;q=#makechanges">下载地址</a>，关于这个问题的讨论可以看<a href="http://code.google.com/p/greasekit/issues/detail?id=38">这里</a>。</li>
<li>最后，安装 iWangWang 聊天用户脚本<br />
安装地址：<a href="http://iwangwang.googlecode.com/hg/wwprotocol.user.js">http://iwangwang.googlecode.com/hg/wwprotocol.user.js<br />
</a>如果已经正确安装了 GreaseKit，那么在访问这个地址时，浏览器会询问是否安装“WangWang Protocol Handler”，选择“是”即可。</li>
</ol>
<p>如果你已经将 iWangWang 放到了应用程序目录，那么在点击旺旺图标聊天时，会自动打开 iWangWang，如果 iWangWang 没有放到应用程序目录，那么你可能需要先运行 iWangWang 才可以使用点击旺旺图标进行聊天的功能。</p>
<p>如果有任何问题请联系我 ohdarling88 # gmail dot com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xujiwei.com/blog/2010/03/19/use-iwangwang-in-safari/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>iWangWang v0.1.2 for Mac 发布</title>
		<link>http://www.xujiwei.com/blog/2010/03/18/iwangwang-v0-1-released/</link>
		<comments>http://www.xujiwei.com/blog/2010/03/18/iwangwang-v0-1-released/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 06:07:57 +0000</pubDate>
		<dc:creator>Xu Jiwei</dc:creator>
				<category><![CDATA[iWangWang]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[REALbasic]]></category>
		<category><![CDATA[旺旺]]></category>

		<guid isPermaLink="false">http://www.xujiwei.com/blog/?p=259</guid>
		<description><![CDATA[iWangWang 是一个在 Mac OS X 下使用的 Web 旺旺的客户端，使用 Mac 用户在淘宝购物时也可以方便地与卖家沟通，不需要每次打开 Web 旺旺，以及弥补 Web 旺旺不支持联系人列表及聊天记录的缺陷，并且目前只支持淘宝网帐号登录。 iWangWang 使用 REALbasic 编写，因为是基于 Web 旺旺的，所以 Web 旺旺不支持的功能 iWangWang 也没有实现，包括但不限于旺旺群、自定义表情、文件传送，并且和某一个联系人第一次聊天时，需要输入验证码。 注意： 这纯粹是我个人出于兴趣而制作的一个程序，与公司无关。 因为使用非公开接口，协议通过黑盒分析所得，因此有可能会由于 Web 旺旺修改通信协议而导致程序无法使用。 由于缺乏艺术细胞，因此程序界面仿照 MacQQ，如果觉得有内容侵犯了您的权利，请及时联系我修改，谢谢 :) 因为淘宝帐号涉及到金钱，所以如果不放心请不要使用这个程序 :) 如果有任何问题或建议，请联系 ohdarling88 # gmail dot com，或者点击菜单“文件》填写使用反馈”来填写反馈内容。 14:40 Update 更新下载链接，修正了接收带有自定义表情的消息时会导致程序崩溃的bug，如果已经下载，可以直接点击菜单“iWangWang &#62; 检查更新” 下载地址：http://iwangwang.googlecode.com/files/iWangWang-v0.1.2.zip]]></description>
			<content:encoded><![CDATA[<p>iWangWang 是一个<strong>在 Mac OS X 下使用的 Web 旺旺的客户端</strong>，使用 Mac 用户在<a href="http://www.taobao.com" target="_blank">淘宝</a>购物时也可以方便地与卖家沟通，不需要每次打开 Web 旺旺，以及弥补 Web 旺旺不支持联系人列表及聊天记录的缺陷，并且目前<strong>只支持淘宝网帐号登录。</strong></p>
<p>iWangWang 使用 REALbasic 编写，因为是基于 Web 旺旺的，所以 Web 旺旺不支持的功能 iWangWang 也没有实现，包括但不限于旺旺群、自定义表情、文件传送，并且和某一个联系人第一次聊天时，需要输入验证码。</p>
<p>注意：</p>
<ol>
<li>这纯粹是我个人出于兴趣而制作的一个程序，与公司无关。</li>
<li>因为使用非公开接口，协议通过黑盒分析所得，因此有可能会由于 Web 旺旺修改通信协议而导致程序无法使用。</li>
<li>由于缺乏艺术细胞，因此程序界面仿照 MacQQ，如果觉得有内容侵犯了您的权利，请及时联系我修改，谢谢 :)</li>
<li>因为淘宝帐号涉及到金钱，所以如果不放心请不要使用这个程序 :)</li>
</ol>
<p>如果有任何问题或建议，请联系 ohdarling88 # gmail dot com，或者点击菜单“文件》填写使用反馈”来填写反馈内容。</p>
<p><span style="color: red;"><strong>14:40 Update 更新下载链接，修正了接收带有自定义表情的消息时会导致程序崩溃的bug，如果已经下载，可以直接点击菜单“iWangWang &gt; 检查更新”</strong></span></p>
<p>下载地址：<a href="http://iwangwang.googlecode.com/files/iWangWang-v0.1.2.zip">http://iwangwang.googlecode.com/files/iWangWang-v0.1.2.zip</a></p>
<p><a href="http://www.xujiwei.com/blog/wp-content/uploads/2010/03/iwangwang.png"><img class="alignnone size-full wp-image-260" title="iwangwang" src="http://www.xujiwei.com/blog/wp-content/uploads/2010/03/iwangwang.png" alt="" width="330" height="552" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xujiwei.com/blog/2010/03/18/iwangwang-v0-1-released/feed/</wfw:commentRss>
		<slash:comments>57</slash:comments>
		</item>
		<item>
		<title>在 REALbasic 中注册 AppleEvent</title>
		<link>http://www.xujiwei.com/blog/2010/01/31/register-appleevent-in-realbasic/</link>
		<comments>http://www.xujiwei.com/blog/2010/01/31/register-appleevent-in-realbasic/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 06:37:19 +0000</pubDate>
		<dc:creator>Xu Jiwei</dc:creator>
				<category><![CDATA[Desktop]]></category>
		<category><![CDATA[AppleEvent]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[REALbasic]]></category>

		<guid isPermaLink="false">http://www.xujiwei.com/blog/?p=228</guid>
		<description><![CDATA[之前为了注册一个自定义协议，需要通过注册 AppleEvent 来实现，在 Objective-C 中，可以很方便的使用 NSAppleEventManager 来注册 AppleEvent 句柄，但是在 REALbaisc 中，是没有办法直接去调用 NSAppleEventManager 的，所以需要通过声明然后调用 C API 来实现相应的功能。 与 NSAppleEventManager 中功能相对应的 C API 有 AEInstallEventHandler, NewAEEventHandlerUPP 等，通过这些 API 我们也可以在 REALbasic 中来注册 AppleEvent 了，再配合 Info.plist 中的 URLScheme 声明，即可实现 URL 自定义协议处理句柄。 #if TargetCarbon soft declare function AEInstallEventHandler Lib CarbonLib ( _ theAEEventClass as Integer, _ theAEEventID as Integer, _ <a href="http://www.xujiwei.com/blog/2010/01/31/register-appleevent-in-realbasic/" class="more-link">More &#62;</a>]]></description>
			<content:encoded><![CDATA[<p>之前为了注册一个自定义协议，需要通过注册 AppleEvent 来实现，在 Objective-C 中，可以很方便的使用 NSAppleEventManager 来注册 AppleEvent 句柄，但是在 REALbaisc 中，是没有办法直接去调用 NSAppleEventManager 的，所以需要通过声明然后调用 C API 来实现相应的功能。</p>
<p>与 NSAppleEventManager 中功能相对应的 C API 有 AEInstallEventHandler, NewAEEventHandlerUPP 等，通过这些 API 我们也可以在 REALbasic 中来注册 AppleEvent 了，再配合 Info.plist 中的 URLScheme 声明，即可实现 URL 自定义协议处理句柄。</p>

<div class="wp_syntax"><div class="code"><pre class="vb" style="font-family:monospace;">#if TargetCarbon
    soft <span style="color: #000080;">declare</span> <span style="color: #000080;">function</span> AEInstallEventHandler <span style="color: #000080;">Lib</span> CarbonLib ( _
    theAEEventClass <span style="color: #000080;">as</span> <span style="color: #000080;">Integer</span>, _
    theAEEventID <span style="color: #000080;">as</span> <span style="color: #000080;">Integer</span>, _
    handler <span style="color: #000080;">as</span> <span style="color: #000080;">Integer</span>, _
    handlerRefcon <span style="color: #000080;">as</span> <span style="color: #000080;">Integer</span>, _
    isSysHandler <span style="color: #000080;">as</span> <span style="color: #000080;">Boolean</span>) <span style="color: #000080;">as</span> <span style="color: #000080;">Integer</span>
&nbsp;
    Soft <span style="color: #000080;">Declare</span> <span style="color: #000080;">Function</span> NewAEEventHandlerUPP <span style="color: #000080;">Lib</span> CarbonLib (userRoutine <span style="color: #000080;">as</span> Ptr) <span style="color: #000080;">as</span> <span style="color: #000080;">Integer</span>
&nbsp;
    <span style="color: #000080;">Static</span> CallbackUPP <span style="color: #000080;">as</span> <span style="color: #000080;">Integer</span> = 0
    <span style="color: #000080;">If</span> CallbackUPP = 0 <span style="color: #000080;">then</span>
      <span style="color: #000080;">dim</span> m <span style="color: #000080;">as</span> MemoryBlock =  <span style="color: #000080;">AddressOf</span> ForwardCarbonAEEventToObject
      <span style="color: #000080;">If</span> m <span style="color: #000080;">is</span> nil <span style="color: #000080;">then</span>
        Return
      <span style="color: #000080;">End</span> <span style="color: #000080;">if</span>
      CallbackUPP = NewAEEventHandlerUPP(m)
    <span style="color: #000080;">End</span> <span style="color: #000080;">if</span>
&nbsp;
    <span style="color: #000080;">dim</span> v <span style="color: #000080;">as</span> <span style="color: #000080;">Variant</span> = me
&nbsp;
    <span style="color: #000080;">dim</span> OSError <span style="color: #000080;">as</span> <span style="color: #000080;">Integer</span> = AEInstallEventHandler( _
    OSTypeToUInt(kInternetEventClass), _
    OSTypeToUInt(kAEGetURL), _
    CallbackUPP, _
    v.Hash, <span style="color: #000080;">false</span>)
&nbsp;
    msgbox str(OSError)
#endif</pre></div></div>

<p>先使用 NewAEEventHandlerUPP 来生成一个 AppleEvent 回调函数的句柄，然后调用 AEInstallEventHandler 来注册一个共享函数 ForwardCarbonAEEventToObject 为 AppleEvent 事件处理句柄。</p>
<p>AEInstallEventHandler 所需的 AEEventClass 和 AEEventID 都是一个 4 字节的整型，但是通常我们在调用的时候，是用的一个 4 字符的字符串，因此需要一个函数来将 4 字符转换为 4 字节的整形。</p>

<div class="wp_syntax"><div class="code"><pre class="vb" style="font-family:monospace;">// code from ToolbarSearchField by The ZAZ Studios
// http://www.thezaz.com/opensource/realbasic/macosx/searchfield/
<span style="color: #000080;">static</span> m <span style="color: #000080;">as</span> <span style="color: #000080;">new</span> MemoryBlock(4)
m.LittleEndian = <span style="color: #000080;">false</span>
m.StringValue(0, 4) = s
return m.UInt32Value(0)</pre></div></div>

<p>在 ForwardCartonAEEventToObject 里，参数 theEvent 和 replyEvent 都量个整形，为了从这两个参数里拿到数据，还需要使用 AEGetParamPtr 来从 AppleEvent 中拿到数据。</p>

<div class="wp_syntax"><div class="code"><pre class="vb" style="font-family:monospace;">soft <span style="color: #000080;">declare</span> <span style="color: #000080;">function</span> AEGetParamPtr <span style="color: #000080;">lib</span> CarbonLib ( _
    theAppleEvent <span style="color: #000080;">as</span> <span style="color: #000080;">Integer</span>, theAEKeyword <span style="color: #000080;">as</span> <span style="color: #000080;">Integer</span>, _
    desiredType <span style="color: #000080;">as</span> <span style="color: #000080;">Integer</span>, <span style="color: #000080;">byref</span> actualType <span style="color: #000080;">as</span> <span style="color: #000080;">Integer</span>, _
    dataPtr <span style="color: #000080;">as</span> Ptr, maximumSize <span style="color: #000080;">as</span> <span style="color: #000080;">Integer</span>, _
    <span style="color: #000080;">byref</span> actualSize <span style="color: #000080;">as</span> <span style="color: #000080;">Integer</span>) <span style="color: #000080;">as</span> <span style="color: #000080;">Integer</span></pre></div></div>

<p>当然还有一系列的 AEGetDataDesc、AEGetDescSize 等函数可以，具体可以查 Xocde 随带的库文档。</p>
<p>关于注册自定义协议，可以参考<a href="http://stackoverflow.com/questions/49510/how-do-you-set-your-cocoa-application-as-the-default-web-browser">这篇文章</a>。</p>
<p>通过 Core Foundation 中的一些 C API，在 REALbasic 也可以完成一些平台相关的工作，虽然麻烦了些：）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xujiwei.com/blog/2010/01/31/register-appleevent-in-realbasic/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Chromium Updater for Mac</title>
		<link>http://www.xujiwei.com/blog/2009/11/07/chromium-updater-for-mac/</link>
		<comments>http://www.xujiwei.com/blog/2009/11/07/chromium-updater-for-mac/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 03:12:08 +0000</pubDate>
		<dc:creator>Xu Jiwei</dc:creator>
				<category><![CDATA[Utilities]]></category>
		<category><![CDATA[Chromium]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[REALbasic]]></category>

		<guid isPermaLink="false">http://tmp.xujiwei.com/blog/?p=68</guid>
		<description><![CDATA[为了随时更新到 Chromium 的最新 nightly build，又不想每次去 Chromium 的网站下，还有解压，移动，麻烦……为了省事，直接用 REALbasic 写了一个 Chromium Updater，专门用来更新 Chromium。目前只支持 Mac :) 详细说明 下载（使用右键下载）：ChromiumUpdater (3.5M)]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://apps.xujiwei.com/wp-content/uploads/2009/11/ChromiumUpdater_128x128.png" alt="图片附件" width="128" height="128" />为了随时更新到 Chromium 的最新 nightly build，又不想每次去 Chromium 的网站下，还有解压，移动，麻烦……为了省事，直接用 REALbasic 写了一个 Chromium Updater，专门用来更新 Chromium。目前只支持 Mac :)</p>
<p><a rel="external" href="http://apps.xujiwei.com/utilites/chromiumupdater">详细说明</a></p>
<p>下载（使用右键下载）：<a rel="external" href="http://apps.ohdarling.info/ChromiumUpdater/ChromiumUpdater.zip">ChromiumUpdater</a> (3.5M)</p>
<p><img src="http://apps.xujiwei.com/wp-content/uploads/2009/11/ChromiumUpdater-screentshot.png" alt="图片附件" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xujiwei.com/blog/2009/11/07/chromium-updater-for-mac/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>解决 Finder 中挂载 Samba 出现“输入的文本似乎不是可识别的 URL 格式”错误</title>
		<link>http://www.xujiwei.com/blog/2009/10/15/mount-samba-in-finder-problem/</link>
		<comments>http://www.xujiwei.com/blog/2009/10/15/mount-samba-in-finder-problem/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 09:06:42 +0000</pubDate>
		<dc:creator>Xu Jiwei</dc:creator>
				<category><![CDATA[Notes]]></category>
		<category><![CDATA[Finder]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Samba]]></category>

		<guid isPermaLink="false">http://tmp.xujiwei.com/blog/?p=74</guid>
		<description><![CDATA[在公司里为了让笔记本和台式机共享文档，决定用内部的 Samba 做中转，但是在 Finder 中直接使用“连接到服务器”时，会出现“输入的文本似乎不是可识别的 URL 格式”错误，但是我输入的地址明明是 smb:// 开头的。 用这个错误信息在网上找了找，没有找到任何解决文案，遂放弃。 今天决定再尝试一下，换了个关键字，直接用“iDeneb samba”作为关键字来搜索，慢慢发掘之后还真找到了有用的信息：http://www.hackint0sh.org/f179/81233.htm 按照文中说明，到 /System/Library/Filesystems 目录下，把 afpfs.fs 删除，并重新创建到 /System/Library/Filesystems/AppleShare/afpfs.kext 的软链接，但是操作完之后还是会提示“输入的文本似乎不是可识别的 URL 格式”。 再找了找，找到了这篇：http://www.insanelymac.com/forum/i &#8230; opic=92989&#38;st=580，似乎说是系统安装完成时 afpfs.fs 到 /System/Library/Filesystems/AppleShare/afpfs.kext 的软链接少了开头的斜杠，也就是说它的软链接地址是 System/Library/Filesystems/AppleShare/afpfs.kext。 好吧，我在之前操作的时候为了省事，直接进入 Filesystems 目录用相对路径来创建软链接的，看了文章之后，老老实实的用全路径再次创建软链接，Command+K，双击，成功连上 Samba 服务器：） 完整的操作步骤也只有两步： sudo rm /System/Library/Filesystems/afpfs.fs sudo ln -s /System/Library/Filesystems/AppleShare/afpfs.kext /System/Library/Filesystems/afpfs.fs 注意：一定不能省略了路径最开始的斜杠（/）或者使用相对路径。 所以，如果你也是用黑苹果的，也碰到了这个问题，不妨试试这个解决方法吧。]]></description>
			<content:encoded><![CDATA[<p>在公司里为了让笔记本和台式机共享文档，决定用内部的 Samba 做中转，但是在 Finder 中直接使用“连接到服务器”时，会出现“输入的文本似乎不是可识别的 URL 格式”错误，但是我输入的地址明明是 smb:// 开头的。</p>
<p>用这个错误信息在网上找了找，没有找到任何解决文案，遂放弃。</p>
<p>今天决定再尝试一下，换了个关键字，直接用“iDeneb samba”作为关键字来搜索，慢慢发掘之后还真找到了有用的信息：<a rel="external" href="http://www.hackint0sh.org/f179/81233.htm">http://www.hackint0sh.org/f179/81233.htm</a></p>
<p>按照文中说明，到 <em>/System/Library/Filesystems</em> 目录下，把 afpfs.fs 删除，并重新创建到 <em>/System/Library/Filesystems/AppleShare/afpfs.kext</em> 的软链接，但是操作完之后还是会提示“输入的文本似乎不是可识别的 URL 格式”。</p>
<p>再找了找，找到了这篇：<a rel="external" href="http://www.insanelymac.com/forum/index.php?showtopic=92989&amp;st=580">http://www.insanelymac.com/forum/i &#8230; opic=92989&amp;st=580</a>，似乎说是系统安装完成时 afpfs.fs 到 <em>/System/Library/Filesystems/AppleShare/afpfs.kext</em> 的软链接少了开头的斜杠，也就是说它的软链接地址是 <em>System/Library/Filesystems/AppleShare/afpfs.kext</em>。</p>
<p>好吧，我在之前操作的时候为了省事，直接进入 Filesystems 目录用相对路径来创建软链接的，看了文章之后，老老实实的用全路径再次创建软链接，Command+K，双击，成功连上 Samba 服务器：）</p>
<p>完整的操作步骤也只有两步：</p>
<blockquote><p>sudo rm /System/Library/Filesystems/afpfs.fs</p>
<p>sudo ln -s /System/Library/Filesystems/AppleShare/afpfs.kext /System/Library/Filesystems/afpfs.fs</p></blockquote>
<p><strong>注意：一定不能省略了路径最开始的斜杠（/）或者使用相对路径。</strong></p>
<p>所以，如果你也是用黑苹果的，也碰到了这个问题，不妨试试这个解决方法吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xujiwei.com/blog/2009/10/15/mount-samba-in-finder-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1000E 升级到 2G 内存时安装 OSX 需要用到的 dsdt.aml</title>
		<link>http://www.xujiwei.com/blog/2009/09/06/dsdt-for-eeepc-1000e-with-2g-memory/</link>
		<comments>http://www.xujiwei.com/blog/2009/09/06/dsdt-for-eeepc-1000e-with-2g-memory/#comments</comments>
		<pubDate>Sun, 06 Sep 2009 00:49:37 +0000</pubDate>
		<dc:creator>Xu Jiwei</dc:creator>
				<category><![CDATA[Notes]]></category>
		<category><![CDATA[DSDT]]></category>
		<category><![CDATA[EeePC]]></category>
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://tmp.xujiwei.com/blog/?p=76</guid>
		<description><![CDATA[上周去把 EPC 的内存升级到了 2G，直接发现开机进不了 OSX 了。 在两天没有电脑用之后，下定决心重装系统。重装之后，能进系统，但是重新启动之后键盘和触摸板就不能用了，电池状态指示挂了，郁闷。 在网上找了找，发现可能是 dsdt 的问题。由于内存大小变了，dsdt 中的信息不正确，继而导致 ACPI 失效，然后就整个玩完了。 一个老外找到了解决方法，通过修改 dsdt.aml 文件中的内存大小信息，就可以正确进入系统了。直接下载他提供的压缩包中的 dsdt.aml，开机直接四国了…… 好吧，这个老外蛮厚道的，给出了手动处理的方法： For the 1GB: … Name (SMBS, 0×0400) OperationRegion (BIOS, SystemMemory, 0x3F7AE064, 0xFF) Field (BIOS, ByteAcc, NoLock, Preserve) { … For the 2GB: … Name (SMBS, 0×0400) OperationRegion (BIOS, SystemMemory, 0x7F7AE064, 0xFF) Field (BIOS, ByteAcc, NoLock, Preserve) { 手动修改步骤 1. 首先要下载一个 dsdt.aml 反编译的工具：ACPICA - Windows Binary Tools 2. 解压后有一个 iasl.exe，把它拷贝到 dsdt.aml 所在的目录或者把 dsdt.aml 拷贝到 iasl 的目录都行，然后在命令行中运行：iasl -d dsdt.aml 3. 按照上面的说明，使用文本编辑器打开 dsdt.aml.dsl，根据你的内存大小修改 SystemMemory 后面的数值，1G 就用 0x3F7AE064，2G 就用 0x7F7AE064。 4. 再到命令行中，运行 iasl dsdt.aml.dsl，它会生成一个 dsdt.aml.aml，把它拷贝到 OSX 所在分区的根目录，覆盖原来的 dsdt.aml 即可。或者也可以把原来的文件备份一下，方便出错的还原。 参考资料 eee 1000H(E) – DSDT files and the memory problem]]></description>
			<content:encoded><![CDATA[<p>上周去把 EPC 的内存升级到了 2G，直接发现开机进不了 OSX 了。</p>
<p>在两天没有电脑用之后，下定决心重装系统。重装之后，能进系统，但是重新启动之后键盘和触摸板就不能用了，电池状态指示挂了，郁闷。</p>
<p>在网上找了找，发现可能是 dsdt 的问题。由于内存大小变了，dsdt 中的信息不正确，继而导致 ACPI 失效，然后就整个玩完了。</p>
<p>一个<a rel="external" href="http://www.enik.ch/2009/06/eee-1000he-dsdt-files-and-the-memory-problem/">老外找到了解决方法</a>，通过修改 dsdt.aml 文件中的内存大小信息，就可以正确进入系统了。直接下载他提供的压缩包中的 dsdt.aml，开机直接四国了……</p>
<p>好吧，这个老外蛮厚道的，给出了手动处理的方法：</p>
<blockquote><p><strong>For the 1GB:</strong><br />
…<br />
Name (SMBS, 0×0400)<br />
OperationRegion (BIOS, SystemMemory, 0x3F7AE064, 0xFF)<br />
Field (BIOS, ByteAcc, NoLock, Preserve)<br />
{<br />
…<br />
<strong>For the 2GB:</strong><br />
…<br />
Name (SMBS, 0×0400)<br />
OperationRegion (BIOS, SystemMemory, 0x7F7AE064, 0xFF)<br />
Field (BIOS, ByteAcc, NoLock, Preserve)<br />
{</p></blockquote>
<p><strong>手动修改步骤</strong></p>
<p>1. 首先要下载一个 dsdt.aml 反编译的工具：<a rel="external" href="http://www.acpica.org/downloads/binary_tools.php">ACPICA - Windows Binary Tools</a></p>
<p>2. 解压后有一个 iasl.exe，把它拷贝到 dsdt.aml 所在的目录或者把 dsdt.aml 拷贝到 iasl 的目录都行，然后在命令行中运行：<em>iasl -d dsdt.aml</em></p>
<p>3. 按照上面的说明，使用文本编辑器打开 dsdt.aml.dsl，根据你的内存大小修改 SystemMemory 后面的数值，1G 就用 0x3F7AE064，2G 就用 0x7F7AE064。</p>
<p>4. 再到命令行中，运行 <em>iasl dsdt.aml.dsl</em>，它会生成一个 dsdt.aml.aml，把它拷贝到 OSX 所在分区的根目录，覆盖原来的 dsdt.aml 即可。或者也可以把原来的文件备份一下，方便出错的还原。</p>
<p><strong>参考资料</strong></p>
<ol>
<li><a rel="external" href="http://www.enik.ch/2009/06/eee-1000he-dsdt-files-and-the-memory-problem/">eee 1000H(E) – DSDT files and the memory problem</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.xujiwei.com/blog/2009/09/06/dsdt-for-eeepc-1000e-with-2g-memory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
