我编写了一个小程序,它将值及其相应的值插入到Windows注册表项中。
程序工作正常,但没有插入值及其相应的值。
当我以管理员身份运行prog时,还有一件事是RegSetValueEx()失败..但仍然只插入值而不是其数据。
请帮助我们找到问题。
我的代码如下..
#define WIN32_LEAN_AND_MEAN
#define WIN32_DEFAULT_LIBS
#ifndef _WIN32_WINNT
#define _WIN32_WINNT (0x0601)
#endif /* _WIN32_WINNT */
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <tchar.h>
#include <unistd.h>
#include <stdbool.h>
#include<string.h>
BOOL InstallRunOnStartup()
{
HKEY key;
long result;
BOOL ret = FALSE;
LPTSTR val=L"12as3d12";
LPTSTR a=L"zzz";
TCHAR szBuf[20];
result = RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", NULL, KEY_WRITE | KEY_WOW64_64KEY | KEY_SET_VALUE , &key);
if (result == ERROR_SUCCESS)
{
printf("hi \n");
if (RegSetValueEx(key, a, 0, REG_SZ,(LPBYTE)val, (DWORD)(lstrlen(val)+1) == ERROR_SUCCESS)){
printf("success \n");
ret = TRUE;
}
RegCloseKey(key);
}
return ret;
}
int main()
{
InstallRunOnStartup();
getch();
}
答案 0 :(得分:0)
将程序添加到Windows XP中的以下路径:
C:\Documents and Settings\All Users\Start Menu\Programs\Startup
答案 1 :(得分:0)
您是否尝试将LPBYTE(val)分配给临时变量&amp;用那个? RegSetValueEx期望缓冲区以字节为单位。该缓冲区中的字节数。 如果在项目中将LPTSTR定义为Unicode,则lstrlen(val)将返回字符串的长度,该字符串的大小是字节数组的一半。
答案 2 :(得分:-1)
我尝试了一个不同的程序,它有效..
HKEY hMykey; //Handle to your key
DWORD pDWDisp; // Ignore for this
LONG lRes; // Test Success
char prog[] = "\"C:\\a.exe\""; //Key to launch
lRes = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
"Software\\Microsoft\\Windows\\CurrentVersion\\run",
0,"Whatever",REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS ,
NULL,&hMykey,&pDWDisp); // Open a key for edit
if(lRes != ERROR_SUCCESS){
MessageBox(0,"Error opening key","",MB_OK);
return false;
//exit(0);// Shutdown on fail
}
lRes = RegSetValueEx(hMykey,"a",0,REG_SZ,
(LPBYTE)prog,strlen(prog)+1);// Add your key value
if(lRes != ERROR_SUCCESS){
MessageBox(0,"Error saving record","",MB_OK);
RegCloseKey(hMykey);
return false;
//exit(0);// Shutdown on fail
}
MessageBox(0,"Success!! Registry value recorded","",MB_OK);
RegCloseKey(hMykey);
return true;