显示具有 Google Talk 标签的文章。 显示所有文章
显示具有 Google Talk 标签的文章。 显示所有文章

2007年10月28日 星期日

Besti Talk折腰的第一个版本


黑色的Title是可以当MouseDown的时候接受窗体拖动的。
窗体边框是可以resizer的。这个问题在昨天的日志上已经提到了怎么实现。
阴影效果同样在昨天的日志中已经提及。
最大的问题是突然间Jabber服务器一个都登录不了了。真伤心。

通宵写程序容易发迷糊。 整个风格都是模仿Google talk完成的。对了,要值得提及的是:我把Google talk中的 设置和帮助标签放到了TrayIcon里了。那个不常用的按钮没有必要出现在重要的位置,去掉后可以把图像的照片调整的更加大,就美观多了。

这个.NET界面是折腰了。未来多月内修改一下,还是打算用WinAPI老老实实的完成。

2007年10月27日 星期六

如何实现IE协议调用本地程序?

  刚才在看zuola的Blog的时候,看到右上有
  1. skype:+8613467668333?call
  2. skype:zuola.com?add
  3. mailto:zuola.com@gmail.com
  4. gtalk:chat?jid=zuola.com@gmail.com

  这看上去类似URL协议的东西。特别是最后一个,你可能会想到QQ也可以。那么他们是怎么做到的?去Google了一下,其实实现还挺简单的。通过一下注册表很快能实现类似skype:, mailto:, gtalk:, 包括verycd的这些很cool的浏览器调用方法。


REGEDIT4
[HKEY_CLASSES_ROOT\notenote]
"URL Protocol"="notepad.exe"
[HKEY_CLASSES_ROOT\notenote\DefaultIcon]
@="notepad.exe,1"
[HKEY_CLASSES_ROOT\notenote\shell\open\command]
@="notepad.exe"

  把上面的notenote全部换成naiotalk以及路径,或者你自己的程序。

REGEDIT4 [HKEY_CLASSES_ROOT\naiotalk]
"URL Protocol"="naiotalk.exe"
[HKEY_CLASSES_ROOT\naiotalk\DefaultIcon]
@="naiotalk.exe,1"
[HKEY_CLASSES_ROOT\notenote\shell\open\command]
@="C:\Program Files\Naio Network\Naio Talk\notepad.exe"
"/%1"


注意
  以上代码保存到txt文件。然后修改文件名后缀为.reg。双击运行即可导入注册表。
  这样你就可以在IE浏览器里输入 naiotalk: (注意有冒号),即可调用naiotalk.如果想在你自己的程序中指定传参,那可就不是几句话了。


自动化对象才可以的.也就是进程外COM

How to Resize Windows with No Form border in .NET

如何在.NET调整一个无窗体边缘的窗体?

  在Naio Talk的界面设计部分,由于项目周期的问题以及对Windows系统编程尤其是消息传递机制的不熟悉,选择了.NET来开发。为了使得克服.NET带来的窗体反应迟钝感,打算对Naio Talk的界面经行彻底精心设计。

  其中计划将Naio Talk的主界面的窗体边框去掉。一是减少重绘,二是看上去更加轻薄。

首先设置窗体FormBorderStyle = None;
然后添加如下C#代码即可。

protected override void WndProc(ref Message m)
{base.WndProc(ref m);
switch (m.Msg)
{
case WM_NCHITTEST:
Point vPoint = new Point((int)m.LParam &
0xFFFF,

(int)m.LParam >> 16 &
0xFFFF);

vPoint = PointToClient(vPoint);
if (vPoint.X <= 5)
if (vPoint.Y <= 5)
m.Result = (IntPtr)HTTOPLEFT;
else if (vPoint.Y >= ClientSize.Height -5)
m.Result = (IntPtr)HTBOTTOMLEFT;
else m.Result = (IntPtr)HTLEFT;
else if (vPoint.X >= ClientSize.Width - 5)
if (vPoint.Y <= 5)
m.Result = (IntPtr)HTTOPRIGHT;
else if (vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)HTBOTTOMRIGHT;
else m.Result = (IntPtr)HTRIGHT;
else if (vPoint.Y <= 5)
m.Result = (IntPtr)HTTOP;
else if (vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)HTBOTTOM;
break;
}
}
}

以及如下的成员变量。

const int WM_NCHITTEST = 0x0084;
const int HTLEFT = 10;
const int HTRIGHT = 11;
const int HTTOP = 12;
const int HTTOPLEFT = 13;
const int HTTOPRIGHT = 14;
const int HTBOTTOM = 15;
const int HTBOTTOMLEFT = 0x10;
const int HTBOTTOMRIGHT = 17;



2007年10月26日 星期五

Google Talk协议构架

  网络上一定有很多人在搜索Google Talk是怎么设计和代码的。所以Google Group上也会有人问Google Talk开源?Google Talk代码在哪里?Google Talk 的API有不?

  如果你不是编程熟手,那么很遗憾地告诉你,Google Talk提供了一种更加广泛的接口或者说是标准,也就是你熟悉的XMPP/Jabber.当然,你光知道这个名词是不能了解Google Talk如何工作的。

  Google Talk使用了3种协议(或者说扩展了2种)。并且将这3种协议的实现库lib都开源了。您可以从code.google.com上搜索到。
  1. Google Talk构建于大的XMPP协议上。所以您使用PSI,iChat都能连接上。XMPP协议的各个语言实现库可以从Jabber.com中的库列表中找到。
  2. XEP: XMPP enhancement proposals。然后Google Talk Server中使用了一个非标准的扩展,来实现Google Talk的一些特色功能。该功能通过XEP extensions来实现。
  3. libjingle :C++库,提供Google Talk点对点文件传输,视频,语音聊天功能的协议实现。
具体的Google Talk英文文档简介可参看:Google API about Google Talk

如何设置Google企业用户帐号连接Google Talk服务

  如果你使用Google Talk来连接您的Google App(Google 企业应用程序),那么您不会碰到无法连接的问题。

  然而,企业用户毕竟是个企业,而非个人。必然有企业的需求,这也是会出现那么多Enterprise版本的原因吧。
企业内部可能需要自己的通讯客户端。比如YourCompany Talk.不过我在完成一个Besti Talk的时候,发现 -_-我竟然连不上Google 的Jabber服务器。后来才发现配置的问题。
以下是正确配置和使用agsXMPP SDK的参考代码。

string input = support@naionetwork.net;
Jid jid = new Jid(input);
_connection.Server= jid.Server;
_connection.Username= jid.User;
_connection.Password= “my password”;
_connection.Resource= "psi";
_connection.Priority= 10; //一般我习惯写5
_connection.Port= 5223;
_connection.UseSSL= true
_connection.AutoResolveConnectServer=False;
_connection.ConnectServer ="talk.google.com";//not null
_connection.SocketConnectionType =agsXMPP.net.SocketConnectionType.Direct;
_connection.UseStartTLS = true;


  如果我的Google App帐号是support@naionetwork.net
  则 jid.server = naionetwork.net
  这里要区别的是ConnectServer = "talk.google.com"。同时你要记得设置AutoResolveConnectServer为False.否则就找naionetwork.net来连接您的Jabber服务器了。如果您使用Google App帐号,显然无法成功通讯了。
 
(L)1984 - 2007 TONY CHEUNG