2013-09-27 282 views
0

我寫了一個小程序,它將值和相應的值插入到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

有貼[這裏]偉大的答案(https://stackoverflow.com/questions/15913202/add-application-to-startup-註冊表)。 –

回答

0

程序添加到以下路徑在Windows XP中:

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

+0

我不能在註冊表的幫助下做到這一點..? –

+0

其實我必須編寫一個應用程序,當用戶登錄系統時需要自動啓動... –

+0

是的,你可以使用註冊表添加這個 - 但是 - 你至少會運行一次應用程序,其他的你怎麼看待它工作 - 所有這一切? – Sadique

0

你嘗試到一個臨時變量分配LPBYTE(VAL) &使用? RegSetValueEx預計緩衝區的字節數爲&該緩衝區中的字節數。 如果LPTSTR在您的項目中定義爲Unicode,那麼lstrlen(val)將返回字節數組的一半大小的字符串的長度。

-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; 
+0

您的代碼與UNICODE不兼容 –

+0

這裏有一個很好的答案 https://stackoverflow.com/questions/15913202/add-application-to-startup-registry –

相關問題