Skip to main content

Posts

Showing posts from May, 2007

Windows API 获得用户目录

今天写一个程序,需要获得C:\Documents and Settings\<UserName>\Application Data这个目录的文件名. 百度了一下,发现了SHGetFolderPath的函数,示例代码: #include <iostream> #include <shlobj.h> using namespace std; int main(int argc, char* argv[]) { char szPath[MAX_PATH]; if(SUCCEEDED(SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, szPath))) { cout << szPath << endl; } return 0; } 注意代码应链结shell32库,命令行的话用/linkshell32.lib 又查了下MSDN,原型为 HRESULT SHGetFolderPath( HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPTSTR pszPath ); 其中hToken可取以下值: CSIDL_ADMINTOOLS CSIDL_COMMON_ADMINTOOLS CSIDL_APPDATA CSIDL_COMMON_APPDATA CSIDL_COMMON_DOCUMENTS CSIDL_COOKIES CSIDL_FLAG_CREATE CSIDL_HISTORY CSIDL_INTERNET_CACHE CSIDL_LOCAL_APPDATA CSIDL_MYPICTURES CSIDL_PERSONAL CSIDL_PROGRAM_FILES CSIDL_PROGRAM_FILES_COMMON CSIDL_SYSTEM CSIDL_WINDOWS

本地 flash 与 html 交互

Flash提供了几个与html交互的接口, 如getURL,fscommand和ExternalInterface. 不过由于FlashPlayer的安全设置, 本地flash与html交互受到很大限制. 如果不做设置,我这里的情况是只有getURL可以用,其他两种都不行(IE和firefox),非常郁闷 当然可以上Adobe网站的安全设置管理器来更改信任设置,经过一番研究,终于发现设置文件存放在 C:\Documents and Settings\<UserName>\Application Data\Macromedia\Flash Player\macromedia.com\support\flashplayer\sys\settings.sol (Windows) Linux的还没研究过 另外,该文件具体格式也没有研究. 设置了本地信任(指定flash所在目录)后,ExtrenalInterface终于可以用了,不过fscommand只能在IE里用...不知道为什么, 不过足够了, ExternalInterface可比fscommand强大多了. 不过问题终究还是安全问题,唉,安全和用户体验总是矛盾的吧...

ArtStudio

以前看过一个Gif,是手绘一个金发美女的全过程,当时不大知道是怎么做的. 今天发现了ArtStudio这个软件,用了几分钟就爱不释手了,感觉作者是一个老道的画家,里面的功能也许不算多,但是很方便使用,尤其涂抹功能很接近实际画画的感觉. 也许Photoshop也能达到同样效果,但是它毕竟不是专为手绘设计的软件,如果非用它做ArtStudio的事,恐怕要多花几倍时间. 也许买个手绘板,然后跟ArtStudio就是绝配了.

[转]删除eMule搜索历史记录

大家会用EM下载各种东西,而搜索对下载来说是必须的,你的电脑其他人有时也会用的,你一定不想让人看到搜索历史记录中的关键字,那就看下面的清除方法,一些是从 http://forum.emule-project.net/index.php?showtopic=36732 看到的,一些是我的经验 1,在emule运行时,点工具列的“搜索图标”,鼠标点击输入搜索内容的“名字”输入框,按Ctrl+Del,搜索历史记录就清除了,见附图,当然这也是一种暂时清除的方法。清除“从url更新server.met”的历史记录也可以用这个办法 2,搜索历史记录是保存在config目录下的AC_SearchStrings.dat文件中的,可以直接删除 AC_SearchStrings.dat文件,不过每次启动EM会重新生成的。可以用记事本打开,删除里面的内容就可以了,彻底一些的办法删除内容后把 AC_SearchStrings.dat设置为只读。注意:操作时必须先关闭EMULE。 3,最最彻底的方法,用记事本打开config目录下的preferences.ini文件,搜索useautocompletion=1,把1改为0,这样emule就再也不会保存搜索历史记录了。 BTW:修改useautocompletion=0也会使得em不再保存下面三个历史记录 AC_BootstrapIPs.dat Kad中的引导程序的IP地址和端口 AC_IPFilterUpdateURLs.dat IPFilter的更新网址 AC_ServerMetURLs.dat 更新服务器列表的网址

vim 集成调试

今天用gdb调试时突然想到,为什么以前没想到把它和vim集成起来呢? 于是...哦,我不是开始动手编程,而是开始上网搜vim插件... 在vim.org找到一些,一开始下了个rating较高的idevim(解压后叫gdbvim),不过不大好使,而且费了些工夫才删掉... 然后又试了试vimDebug,感觉这个还不错,只是有个小问题,关于gdb启动时的参数,这个插件是自动按当前文件名确定可执行文件名,这个不大好,虽然\s/可以带参数启动debugger,不过参数仍是放在它自动确定的可执行文件名的后面... 经过一番尝试,最终解决方案如下: 修改vimDebug.vim,在120行左右 把 let l:cmd = "vdd.pl " . l:debugger . " " . l:fileName 中最后的. l:filename去掉,改为 let l:cmd = "vdd.pl " . l:debugger . " " 这样虽然按 不能正常启动了(实际上本来就不好用),但是\s/加可执行文件名可以正常调用gdb 不错. 但是似乎还有写小问题,作者在USAGE写了, 再研究研究吧.

runauto.. 查杀

同学机器中毒了,症状如下: 每个盘根目录下增加autorun.inf 和一个目录runauto.. 很多命令msconfig, cmd, regedit等不能运行. 我看了下,首先根据autorun.inf找到一个pif 然后根据文件日期又找到一堆exe,这些都好办,删掉就行了. 我记得有 c:\windows\lsass.exe c:\windows\setuprs1.pif c:\windows\cmd.exe.exe 可能不全. 不过那个runauto..目录却删不掉, 但是我发现在纯dos下可以进入(但是由于属性等问题,不好删)... 参考了http://hi.baidu.com/creative_zone/blog/item/5555efb494408d728bd4b2bb.html 发现应该用rd "runauto.../" /s /q, 然后成功删除, 这个非常奇妙,我自己试了试md "tmp.../", 然后有类似现象,是Windows的bug么? 另外需要停掉一个服务,叫做Kerberos Key Distribution Centers, 最好也从注册表里删掉 最后发现那些命令还是不能用, 然后搜了下注册表, 发现在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options 下,有很多项,其中 cmd.exe, msconfig.exe 等项中均有一个键叫叫做"Debugger",值为病毒pif, 那没什么好说的,删! 于是都正常了. 最后又搜了一遍,删了几个可疑项和键值, 至此就算完成了.

Linux 纯终端字体配置

今天决定尝试更改纯终端字体,由于Linux加载时有一行消息是说set font and keymap之类,于是我从/etc/init.d下手. 首先grep "font" *, 发现有关脚本是console-screen.sh 和 console-setup. 一开始研究的是console-screen.sh,里面调用的命令是consolechars, 但是试了几次都不管用, 后来看到这个脚本开始几行会判断setupcon是否存在,如果是就直接退出了. 然后就看console-setup, 里面也是调用的setupcon 于是目标锁定setupcon, 看了看help, 得知配置文件在/etc/default/console-setup, 而字体文件在/usr/share/consolefonts, 里面有一大堆psf文件 这样,先找好字体(当然自己弄也可以),然后在console-setup里,修改对应的CODESET, FONTFACE, FONTSIZE, 最后sudo /etc/init.d/console-setup restart 就行了. 现在正在研究如何把ttf转成psf, 好像不大容易的样子.

fcitx 异常退出

更新至ubuntu 7.04后,某天进到图形界面后突然发现fcitx不能用了,症状是fcitx的面板还在,但是按一个健后它就崩溃了,如果用终端运行可以看到提示信息是 FCITX -- Get Signal No.: 11 FCITX -- Exit Signal No.: 11 在网上查了一下,然后把~/.fcitx删掉就好了 本来想进一步查明具体是哪里出了问题,但是后来手太快把原来目录的备份给删掉了...于是证据就被销毁了 现在只是知道这个应该根~/.fcitx/config无关,虽然不是很肯定,但是一开始我把这个文件删了...问题依旧.那么就剩下~/.fcitx/config和拼音词表了. 不过算了,下次再研究吧.

figlet 中文支持

figlet的帮助里说它支持多字节字符,如CJK字符。 不过这肯定需要字体文件,我查到它叫figfonts-CJK,但是不大容易下到,后来发现Debian里虽然package下不来,但是src可以,解开以后赫然发现了gb16fs.flf,呵呵,把里面所有的flf和flc文件放到/usr/share/figlet里就好了,注意要去掉目录,只把文件拷过来。 本以为现在就行了,可是“figlet -f gb16fs 王璐”是乱码,又查了查帮助,说是需要control file, figfonts-CJK自带了一些,叫unshift, iso2022, big5等,但是都试了一遍还是不行。 仔细看了figfont.txt, 它描述了figlet的字体文件和控制文件的格式,我发现控制文件中应当用b命令,但是后来发现用了也不行。 再看一眼figfont.txt中关于command的说明,发现h命令类似,只不过是针对HZ编码的,是以"~{"为开始符,然后把以后每两个字节都当成一个汉字处理,直到遇到"~}"为止。我写个CPP看“王”的GB编码,是0xcdf5, 在gb16fs 对应于0x4d75, 我又看了下unshift.flc,这不就是我想要的么,unshift里定义的编码转换就是把每个字节的首二进制位清零,那么0xcdf5就应该变成0x4d75,但是仔细一看又不对了,每个t命令接的两个区间应该等大,而它里面第一个区间都是以\0x??7E结尾的,显然不对,应该改为\0x??FE,于是我另存了个wl.flc,修正了这个bug 现在试“figlet -f wl 王璐” 仍然不行,直觉告诉了我,它仍没有按多字节处理,又查了下gb16fs.flf,果然乱码的第一个符号就是202,即0xcd,“王”的第一个字节! 于是改用h命令强制处理双字节,并把输入改为"~{王璐~}",字体仍用gb16fs,控制文件用wl(已加入wl.flc),于是, 出现了!!! 这就是成功的一大步了,说明了h命令是好的,字体文件也是好的,figlet也确实具有处理多字节字符的能力,于是目标锁定在b命令上 文档上说b命令每次读一个字符,如果小于0x80则当单字节字符输出,否则再读入一个字符,一起当作双字节字符输出。看似这应当正常工作,但是就是不行。 然后我...

ubuntu 控制台登陆信息

ubuntu控制台登陆后会出一些信息(当然了,Linux都有。。。) man login 可以知道这个东西是存在/etc/motd里的,motd是message of the day的缩写. 不过不知道是不是ubuntu做了修改,我这里看它是个指向/var/run/motd的链接,修改后登陆信息确实变了,但是重启后就又回去了。仔细看发现/etc有个motd.tail,内容跟motd一样,把这个改了就“真的改了”。估计是ubuntu启动时动态生成一个motd. 我现在用的是figlet生成的消息,挺哏儿的。

Ascii Art: figlet

有个程序叫做figlet, 跟banner类似,不过支持的字体和字符集都很丰富。 学校源里就有,装有有那么20来个字体,我都看了一遍,挺不错。 然后发现它似乎支持utf和cjk之类的,但是试了试没有成功。于是又用aptitude看这个包,有两个suggest,figfonts和figfonts-cjk,是字体包,而源里都没有,我去debian下了个figfonts,然后字体猛地多了好多好多,我不得不写个程序看看这些都如何。里面确实有很多好看&好玩的,如caligraphy, poison, smblood等都挺有特色。 但是figfonts-cjk似乎不是那么好下,debian上的就不行。我再找找看。

mplayer 与 ascii art

mplayer 确实是个好东西,今天查到它竟然支持ascii art输出 -vo aa 或 caca, 前者是黑白的,后者彩色。 用它看了会儿《蜘蛛侠》,感觉效果还行吧,彩色的略有些卡。别有风味~~~ 确实很有趣。

AAlib & bb

今天在源里看到了libaa这么个库,跟ascii art应该有关,觉得有趣就装上了。 然后多了个aafire可以运行,是个ascii art的火焰效果,挺有意思。 再看manpage,发现有个bb,源里还真有,是个libaa的演示程序。 安装,运行。。。 。。。 哇。。。简直让我瞠目结舌,文字环境也能出这样的效果! 做的很不错呢,等我有空研究一下

中文 console jfbterm

今天搞明白了jfbterm的用法 /etc/jfbterm.conf里有各种编码和字体文件的对应关系 然后jfbterm --reset=<编码> 运行,或者运行后切换编码 简体中文用GB2312 utf8用UTF8 另外好像应该修改LC_ALL(准确的说是LC_CTYPE). BIG5默认没有打开,好像是靠iconv转码后输出 现在感觉utf-8的字体英文较好,GB2312的中文不错. 它不与w3m-img冲突!!因此可以同时看中文和图片!!太棒了!! 一个问题是退出时常常死机,但是按Ctrl-Alt-Del可以重启 另一个问题是没有输入法,有待解决

ubuntu 7.04 latex 中文支持

ubuntu升级到7.04后,我的latex突然不能用了,出现 undefined control sequence: .. 后来发现编译英文的没问题,说明还是中文的事 一开始重装了几遍,都没用,然后我怒了,把tetex*, latex-cjk*等包都删掉,然后把/usr/share/texmf, /usr/share/texmf-tetex等目录删掉,再重装上面那些包。不过配置时出现了错误。 运行了几次dpkg --configure -a后发现问题出在updmap-sys上,进一步发现说找不到"cjk.map",仔细想了想,这应该是上次我手工添加中文字体留下来的文件,查了若干资料后发现应该问题醋在/etc/texmf/updmap.d/10local.cfg, 我这里应该清空它。 然后configure就通过了。 然而,这之后编译以前的文件仍是不认中文,又查了半天资料,原来我装的那些字体的字体名不是song, kai等,而是gbsn, gkai,改过来就好了。 因此现在ubuntu下配置中文latex再也不用像从前那样麻烦了(好像其实以前也有字体包,是我没发现或不会用吧-_-b,另外如果想装自己的ttf,可能还要像前面的文章说的那样折腾一次。不过注意记住改了哪些文件,以免发生今天这种情况) 看看了这些包的帮助,对CJK三国文字支持的都不错,支持的编码页很多,GBK,Bg5,UTF8样样行,让我眼前一亮.(当然CJK本身就行,我这是因为终于装好了) 不错

ubuntu 7.04 之改进

今天决定把ubuntu升到7.04了,目前发现了一些变化 首先是源的变化,当然会有很多变化,与我日常相关的有eva和latex-cjk。很明显的latex-cjk变全了从原来的一个cjk-latex变成了现在的latex-cjk*,对中日韩支持的包都有,另外还有字体文件。 另外就是发现增加了很多vim和latex的插件 另外终端下的w3m终于可以看图片了,应该是关于framebuffer的改进.真不错,当然zhcon下还不行. 2007.05.15 补充 以前终端下如果CapsLock打开,则键盘就好像被按住了Shift键一样,字母还是大写的,但是如果我按1,实际会出来!,如果按=,则实际会出+。但是现在没有这个问题了。看来对键盘方面也有改进。 还有更多的等着我发掘呢..

控制台下浏览器 links2

以前我知道的控制台下的浏览器只有lynx,和w3m.而且我觉的w3m明显比lynx好用. 不过人的欲望是无止境的,对于软件,总是希望更多更好的功能. w3m-img和zhcon的冲突好像是众所周知了,而我这ubuntu控制台,即使没用zhcon, w3m也看不了图片. 今天发现了links2这个浏览器,支持图片和javascript!!简直就是惊喜,看上去几乎就是个图形程序. 但是!它先天不支持中文,唉,作者也真是的... 不过以后看英文网站就铁定是它了.

Linux 控制台 使用QQ

有个MilyQQ,可以在Linux和Windows控制台里运行 几个月前我发现它时,还不能在我这里正常运行,但是今天突然好了. 只是由于它不是开源的,稍微有点不放心. 但是做的确实很不错 详情见作者主页: http://spadger.blog.com.cn

w3m 上 GMail

其实以前知道可以了,不过一直不知道怎么弄 后来知道了要进Plain HTML模式,然后查到了地址 https://mail.google.com/mail?ui=html 这篇文章就是用w3m发过来的 :) 注意设好外部编辑器,我当然用vim了

Firefox 中 xmlhttprequest 跨域访问

今天要写一个小爬虫,用xmlhttprequest批量抓取一个图片集的链接,不过firefox有安全限制,对跨域访问有限制,需要权限提升。 记得在《Ajax in Action》曾看到过,现在忘了,在网上竟然查了半天才找到,(原以为Google第一个就是呢) 只需在xmlhttprequest作用域内加入 netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); 即可。 参考: http://www.captain.at/howto-ajax-permission-denied-xmlhttprequest.php

一些电视台/电台的直播地址

摘自 轻而易举用KMPlay看几百个电视台 [[更新]] 深圳都市频道=rtspt://219.134.129.194/sztv-1 深圳电视剧台=rtspt://219.134.129.194/sztv-2 深圳财经生活=rtspt://219.134.129.194/sztv-3 深圳娱乐频道=rtspt://219.134.129.195/sztv-4 深圳少儿频道=rtspt://219.134.129.195/sztv-6 深圳公共频道=rtspt://219.134.129.195/sztv-7 西安白鸽都市=mms://vod1.xatvs.com/xatv2 西安新闻综合=mms://vod1.xatvs.com/xatv1 安康综合频道=mms://61.150.111.204/news 晋城新闻综合=mms://219.147.36.250/live1 晋城公共频道=mms://219.147.36.250/live2 晋城信息频道=mms://219.147.36.250/live3 cctv1=mms://61.177.180.147/cctv1 CCTV2=mms://61.155.44.132/cctv2 CCTV3=mms://222.185.236.50/101 CCTV4=mms://222.185.236.50/103 CCTV9=mms://live.cctv.com/live3 [[国内电视台]] CCTV新闻=mms://live.cctv.com/live3 阳光卫视=mms://222.187.118.52/tv4 TVB8=mms://218.73.94.50/tv-tvb8 山东卫视=mms://202.102.188.43/sdtv 北京卫视=mms://222.185.236.50/107 丽水电视台=mms://202.96.114.251/lstv 丽水经济台=mms://202.96.114.251/lstv2/ CCTV1=mms://live.cctv.com/live1 CCTV=mms://61.49.22.106:1755/live1 CCTV4=mms://winmedia.cctv.com.cn/live CCTV5=mmst://218.69.1...

[转] 几个Sniffer(嗅探器)工具

对于文中介绍的嗅探器,我只知道11,12和13 //原文 Sniffer(嗅探器)是一种常用的收集 有用数据方法, 这些数据可以是用户的帐号和密码, 可以是一些商用机密数据等等. Sniffer可以作为能够捕获网络报文的设备, ISS为Sniffer这样定义:Sniffer是利用计算机的网络接口截获目的地为其他计算机的数据报文的一种工具. Sniffer根据网络的类型分为两个类别: 1.交换环境下的Sniffer 2.共享环境下的Sniffer 交换环境下的Sniffer往往是通过对交换机进行ARP欺骗, 变成一个中间人进行截获数据. 共享环境下的Sniffer仅仅只需要把本机的网卡设置为混杂模式就可以监听网络上所有的数据报, 而不需要进行任何欺骗行为. Sniffer的原理: 交换环境的网络使用交换机(Switch)连接各个网络节点, 而共享环境的网络则采用集线器连接各个节点. 先说共享环境吧, 共享网络也成为集线器网络, 数据报到达集线器以后, 集线器会把数据报转发到每个集线器的端口, 换句话说, 集线器连接的每个网络节点都有权利收到所有的数据报. 运行Sniffer以后, Sniffer会把网卡设置为混杂模式, 一旦设置为混杂模式, Sniffer就可以接受所有的数据报, 这样也就达到了Sniffer的目的. 交换环境, 通过使用交换机代替共享环境下的集线器, 能够解决集线器的几个安全问题, 交换机通过自己的ARP缓存列表来决定把数据报发送到某个端口, 这样就不是把一个数据报转发到各个端口了, 这样的做法一方面大大提高了网络的性能, 另一方面也提高了安全性, 在交换环境下, 即使网卡设置为混杂模式, 也只能监听本机的数据包, 因为交换机不会把其他节点的数据报转发给嗅探主机了. 所以, 在交换环境下必须想办法让被嗅探主机的数据报发到嗅探主机来, 能够实现这种目的方法叫做ARP欺骗(ARP Spoofing), 这种方式通过伪造ARP数据包欺骗交换机使交换机更新ARP缓存列表达到欺骗的目的, 这样发送到被嗅探的主机的数据报完全转发到嗅探主机来, 而被嗅探主机收不到任何的数据包, 为了使得能够正常的截获数据报, 嗅探主机除了充当嗅探的身份之外, 还要充当中间人的身份. 具体的原理和方式可以去Google上搜索ARP欺骗. 交换环境下在不...