2007.08.31 20:18 bruce:
SVN VS2005插件 http://ankhsvn.tigris.org/
SVN eclipse插件
….
乌龟svn更是windows下易用性极高的工具。非开发人员也能傻瓜使用。
一段时间的实践,全部强制使用svn后,文档版本控制什么成效很好
唯一缺陷:不能限制大文件上传,一些脑壳被门夹了的把svn当ftp,害人,大文件传上去侯又不能删除,怄气
![]() | RSS| 首页| 山顶道| 布珞阁¹| GoodUI| 土产| 关于 |
SVN VS2005插件 http://ankhsvn.tigris.org/
SVN eclipse插件
….
乌龟svn更是windows下易用性极高的工具。非开发人员也能傻瓜使用。
一段时间的实践,全部强制使用svn后,文档版本控制什么成效很好
唯一缺陷:不能限制大文件上传,一些脑壳被门夹了的把svn当ftp,害人,大文件传上去侯又不能删除,怄气
协议还是标准的好。
cisco网络设备,aix solaris unix linux,以及windows上的时间同步,都采用了标准的ntp协议。
但不知道为什么配置就那么麻烦,那么简单那么老的东西,怎么就那么的麻烦
基础知识:
http://ntp.buptnet.edu.cn/ntp_chinese/index.htm
Day Time Protocol(RFC-867)
Time Protocol(RFC-868) 这个我以前用delphi的indy组件实现过
Network Time Protocol (RFC-1305)
Simple Network Time Protocol(RFC-2030)
Network Time Protocol使用port 123,64 bits的binary number,前32 bits和Time Protocol一样,后32 bits用以表示秒以下的部份,并加上网络延时量的估计.理论上可以精确到到2的-32次方秒,实际使用大约只有50ms(广域网)左右,在局域网可达1ms。在实际中您应找最近而且最稳定的Server作时间源。
SNTP算是NTP的一个子集,它不像NTP可以同時和多个Server对时, 一般在Client端下使用。
htj告诉我说SNTP实现简单一些。也有很好的实现代码
ntp.org是ntpd的网站,提供gpl的ntpd各种组件。当然都是跨平台的。新的版本都加了openssl做认证什么的。
windows版编译的也有:http://www.meinberg.de/english/sw/ntp.htm#ntp_nt (新版4.2.0)
http://www.five-ten-sg.com/util/ntp4172.zip(老版NTP 4.1.72 for NT)
ntpd可以做授时。
经多次验证,要在windows上开启ntpd服务,能让windows自己的时间同步、其他os的ntpdate成功连上,还真不是容易的事情。总结如下:
1:新版4.2.0不灵,得老版本才行4.1.72的那个比较顺利,不知道是向下兼容问题还是什么问题
一般就是一直报错,windows时间同步报错:”对等机器的层次比主机层次少”,
Linux下ntpdate报错:no server suitable for synchronization found
2:如果ntpd服务不设置自身时间同步来源,则需要改配置文件 %win%/ntp.conf或启用服务是带配置文件参数:ntpd.exe -M -g -c “C:\NTP\etc\ntp.conf”
配置文件里面描述:
server 127.127.1.0 prefer
fudge 127.127.1.0 stratum 10
这里改为127.0.0.1居然还不灵
用ntpq -p 来查询状态
3:启动后,需要好几分钟后才起作用,大约3-5分钟
不然一开始就测试的话,ntpdate一直会报错no server suitable for synchronization found
怎么可能会这样呢,大部分人都栽在这个上面了。
4:
有待修改和纠正。
那个什么狗屁36x 1周年会上闹了大笑话
http://www.newsmth.net/bbscon.php?bid=26&id=323682
只能喊活该,搬个沙发看笑话。
流氓投资的东西也就那本质了,这年头流氓想转行,老天都不放过他
首先是放一些及其老套的视频篡改,毫无新意。
再就是大广告往下跨,什么都往下跨,想拿垃圾圈投资商的钱,连胶布都没钱买,本质暴露咯。
开源库那么多,只要声明版权,更改了代码贡献出来即可,没必要什么都从0开始实现。
实现得专业还不说,虽然多花了时间还值得,要是实现得烂,那可真让人生气
合作伙伴一个转图功能,把矢量图切割成无数个小图片,结果转换图片那块代码自己实现,jpg画质压缩比也没有参数可调,png和gif导出来不少黑块和偏色, 唯独看得过去的是bmp,但结果一下膨胀30多倍,数据量上到了T级。
其实只要调整jpg压缩比到95%以上就可以解决jpg模糊的问题,但找了一圈开发人员,短期内没法改代码,一个偌大的产品,这些基本模块都是好多年没时间改的bug。维护不来干嘛要自己实现呢?
回头我用imageMagick库实现了个程序,他一边转bmp,我一边把bmp自己压成jpg,算是解决了,也就个把小时的时间。
干嘛要自己写嘛,真是的……
方正告暴雪(其实是9城汉化搞的)在魔兽世界中使用盗版方正字库
安装BC补丁前的Fonts.MPQ
Fonts\ARIALN.TTF
Fonts\FRIZQT__.TTF
Fonts\FZBWJW.TTF
Fonts\FZJZJW.TTF
Fonts\FZLBJW.TTF
Fonts\FZXHJW.TTF
Fonts\FZXHLJW.ttf
这确实也太没版权意思了,9c居然不把用盗版的东西列到风险计划中,暴雪法务也不审核一下
虽然游戏中字体是好看了好多,但也不能随便就把盗版的东西复制成千上万分装给用户。
早花点钱买断不久了了,现在得掏1亿
所以啊,程序里面的控件、资源文件、字库版权,在商业销售前一定要注意版权。
用开源的也得声明版权。
写一个Form的基类,其他Form都从他继承,
在InitializeComponent()前设置this.Icon = icon;
icon可以是来自资源文件,也可以来自进程的Res资源,如下代码获取系统进程的程序图标。设为全局唯一
[StructLayout(LayoutKind.Sequential)]
public struct SHFileInfo
{
public IntPtr hIcon;
public int iIcon;
public uint dwAttribs;
[MarshalAs(UnmanagedType.LPStr, SizeConst = 260)]
public string pszDisplayName;
[MarshalAs(UnmanagedType.LPStr, SizeConst = 80)]
public string pszTypeName;
};
public enum SHGFI { SmallIcon = 0x00000001, LargeIcon = 0x00000000, ICON = 0x000000100, DISPLAYNAME = 0x000000200, TYPENAME = 0x000000400, SysIconIndex = 0x00004000, UseFileAttributes = 0x00000010 }
[DllImport("shell32")]
static extern IntPtr SHGetFileInfo(string pszPath, uint dwAttribs, out SHFileInfo lpfi, int cb, SHGFI flags);
private static System.Drawing.Icon icon_Exe = null;
public static System.Drawing.Icon getExeIcon(){
if (icon_Exe == null)
{
SHFileInfo fileiconinfo = new SHFileInfo();
SHGetFileInfo(Application.ExecutablePath, 0, out fileiconinfo, Marshal.SizeOf(fileiconinfo), SHGFI.ICON | SHGFI.SmallIcon);
icon_Exe = Icon.FromHandle(fileiconinfo.hIcon);
}
return icon_Exe;
}
public FormBase()
{
this.Icon = getExeIcon(); //必须放在初始化组件之前
InitializeComponent();
}
可惜设计器浏览的时候会执行这段代码,显示的图标成了VS2005的图标,FT......
到宜昌,办了个宽带,居然非得用电信提供的极速星空拨号。普通的ppoe或路由器的标准ppoe都会报用户名密码错。
网上一搜,才知道在用户名密码上做了手脚。极速星空拨号器自己加了点前缀
sniffer以后发现了,确实是在用户名前加了个”~U”
用完整的用户名密码在PPOE客户端或路由器上登录就解决了。
可以共享上网了。
C#搞一点系统的API就要声明动态库,访问一点form资源就要托管。
真是够麻烦。
WM_COPYDATA要传指针,没网查,倒腾了我很久
zz,还没阅读,只是用了WM_SETTEXT做了进程间消息通讯内存拷贝的周转
原文地址:http://www.kehui.net/index.php?op=article&file=read&aid=16470
简介:
本文着重讲述了如果用WM_COPYDATA消息来实现两个进程之间传递数据.
进程之间通讯的几种方法:
在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有
使用内存映射文件
通过共享内存DLL共享内存
使用SendMessage向另一进程发送WM_COPYDATA消息
比起前两种的复杂实现来,WM_COPYDATA消息无疑是一种经济实惠的一中方法.
WM_COPYDATA消息的主要目的是允许在进程间传递只读数据。Windows在通过WM_COPYDATA消息传递期间,不提供继承同步方式。SDK文档推荐用户使用SendMessage函数,接受方在数据拷贝完成前不返回,这样发送方就不可能删除和修改数据:
这个函数的原型及其要用到的结构如下:
SendMessage(hwnd,WM_COPYDATA,wParam,lParam);
其中,WM_COPYDATA对应的十六进制数为0×004A
wParam设置为包含数据的窗口的句柄。lParam指向一个COPYDATASTRUCT的结构:
typedef struct tagCOPYDATASTRUCT{该结构用来定义用户数据。
DWORD dwData;//用户定义数据
DWORD cbData;//数据大小
PVOID lpData;//指向数据的指针
}COPYDATASTRUCT;
具体过程如下:
首先,在发送方,用FindWindow找到接受方的句柄,然后向接受方发送WM_COPYDATA消息.
接受方在DefWndProc事件中,来处理这条消息.由于中文编码是两个字节,所以传递中文时候字节长度要搞清楚.
代码中有适量的解释,大家请自己看吧.
具体代码如下:
//---------------------------------------------------
//发送方:
//---------------------------------------------------
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;
namespace WindowsFormGetMsg
{
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TextBox textBox1;
private System.ComponentModel.Container components = null;
const int WM_COPYDATA = 0x004A;
public Form1()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(176, 32);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(160,
21);
this.textBox1.TabIndex = 0;
this.textBox1.Text = "textBox1";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6,
14);
this.ClientSize = new System.Drawing.Size(432, 266);
this.Controls.AddRange(new
System.Windows.Forms.Control[] {
this.textBox1});
this.Name = "Form1";
this.Text = "接收方";
this.ResumeLayout(false);
}
#endregion
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
protected override void DefWndProc(ref
System.Windows.Forms.Message m)
{
switch(m.Msg)
{
//接收自定义消息 USER,并显示其参数
case WM_COPYDATA:
COPYDATASTRUCT mystr = new
COPYDATASTRUCT();
Type mytype = mystr.GetType();
mystr =(COPYDATASTRUCT)m.GetLParam(mytype);
this.textBox1.Text =mystr.lpData;
break;
default:
base.DefWndProc(ref m);
break;
}
}
}
[StructLayout(LayoutKind.Sequential)]
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)] public string lpData;
}
}
//---------------------------------------------------
//接受方
//---------------------------------------------------
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;
namespace WindowsFormGetMsg
{
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TextBox textBox1;
private System.ComponentModel.Container components = null;
const int WM_COPYDATA = 0x004A;
public Form1()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point
(176, 32);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(160, 21);
this.textBox1.TabIndex = 0;
this.textBox1.Text = "textBox1";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(432, 266);
this.Controls.AddRange(new System.Windows.Forms.Control[] {this.textBox1});
this.Name = "Form1";
this.Text = "接收方";
this.ResumeLayout(false);
}
#endregion
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
protected override void DefWndProc(ref System.Windows.Forms.Message m)
{
switch(m.Msg)
{
//接收自定义消息 USER,并显示其参数
case WM_COPYDATA:
COPYDATASTRUCT mystr = new COPYDATASTRUCT();
Type mytype = mystr.GetType();
mystr =(COPYDATASTRUCT)m.GetLParam(mytype);
this.textBox1.Text =mystr.lpData;
break;
default:
base.DefWndProc(ref m);
break;
}
}
}
[StructLayout(LayoutKind.Sequential)]
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)] public string lpData;
}
}
| 分类 | 搜索 | |||||||||||||||||||||||||||||||||||||||||||||||||
月档
|
日历
|
|||||||||||||||||||||||||||||||||||||||||||||||||
|
最新 RSS | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
评论 RSS | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
链接 | ||||||||||||||||||||||||||||||||||||||||||||||||||