VBS获取程序自身的路径很简单
WScript.Echo WScript.ScriptFullName
C语言其实也也很简单,只可惜以前太菜
TCHAR szFileName[MAX_PATH]; GetModuleFileName(NULL, szFileName, MAX_PATH); MessageBox(NULL, szFileName, TEXT(""), 0);
VBS获取程序自身的路径很简单
WScript.Echo WScript.ScriptFullName
C语言其实也也很简单,只可惜以前太菜
TCHAR szFileName[MAX_PATH]; GetModuleFileName(NULL, szFileName, MAX_PATH); MessageBox(NULL, szFileName, TEXT(""), 0);
在Console程序中可以用main函数中的argc和argv遍历命令行参数。
#include <stdio.h> int main(int argc, char *argv[]) { int i; for(i = 0;i < argc;i++) printf("%s\n", argv[i]); return 0; }
那么在GUI程序中怎么遍历命令行参数呢?虽然WinMain函数的lpCmdLine参数中传入了程序的命令行参数,但是该参数不包含应用程序名(即main函数中的argv[0]),而且自己解析出每个参数也比较麻烦。
最简单的方法是先用GetCommandLineW函数获取命令行,然后用CommandLineToArgvW函数将命令行转化成C语言main函数argc和argv的形式。
#include <windows.h> #include <stdio.h> #include <shellapi.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { LPWSTR *szArglist; int nArgs, i; szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs); for (i = 0; i < nArgs; i++) { MessageBoxW(NULL, szArglist[i], L"", 0); } return 0; }
只可惜没有CommandLineToArgvA函数,想用ANSI版的话得自己用WideCharToMultiByte函数转换一下。
WordPress的开发人员想的也太周到了,自动保存也就算了,还加入了一个修订版本的功能,弄得在WordPress里发一篇文章时往往伴随着一大堆修订版。看着碍眼不说,还占用了大量的数据库空间,弄的数据库臃肿不堪,极大影响SQL查询的效率。比如我目前只有130多篇文章,修订版本却多达400多。
最好的方法当然是禁用这两个功能,但是怎样清理之前自动保存下来的修订版本呢?答案是Delete-Revision插件。
某些纯净党不喜欢用插件。我搜索了一下Delete-Revision的源码,关键的代码就那么一句
$sql = "DELETE FROM $wpdb->posts WHERE post_type = 'revision'";
打开phpMyAdmin,执行对应的SQL语句就行了。
用Visual C++时间也不短了,但是从来没有去研究过它生成的那些乱七八糟的文件有什么用。今天特地查了一下,只列出我感兴趣的,详细的资料请查看参考链接。
今天用VC6重新编译一个以前写过的程序。程序中使用了API函数SetWindowsHookEx,某段代码如下
SetWindowsHookEx(WH_KEYBOARD_LL,KeyHookProc,hInstance,0);
Visual Studio 2008太大了我没有安装,只安装了Visual C++ 6.0和Microsoft Platform SDK February 2003。这个程序以前用VC9(即VC2008)编译没有任何问题,但是今天用VC6编译的时候竟然报错:
error C2065: 'WH_KEYBOARD_LL' : undeclared identifier
MSDN文档上说WH_KEYBOARD_LL要求系统必须至少为Windows NT/2000/XP,我的系统是Windows 2008 R2,怎么还会报错说未定义呢?百思不得其解。
文档说WH_KEYBOARD_LL Declared in Winuser.h,好吧,我就打开Winuser.h看了一下,终于找到了原因:
#if (_WIN32_WINNT >= 0x0400) #define WH_KEYBOARD_LL 13 #define WH_MOUSE_LL 14 #endif // (_WIN32_WINNT >= 0x0400)
罪魁祸首就是这个_WIN32_WINNT,只有当它大于0x0400的时候才定义WH_KEYBOARD_LL。