Автоматически запускать программу при запуске

Я написал небольшую программу, которая вставляет значение и соответствующее значение в раздел реестра Windows.

Программа работает нормально, но не вставляет значение и соответствующее значение.

И еще одна вещь, когда я запускаю prog как администратор RegSetValueEx(), терпит неудачу... но все же inssert только значение не его данные.

Пожалуйста, помогите узнать здесь проблему.

Мой код выглядит следующим образом.

#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();
 }
</string.h></stdbool.h></unistd.h></tchar.h></stdlib.h></conio.h></stdio.h></windows.h>
3 ответа

Вы пытались присвоить LPBYTE (val) временную переменную & используя это? RegSetValueEx ожидает буфер в байтах и количество байтов в этом буфере. Если LPTSTR определен как Unicode в вашем проекте, то lstrlen (val) вернет длину строки, которая равна половине размера вашего байтового массива.


Добавьте свою программу в следующий путь в Windows XP:

C:\Documents and Settings\All Users\Start Menu\Programs\Startup


Я попробовал другую программу, и она сработала.

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;

licensed under cc by-sa 3.0 with attribution.