Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

11

29.05.2005, 21:00

@llennard
Schau mal ob du wirklich RegCreateKeyEx brauchst, oder dir RegCreateKey genügt! Der hat wentlich weniger Eigenschaften! Und ist damit einfacher zu benutzen!

Oder google doch einfach mal :) Beispiele findeste auch in der Hilfe :)

Mir ist noch was aufgefallen:
"\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\XY"
die ersten zwei Backslash weg!

@dedalus
Sicherlich ist die Registry nicht die optimale Lösung um dinge zu verwirklichen, weil Sie den Computer lahm macht! Softwäre die man nicht deinstalliert hinterlassen oft lästige Einträge in der Registry.
Ein IndexFile (zum Beispiel ne INI oder BIN) ist sicherlich ne Alternative, Aber über die Registry knn man z.B. Programme in das Popup Fenster von Windows einfügen, das bei der Rechten Maustaste kommt. Und noch lauter solche Dinge. Sicherlich man sollte mit der Registry vorsichtig umgehen aber warum sollte man die Möglichkeiten nicht nutzen, wenn sie da sind?

Zitat


Muss jedes grottige Spiel oder highend-spiel einen Registry eintrag haben?


Nein, aber sichlich schon mal etwas vom Internet gehört, da kann man diese Einträge abfragen! So kommen Firmen u.a. an dein Registrierungskey ran ohne das du etwas merkst.

Zitat


Muss jedes Game ein Installer haben?


Wegen mir nicht, aber für den Großteil der PC Benutzer JA

Zitat


Muss man Updates haben? Eigentlich nicht, wenn die Coder mal anständig gearbeitet haben


Kann man sicherlich sehen wie man will, Updates können auch neue Einheiten und Level enthalten was besonders bei kostenlosen Spielen sehr beliebt ist!

Aber alles in einem gehört das allerdings nicht in den Thread - soll ich einen neuen aufmachen :)

llennard

Frischling

  • »llennard« ist der Autor dieses Themas

Beiträge: 74

Wohnort: Kiel

  • Private Nachricht senden

12

29.05.2005, 21:26

Ok also ich habe jetzt die zwei Backslash entfernt, aber es funktioniert trotzdem nicht!

Und die RegCreateKey - Funktion nehme ich deshalb:

[list]Win32-based applications should use the RegCreateKeyEx function.
[/list](Das stand in der MSDN.)

Habt ihr noch Ideen, was ich machen könnte?

Anonymous

unregistriert

13

31.05.2005, 00:55

Zitat von »"koschka"«

Nein, aber sichlich schon mal etwas vom Internet gehört, da kann man diese Einträge abfragen! So kommen Firmen u.a. an dein Registrierungskey ran ohne das du etwas merkst.

Das ist kein Argument!

Wie wäre es hier auch mit einem IndexFile? Und außerdem: Bevor irgendeine Firma an irgendeinen Registrierungskey dran kommt möchte ich wenigstens GEFRAGT werden! Das selbe gillt für Installer!

Und ich sehe nicht ein meine Registry für die "Bequemlichkeit" (Faulheit und Dummheit wohl eher) zuzubomben mit sinnlosen Daten, die man mit einem Index-File besser darstellen konnte! Sogar noch geordneter!

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

14

31.05.2005, 10:19

@llennard

Du kannste das aber trotzdem verwenden, ich glaube nicht das da Einschränkungen gibt. Ich probier mal selber aus ok, poste dann ein kleines Codesample.

@dadalus

Ich mache einen neuen Thread auf, ok :) Der Thread heisst "Registry oder IndexFile?" :huhu:

Sonst zerstören wir hier den Thread, zwei Diskussionen in einem Thread zu führen verwirrt mich!

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

15

31.05.2005, 10:39

Also so funktionierts!

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    HKEY key;
    DWORD    dwDisposition;

    RegCreateKeyEx(
      HKEY_LOCAL_MACHINE,
      "Software\\test",
      NULL,
      "www",
      REG_OPTION_NON_VOLATILE,
      KEY_SET_VALUE,
      NULL,
      &key,
      &dwDisposition
    );

llennard

Frischling

  • »llennard« ist der Autor dieses Themas

Beiträge: 74

Wohnort: Kiel

  • Private Nachricht senden

16

31.05.2005, 15:39

Geht nicht!

Genau das, was du geschrieben hattest, hatte ich auch. Also:

WAS IST DARAN FALSCH?!!

Ich zeig dir noch mal den Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <windows.h>
#include <string.h>
#include <winreg.h>

LRESULT CALLBACK WindowProc(HWND hwnd, 
                            UINT msg, 
                            WPARAM wparam, 
                            LPARAM lparam)
{

    PAINTSTRUCT     ps;     
    HDC             hdc;    


    
    switch(msg)
    {       
        case WM_CREATE: 
        {
        } 
        break;
   
        case WM_PAINT: 
        {          
            hdc = BeginPaint(hwnd,&ps);            
            EndPaint(hwnd,&ps);          
            return(0);
        }
        break;

        case WM_DESTROY: 
        {          
            PostQuitMessage(0);          
            return(0);
        } 
        break;

        default:
        break;

    } 
    return (DefWindowProc(hwnd, msg, wparam, lparam));

} 

///////////////////////////////////////////////////////////////////////////////


int WINAPI WinMain( HINSTANCE hinstance,
                    HINSTANCE hprevinstance,
                    LPSTR lpcmdline,
                    int ncmdshow)
{

    WNDCLASSEX winclass; 
    HWND       hwnd;     
    MSG        msg; 
    

    
    winclass.cbSize         = sizeof(WNDCLASSEX);
    winclass.style          = CS_HREDRAW | CS_VREDRAW;
    winclass.lpfnWndProc    = WindowProc;
    winclass.cbClsExtra     = 0;
    winclass.cbWndExtra     = 0;
    winclass.hInstance      = hinstance;
    winclass.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
    winclass.hCursor        = LoadCursor(NULL, IDC_ARROW); 
    winclass.hbrBackground  = (HBRUSH)GetStockObject(BLACK_BRUSH);
    winclass.lpszMenuName   = NULL;
    winclass.lpszClassName  = "ww";
    winclass.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);
   
    if (!RegisterClassEx(&winclass))
        return(0);

   
    if (!(hwnd = CreateWindowEx(NULL,                  
                                "ww",     
                                "My Game Shell", 
                                WS_OVERLAPPEDWINDOW,
                                0,0,      
                                1024,768,  
                                NULL,     
                                NULL,     
                                hinstance,
                                NULL))) 
    return(0);

    HKEY    key; 
    DWORD    dwDisposition; 

    RegCreateKeyEx( 
      HKEY_LOCAL_MACHINE, 
      "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\XY", 
      NULL, 
      "www", 
      REG_OPTION_NON_VOLATILE, 
      KEY_SET_VALUE, 
      NULL, 
      &key, 
      &dwDisposition 
    );

    HKEY  key; 
    DWORD dwDisposition;

    char *string = "C:\\Dokumente und Einstellungen\\Lennard\\Eigene Dateien\\Eigene Programme\\Selbstgemacht\\Presentation\\Presentation.exe"; 

    RegSetValueEx( 
      key, 
      NULL, 
      NULL, 
      REG_SZ, 
      (LPBYTE)(LPTSTR)string, 
      strlen("C:\\Dokumente und Einstellungen\\Lennard\\Eigene Dateien\\Eigene Programme\\Selbstgemacht\\Presentation\\Presentation.exe") + 1 
    );

    return 0;
}

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

17

31.05.2005, 20:27

Also ich würde ir mal empfehlen alles wegzukommentieren außer WIinMain und RegCreateKeyEx(...) Du brauchst dafür kein Fenster!

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int WINAPI WinMain(    HINSTANCE hinstance,
                    HINSTANCE hprevinstance,
                    LPSTR lpcmdline,
                    int ncmdshow)
{
    HKEY key;

    HKEY    key;
    DWORD    dwDisposition;

    RegCreateKeyEx(
      HKEY_LOCAL_MACHINE,
      "Software\\test",
      NULL,
      "www",
      REG_OPTION_NON_VOLATILE,
      KEY_SET_VALUE,
      NULL,
      &key,
      &dwDisposition
    ); 
}


So schau jetzt mal mit regedit an ob unter Software ein Eintrag test Ist. Wieso willst du übrigends unbedingt in den Windows Key schreiben?
So wenn das klappt dann kopier das Fenster wieder hinzu. Dann die SetValue Funktion (vielleicht liegts auch an der!)

Checke man ob RegCreateKeyEx dir einen Erfolgs Parameter zurückgibt. Oder prüfe mal GetLastError() Da das ja eigentlich winAPI ist dürfte das klappen, schau dazu mal in Doku nach!
Da

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

18

31.05.2005, 20:49

So ich hab mich mit deinem Problem mal beschäftigt :) hab das selber kompiliert und mehrere Fehler entfernt!

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    HKEY    key;
    DWORD    dwDisposition;

    RegCreateKeyEx(
      HKEY_LOCAL_MACHINE,
      "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\XY",
      NULL,
      "www",
      REG_OPTION_NON_VOLATILE,
      KEY_SET_VALUE,
      NULL,
      &key,
      &dwDisposition
    ); 

    char string[128];
    strcpy(string, "hallo");

    RegSetValueEx(
      key,
      "testxyz",
      NULL,
      REG_SZ,
      (LPBYTE)(LPTSTR)string,
      strlen(string)+1
    );


Ich weiss zwar nicht warum du unbedingt in den Micrsoft Key schreiben willst, aber naja ich hoffe du planst da nichts :ohoh:

Mal zu nem sehr schwerwiegendem Fehler! Du hast das mit den Zeigern nicht richtig geschnallt :) es inhaltlich absolut fasch

C-/C++-Quelltext

1
char* string = "xyz";


Das * ist ein Zeiger und Zeigt auf eine Speicheradresse. Diese Speicheradresse kann natürlich auch ein Array sein! Also ein String! Mach das wie ich es dir oben gezeigt hab:

C-/C++-Quelltext

1
2
    char string[128];
    strcpy(string, "hallo");


damit kannst du in den String 128-1 Zeichen packen!

Und noch ein Fehler: bei RegSetValueEx(...) hast du in den zweiten Parameter ein NULL angegeben - warum um Gottes willen das? Das ist doch der Name deines Wert-Handlers! Der darf nicht NULL sein ;)

übrigends: du brauchst dafür nur die windows.h!

llennard

Frischling

  • »llennard« ist der Autor dieses Themas

Beiträge: 74

Wohnort: Kiel

  • Private Nachricht senden

19

06.06.2005, 20:02

Danke

Danke für die Antwort jetzt geht's!

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

20

06.06.2005, 21:11

dann konnte ich dir ja doch helfen, ich dachte schon du bist vor Schreck geflohen :) :huhu:

Werbeanzeige