人较笨且记性不好,故记录在此.折叠代码打不开请F5.本博中很多是转载收录其他网友的文章(原文地址请见博文末尾),所有权为原作者所有!!!
此博客已不再更新和维护,欢迎关注我的github新博客

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

随笔分类 -  Win SDK

1 2 下一页

摘要:1、判断文件是否存在 _access, _waccess:http://msdn.microsoft.com/en-us/library/1w06ktdy(v=vs.80).aspx2、判断文件是否正在使用 1)若文件不是被独占方式打开,那么这个不好判断 2)如文件是被独占方式打开,那么再次以独占方式打开就搞定了。 3)不管独占与否:枚举系统先有句柄handle,从0~4096,间隔4。 当然这里要注意其他程序是否在这期间对文件是否进行操作 for(DWORD i = 0; i < 4096; i +=4 ) // 找到之后根据GetModuleFileName即可 源码... 阅读全文
posted @ 2012-03-28 22:05 子坞 阅读(845) 评论(0) 推荐(0)

摘要:在Windows注册表操作的API中,如果参数有"__out_opt LPDWORD pdwType",那么"pdwType"则是保存的为键值的类型。注册表中键值类型的分类:ValueTypeREG_BINARYBinary data in any form.REG_DWORDA 32-bit number.REG_DWORD_LITTLE_ENDIANA 32-bit number in little-endian format.Windows is designed to run on little-endian computer architect 阅读全文
posted @ 2012-03-20 23:09 子坞 阅读(1254) 评论(0) 推荐(0)

摘要:今天在写一个测试程序的时候,使用SHGetFolderPath获取用户数据目录,在本机运行时能成功,但是放进虚拟机测试的却返回错误代码5,拒绝访问。 同样是win7 32位。本机的UAC是最低,测试机的UAC是默认的。当时稍微查阅资料大概说是权限问题,于是将测试机的UAC设置为最低,这时程序能正常运行,但是返回的路径却不是我要的“C:\Users\Admin\AppData\Roaming”,而是一个"c:\windows\"下面的路径,很是纳闷。 后来想到既然不能用api函数直接获取,那么可以从注册表中读取。相关注册表值见“HKEY_CURRENT_USER\Softwa 阅读全文
posted @ 2012-03-19 22:57 子坞 阅读(3181) 评论(1) 推荐(0)

摘要:Windows开机和关机慢,很多时候慢得令人抓狂。特别是做嵌入式开发时(如XPE和WinCE),任谁都无法忍受开发出来的设备开关机的蜗牛速度。所以我们得为她加速。采用HORM是不错的方案,因为是直接从休眠文件中恢复系统现场,开机速度快了不少。采用HORM方案后,Windows默认的关机过程中,很多步骤对我们的设备来说,是完全不需要的,我们需要直接断电关机。本文将分析Windows的关机过程,然后介绍如何使用Windows未公开的API实现直接断电关机。 一、Windows关机过程 简单地说,在Windows关机时,系统做了以下工作: 1. 软保护首先先结束登录用户打开的所有程序,保存... 阅读全文
posted @ 2012-03-15 23:50 子坞 阅读(3854) 评论(0) 推荐(0)

摘要:有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。CreateProcess因为使用复杂,比较少用。 WinExec主要运行EXE文件。 ⑴ 函数原型:UINTWinExec(LPCSTRlpCmdLine,UINTuCmdShow); ⑵ 参数: lpCmdLine:指向一个空结束的字符串,串中包含将要执行的应用程序的命令行(文件名加上可选参数)。 uCmdShow:定义Windows应用程序的窗口如何显示,并为CreateProcess函数提供STARTUPINFO参数的wShowWindow成员的值。 ⑶ 返回值: ... 阅读全文
posted @ 2012-03-12 21:28 子坞 阅读(33715) 评论(0) 推荐(2)

摘要:本地时间(LocalTime)转UTC时间(Time_t格式)View Code #include <time.h>#include <stdio.h>#include <stdlib.h>#include <windows.h>long GetLongTimeByStrInC(char* strTime){ if(strTime == NULL) return 0; char years[5] ={""}, month[3] = {""}, day[3] = {""}, \ hour[ 阅读全文
posted @ 2012-02-23 00:04 子坞 阅读(655) 评论(0) 推荐(0)

摘要:Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix 系统、类Unix系统中,也在许多其他操作系统中被广泛采用。 目前相当一部分操作系统使用32位二进制数字表示时间。此类系统的Unix时间戳最多可以使用到格林威治时间2038年01月19日03时14分07秒(二进制:01111111 11111111 11111111 11111111)。其后一秒,二进制数字会变为10000000 0... 阅读全文
posted @ 2012-02-22 23:47 子坞 阅读(864) 评论(0) 推荐(0)

摘要:关于桌面的概念,这个我也不太清楚,改天看到相关资料了在放上来。下面只是一个简单的测试,更具体的使用请参考下面:MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/ms687107(v=vs.85).aspxint APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nC... 阅读全文
posted @ 2012-02-18 20:30 子坞 阅读(8395) 评论(0) 推荐(1)

摘要://以下两个函数由user32.dll导出,只是没有微软官方文档记载,大家在cpp中包含了以下部分,就可以调用MessageBoxTimeout了。extern "C"{ int WINAPI MessageBoxTimeoutA(IN HWND hWnd, IN LPCSTR lpText, IN LPCSTR lpCaption, IN UINT uType, IN WORD wLanguageId, IN DWORD dwMilliseconds); int WINAPI MessageBoxTimeoutW(IN HWND hWnd, IN LPCWSTR lpTe 阅读全文
posted @ 2012-02-18 20:07 子坞 阅读(1725) 评论(0) 推荐(0)

摘要:General Memory FunctionsThe following functions are used in memory management.FunctionDescriptionCopyMemoryCopies a block of memory from one location to another.复制内存,第一个参数为目的地址,第二个参数为源地址,第三个参数为复制数据的大小,单位为字节。CreateMemoryResourceNotificationCreates a memory resource notification object.FillMemoryFills 阅读全文
posted @ 2012-01-31 18:17 子坞 阅读(799) 评论(0) 推荐(0)

摘要:MSDN:http://msdn.microsoft.com/en-us/library/ms633539(v=VS.85).aspx下面是谷歌翻译,有些语句不是很流畅。 SetForegroundWindow函数将创建指定的窗口,并激活到前台窗口的线程 。键盘输入窗口,并为用户更改不同的视觉线索。该系统分配一个优先略高前景的窗口,比它其他线程创建的线程。语法 BOOL SetForegroundWindow( HWNDHWND);参数HWND [in]应该被激活,并带到前景的窗口句柄。返回值 如果窗口被带到前台,返回值为非零。 如果窗口不带到前景,返回值是零。备注 Wi... 阅读全文
posted @ 2012-01-06 23:37 子坞 阅读(52745) 评论(0) 推荐(1)

摘要:函数功能描述:GetProcAddress函数检索指定的动态链接库(DLL)中的输出库函数地址。(使用动态调用函数地址之后,第三方程序(比如Depend.exe)就不会查出程序使用了哪些库和哪些函数)函数原型:FARPROC GetProcAddress( HMODULE hModule, // DLL模块句柄 LPCSTR lpProcName // 函数名);参数:hModule [in] 包含此函数的DLL模块的句柄。LoadLibrary或者GetModuleHandle函数可以返回此句柄。lpProcName [in] 包含函数名的以NULL结尾的字符串,或者指定函数的序数值。如果此 阅读全文
posted @ 2011-12-24 19:09 子坞 阅读(5253) 评论(0) 推荐(0)

摘要:GetTempPath 获取系统临时文件目录 函数原型:DWORD GetTempPath( DWORD ccBuffer, LPTSTR lpszBuffer);GetTempFileName 生成或创建临时文件 函数原型:UINT GetTempFileName( LPCTSTR lpPathName, LPCTSTR lpPrefixString, UINT uUnique, LPTSTR lpTempFileName); 参数:①临时文件保存的目录 ②新临时文件的名字 ③新临时文件的名字(最终临时文件名会根据参数2、3组合,参数3将被转换为16进制)。 ... 阅读全文
posted @ 2011-12-04 00:12 子坞 阅读(343) 评论(0) 推荐(0)

摘要:SetforcegroundwindowBringwindowtotopSwitchToThiswindowSetActiveWindow先空着 阅读全文
posted @ 2011-12-04 00:00 子坞 阅读(597) 评论(0) 推荐(0)

摘要:MSDN上如此说: The WaitForInputIdle function waits until the specified process is waiting for user input with no input pending, or until the time-out interval has elapsed. DWORD WaitForInputIdle( HANDLE hProcess, // handle to process DWORD dwMilliseconds // time-out interval ); Paramete... 阅读全文
posted @ 2011-12-03 00:36 子坞 阅读(3845) 评论(4) 推荐(0)

摘要:本文内容摘自《Windows核心编程》(第五版)Page26。 文中已经详细阐述了这两个函数的用法,我这里仅仅作为备忘录。函数的参数请参考百度百科MultiByteToWideChar和WideCharToMultiByte。函数原型:int MultiByteToWideChar( UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cchMultiByte, LPWSTR lpWideCharStr, int cchWideChar ); int WideCharToMu... 阅读全文
posted @ 2011-11-05 12:37 子坞 阅读(35410) 评论(1) 推荐(3)

摘要:LARGE_INTEGERLARGE_INTEGER是union;用于表示一64位有符号整数值.其他定义如下:View Code typedef union _LARGE_INTEGER { struct { DWORD LowPart; LONG HighPart; }; LONGLONG QuadPart; } LARGE_INTEGER; 如果你有编译器直接支持64位整数可以直接使用QuadPart(64... 阅读全文
posted @ 2011-10-11 15:40 子坞 阅读(599) 评论(0) 推荐(0)

摘要:这两天写一个关于电脑电源选项的管理程序,可以使电脑能更少的用电。最开始想的是通过注册表来实现,然后搜索关键字就为“电源选项 注册表”,然后国庆的前面两天一直是在忙于“电源选项”和“注册表”之间的联系,花了一天的时间来分析关系,然后另一天的时间来架构和编码。郁闷的是,最后做出来程序可以操作电源选项的那部分注册表,但是就是电源不按照设置的工作,也没有查出原因来,我猜测可能是分析出来电源注册表值之间关系不对,或是注册表更新的问题。 没办法,这个管理程序要急于做出来,于是厚着脸皮去请教同学了,他先过来搜索的是“VC 注册表 更新”(受我之前的想法),不过还是没有解决问题,于是搜索“VC 电源选项... 阅读全文
posted @ 2011-10-04 22:11 子坞 阅读(4264) 评论(0) 推荐(0)

摘要:使用C/C++语言开发软件的程序员经常碰到这样的问题:有时候是程序编译没有问题,但是链接的时候总是报告函数不存在(经典的LNK 2001错误),有时候是程序编译和链接都没有错误,但是只要调用库中的函数就会出现堆栈异常。这些现象通常是出现在C和C++的代码混合使用的情况下或在C++程序中使用第三方的库的情况下(不是用C++语言开发的),其实这都是函数调用约定(CallingConvention)和函数名修饰(DecoratedName)规则惹的祸。函数调用方式决定了函数参数入栈的顺序,是由调用者函数还是被调用函数负责清除栈中的参数等问题,而函数名修饰规则决定了编译器使用何种名字修饰方式来区分不同 阅读全文
posted @ 2011-09-19 23:11 子坞 阅读(346) 评论(0) 推荐(0)

摘要:说明:第1、2点中所说的文件是除了代码文件和库文件的其他文件;第3点是特指.dll等动态指定的文件;第4点是说的头文件和库文件;正文:1、在VC里进行调试或者执行的工作目录(工作目录指在程序文件夹下工作,比如playSound(“OK.mp3”)这样写就是在程序所在文件夹下找OK文件)默认是项目文件(test.vcproj)所在的目录,所以如果要直接写外部文件名字来找文件,那请把那个文件放到该目录下。如果在那个工作目录下有个文件夹res,里面有个文件nice.bmp,则在程序里面是("res/nice.bmp"),不能直接写(“nice.bmp”)。(刚才是指默认工作目录, 阅读全文
posted @ 2011-08-16 11:53 子坞 阅读(1005) 评论(0) 推荐(0)

1 2 下一页