首先声明一下,写这篇文章没有什么目的,只是确实太过碰巧,为什么?
本社区有一段《关于do{}while()的代码PK》(地址就不提供了,相信很多人也看过,自己搜索一下吧)的讨论,看后我觉得很搞笑,就一个小问题,大伙的讨论还很积极的;虽说本人对一些意见不敢苟同,但工作重要,就简单评论了一下,然后继续工作;
很快工作要实现一个在windows自动启动应用程序,相信很多人就会想到写注册表,没错,我找到下面这段代码:
/******************
char * strRegName[5] ={"SOFTWARE","Microsoft","Windows","CurrentVersion","Run"};
HKEY hKey = HKEY_LOCAL_MACHINE;
HKEY hSubKey;
int indx = 0;
long lRC;
char svBuffer[256];
char strFileName[] = "YourProgram.Exe";
DWORD dwSize = 256;
BOOL bReg = FALSE;
while(1)
{
lRC = RegOpenKeyEx(hKey, strRegName[indx], 0,
KEY_READ | KEY_WRITE, &hSubKey) ;
if(lRC != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return -1;
}
hKey = hSubKey;
indx++;
if (indx >= 5)
break;
}
lRC = RegQueryValueEx(hKey, "YourProgram", NULL, NULL,
(BYTE *)svBuffer, &dwSize);
if (lRC != ERROR_SUCCESS)
{
lRC = RegSetValueEx (hKey, "YourProgram", 0, REG_SZ,
(BYTE *)strFileName,strlen(strFileName));
bReg = FALSE;
}
else
bReg = TRUE;
黑体是我加的,地址在这:http://topic.youkuaiyun.com/t/20020614/20/804665.html;我记得很多年前也是用的类似这段代码,可以实现我想要的功能。
第一感觉我就觉得这个while (1)在这里,怎么看就怎么别扭,就简单改了一下,代码如下:
do
{
lRC = RegOpenKeyEx(hKey, strRegName[indx], 0,
KEY_READ | KEY_WRITE, &hSubKey) ;
if(lRC != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return -1;
}
hKey = hSubKey;
} while (++indx < 5);
因为是别人的代码,功能单一,也就懒得去做什么优化,总体改了之后减少了几行代码,而且个人觉得更直观,好理解;
这就是整个的经过,哈哈!
再次声明一下,写本篇文章没有什么想法,有的也是觉得好玩,大家或许可以学习一下如果实现自动运行应用程序该功能。