IT笔记 · 2014年3月7日

windows sdk的一些需在意的函数

停止更新, 转移至wiki

流水帐,一切详细记得查看MSDN

  • SetProcessWorkingSetSize 设置进程工作集大小
  • MoveFileEx 可以设置为重启电脑后才移动/删除,关键字MOVEFILE_DELAY_UNTIL_REBOOT
  • SHGetFolderPath 获取系统各文件夹路径
  • RegisterWaitForSingleObject,vista之后则是CreateThreadpoolxxx系列函数,现成的线程池来等待事件,不需要自己开线程了。
  • GetExitCodeProcess 获取进程结束时的返回值
  • CreateProcessAsUser如果访问不了注册表HKCU,要考虑调用LoadUserProfile,详见MSDN
  • 关于stations和desktops,详见MSDN:About Window Stations and Desktops
  • CoInitalzieSecurity给进程设置安全权限,一个进程只能设置一次,多次设置会返回RPC_E_TOO_LATE错误,值为0x80010119
  • ATL::CSecurityDescATL提供了这类函数来方便权限设定
  • ShellExecuteEx如果用户为管理员,可以把参数lpVerb设置为"runas"来绕过UAC,具体步骤是用runas启动一个自身新实例,再把自身进程退出。
  • 想让服务和桌面交互?看这里MSDN:Interactive Services.
  • SetProcessShutdownParameters想让程序退出慢时不让弹出重试窗口?关键词SHUTDOWN_NORETRY详见MSDN
  • WTSGetActiveConsoleSessionId只能获取本地用户活动ID,不能获取远程登录ID,要配合用WTSEnumerateSessions来判断state值来获取当前活动用户session id。
  • theme and visual styles手动绘制原生主题风格控件相关
  • Application Registration
  • WNetAddConnection2 映射网络驱动器
  • NetShareAdd 共享文件夹
  • NetUserAdd,NetLocalGroupAddMembers 创建帐户
  • Internationalization GetSystemDefaultLangID 获取系统语言; xp设置程序界面语言:SetThreadLocale;vista以上设置程序界面语言:SetThreadUILanguage

一些坑

  • listview控件行高居然不能直接设置,只能用图片高度或文字字体高度设置
  • 虽然msdn显示托盘图标的气泡提示在XP就能用,但是如果你编译时的_WIN32_WINNT高于等于0x0600, 且用的xin7编译,那么你程序在XP运行时一切正常包括各种返回值都正确,但就是不出托盘气泡——奇葩——所以还是老老实实把那些个宏定到你想支持的最低系统版本吧,不然真不知道会出什么不能追踪的问题——虽然好像程序运行起来没问题。
  • windows服务要接收设备或关机等通知的话,需要用到HandlerEx,但是VS2010默认的ATL服务项目的代码用的是Handler, 需要自己手动copy atlbase.h的相关代码并修改
  • FILETIME需转为LARGE_INTEGER进行处理再转为FILETIME, 需要注意的是 FILETIME的单位是100*nanosecond, 即10,000,000分之一秒
  • 通知栏只是任务栏窗口的一部分, Shell_Notifyicon添加的图标会因为启动时任务栏窗口还未创建, explorer.exe过于繁忙, 或者直接在任务管理器结束explorer.exe 而丢失. 为了避免这种情况, 需要 RegisterWindowMessage(_T("TaskbarCreated"), 详见MSDN:Shell_Notifyicon底下评论部分, 以及Taskbar created notification
  • win32工程的资源界面, 在对话框资源右键菜单中, 选项”Insert Activex Control”是灰的, 要让其可用, 可以删掉resource.h里的宏 “_APS_NO_MFC”!!

edit on 2014-06-05