Suche C-Source für den Eintrag eines Programmes in die Win-Registry

  • Themenstarter Themenstarter Rushjo
  • Beginndatum Beginndatum
R

Rushjo

Guest
Hi,

ich habe folgendes Problem, ich will ein Programm,
das ich code, nach dem Ausführen automatisch sich
in die Windows-Registry eintragen lassen, damit
entsprechende Teile beim nächsten Mal automatisch
gestartet werden! Dazu hatte ich heute schon bei
google.de gesucht, aber nichts gefunden!!! :=(

Habe nur diesen unvollständigen Source-Entwurf:

begin;

reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey \SOFTWARE\Microsoft\Windows\CurrentVersion\Run, "monitor"="c:\\winnt\\system32\\monitor.exe");
reg.RootKey := HKEY_CURRENT_USER;
reg.OpenKey \SOFTWARE\Microsoft\Windows\CurrentVersion\Run, "monitor"="c:\\winnt\\system32\\monitor.exe");
reg.Free;

end;

Das Problem ist dieser Entwurf/Fragment ist unvoll-
ständig und ich habe auch keine Ahnung, ob dies
überhaupt funktionieren würde. Der Entwurf
stammt von hier . Im Original-Entwurf steht noch Folgendes
drin:

procedure RegApplication(Firm, Title, Version: string);
var reg : TRegistry;

begin

reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('\SOFTWARE\'+Firm+'\'+Title+'\'+Version, True);
reg.RootKey := HKEY_CURRENT_USER;
reg.OpenKey('\SOFTWARE\'+Firm+'\'+Title+'\'+Version+'\Options', True);
reg.Free;

end;

Habe ich dort irgendetwas falsch verstanden oder
was? Es fehlen ja auch die zuladenen Bibliotheken
etc.
An sich kann es doch nicht so schwer sein, da sich
jedes Programm bei der Installation in die Registry
einträgt!!!

Ich bin für jede Idee dankbar , egal ob die Idee auf
Basis des Textes oben ist, oder auch nicht!!! Sie
sollte nur in C sein!!

MfG Rushjo
 
@Tec

Du hast Recht, es ist VC++!

Nach einer kleinen Diskussion im Chat mit Seth,
habe ich nochmal www.google.de bemüht,
aber mit anderen Stichwörtern!
Dabei habe ich eine Seite gefunden, auf der auf
die Appui3.cpp von VC++ verwiesen wird.
In dieser Datei wird auf den Umgang mit Einträgen
in die Registry hingewiesen! Soweit, so gut!
Jetzt das Problem, die Datei enthält nur un-
kommentierte Beispiele!

#ifndef _MAC
// returns key for HKEY_CURRENT_USER\"Software"\RegistryKey\ProfileName
// creating it if it doesn't exist
// responsibility of the caller to call RegCloseKey() on the returned HKEY
HKEY CWinApp::GetAppRegistryKey()
{
ASSERT(m_pszRegistryKey != NULL);
ASSERT(m_pszProfileName != NULL);

HKEY hAppKey = NULL;
HKEY hSoftKey = NULL;
HKEY hCompanyKey = NULL;
if (RegOpenKeyEx(HKEY_CURRENT_USER, szSoftware, 0, KEY_WRITE|KEY_READ,
&hSoftKey) == ERROR_SUCCESS)
{
DWORD dw;
if (RegCreateKeyEx(hSoftKey, m_pszRegistryKey, 0, REG_NONE,
REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,
&hCompanyKey, &dw) == ERROR_SUCCESS)
{
RegCreateKeyEx(hCompanyKey, m_pszProfileName, 0, REG_NONE,
REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,
&hAppKey, &dw);
}
}
if (hSoftKey != NULL)
RegCloseKey(hSoftKey);
if (hCompanyKey != NULL)
RegCloseKey(hCompanyKey);

return hAppKey;
}

// returns key for:
// HKEY_CURRENT_USER\"Software"\RegistryKey\AppName\lpszSection
// creating it if it doesn't exist.
// responsibility of the caller to call RegCloseKey() on the returned HKEY

Also, ich komme mit den ganzen verwendeten
Parametern und Bezeichungen nicht klar!
Ich will ein Programm names MONITOR mit einer
MONITOR.exe in HKLM\Software\Windows\CurrentVersion\Run
eintragen!
Hat Einer eine Idee, was denn jetzt wo hin kommt und
welche Bibliothek noch geladen werden muss?

MfG & THX Rushjo

P.S. Thx@seth für Seine Hilfe im Chat!
 
So, ich habe jetzt das ganze in .vbs vorgenommen und
poste erstmal das Script dazu hier!

Write/delete entries in the registry.


Display a welcome message.

strMessage = "This script shows how to create and delete registry keys."
strTitle = "Windows Scripting Host Sample"
Call Welcome()
Registry related methods.

Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")

WSHShell.Popup "Create key HKLM\SOFTWARE\Microsoft\WINDOWS\CurrentVersion\Run\monitor.exe with value 'c:\programme\monitor\monitor.exe'"
WSHShell.RegWrite "HKLM\SOFTWARE\Microsoft\WINDOWS\CurrentVersion\Run\monitor.exe", "c:\programme\monitor\monitor.exe"

Sub to display the Welcome message.

Dim intAns
intAns = MsgBox(strMessage, vbOKCancel + vbInformation, strTitle)
If intAns = vbCancel Then
WScript.Quit
End If

Mit Hilfe dieses Scriptes kann man ein beliebiges
Programm in die Windows-Registry eintragen, auch
wenn man selber nur Guest-Rechte hat! Ein Ein-
schränkung gibt es hier, dies ist bei Remote-
Zugriffen nicht möglich, da hier das Ausführen von
wshscripten normalerweise dem Remote-User
nicht gestattet ist! --> gilt für Win2K

MfG Rushjo

P.S. Das Ganze in C++ reiche ich noch nach!!!!!
 
So, wie versprochen das Ganze noch mal für VC++!

Code:
#include <windows.h> 

void main() 
{ 
HKEY hKey; 
//Am Anfang mal nen Key erstellen! 
RegCreateKeyEx(HKEY_Current_User, \"Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce\", 0, NULL, 0, NULL, NULL, &hKey, NULL); 
//Den dann öffnen! 
RegOpenKeyEx(HKEY_Current_User, \"Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce\", 0, KEY_ALL_ACCESS, &hKey); 
//Einen einfachen Wert schreiben 
RegSetValueEx(hKey, \"Monitor.exe\", 0, REG_SZ, (BYTE*) \"c:\\Programme\\Monitor\\monitor.exe\", strlen(\"c:\\Programme\\Monitor\\monitor.exe\")); 
//Den Key wieder auslesen... 
//zum Schluß den Key noch schließen  
if (hKey) 
RegCloseKey(hKey); 
}

Das funktioniert super, nur wiederum bei Win2k nicht
für Run (da bei HKEY_Current_User nicht vorhanden)
und bei HKEY_Local_Machine scheinbar eine Write-
Beschränkung existiert, selbst wenn man selber als
root angemeldet ist!!!

Aber vielleicht hat ja Jemand eine Idee, wie man das
Problem löst, so das bei jedem Systemstart, unabhängig
vom User, das Programm mitgestartet wird!!!

MfG Rushjo

P.S. Thx@Alle, die mir geholfen haben!! :D
 
sagt mal.. sry.. irgendwie komm ich nicht mit. die codes die als erstes gepostet wurden.. das ist doch im leben kein c?? sieht mir eher nach pascal o.ä. aus...
oder gibts da neue revolutionäre entwicklungen die ich nicht mitbekommen hab?
 
Zurück
Oben