Skip to main content

Posts

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, 好像不大容易的样子.