Registry information in c++ einbinden!



  • Was willst Du jetzt wissen? GetUserName !?



  • keine ahnung wie des heißt ich bin so ziemlich neu bei c++,

    ich will wissen wie ich in einem schreibgeschütztem eingabe feld den benutzernamen automatisch ändern lassen kann!



  • Jochen Kalmbach schrieb:

    Was willst Du jetzt wissen? GetUserName !?

    das hier will ich HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer "LogonUserName" das will ich bei mir angezeigt haben



  • kann mir mal jemand das genauer erklären?

    ich verstehe das nicht so arg?

    hab es eben mit dem link von estartu versucht
    aber keine chance bekomme fast 43 fehler 😃



  • Warum reicht denn "GetUserName" dir nicht aus? Warum wilst Du irgendwelche undokumentierten Registry Einträge auslesen?



  • scorpionx schrieb:

    hab es eben mit dem link von estartu versucht
    aber keine chance bekomme fast 43 fehler 😃

    Include vergessen?
    Welche?



  • also wenn ich GetUserName(); dann verlangt der von mir was aber ich hab keine ahnung was

    --------------------Konfiguration: Net Send - Win32 Debug--------------------
    Kompilierung läuft...
    Net SendDlg.cpp
    C:\DOKUMENTE UND EINSTELLUNGEN\TOLGA.KARAKOC\DESKTOP\Test!\Net Send\Net SendDlg.cpp(350) : error C2660: 'GetUserNameA' : Funktion akzeptiert keine 0 Parameter
    Fehler beim Ausführen von cl.exe.

    Net SendDlg.obj - 1 Fehler, 0 Warnung(en)



  • scorpionx schrieb:

    also wenn ich GetUserName(); dann verlangt der von mir was aber ich hab keine ahnung was

    Frag die MSDN:

    BOOL GetUserName(
    LPTSTR lpBuffer, // name buffer
    LPDWORD nSize // size of name buffer
    );

    🙂
    Der will Platz haben, um den Namen reinzupacken. 😉



  • das hatte ich auch schon aber das macht der nicht!

    --------------------Konfiguration: Net Send - Win32 Debug--------------------
    Kompilierung läuft...
    Net SendDlg.cpp
    C:\DOKUMENTE UND EINSTELLUNGEN\TOLGA.KARAKOC\DESKTOP\Test!\Net Send\Net SendDlg.cpp(353) : error C2373: 'GetUserNameA' : Neudefinition; unterschiedliche Modifizierer
    c:\programme\microsoft visual studio\vc98\include\winbase.h(7758) : Siehe Deklaration von 'GetUserNameA'
    Fehler beim Ausführen von cl.exe.

    Net SendDlg.obj - 1 Fehler, 0 Warnung(en)

    des hier kommt
    jetzt!





  • eigentlich nicht nur dos! hab doch gesagt bin ganz neu
    🙄



  • Geht es denn jetzt?
    Sonst zeig mal nen Schnipsel.

    ...auch bei DOS sollte man wissen, was der andere kennen muss um ne Frage zu bentworten und wo das Handbuch ist. 😉



  • ja klar das problem ist ich hab das handbuch nicht mehr oder mein chef hat des und er ist im urlaub!

    ich kapier das hier irgendwie niciht mit c++ hab gedacht das wäre leichter!

    // Net SendDlg.cpp : Implementierungsdatei
    //
    
    #include "stdafx.h"
    #include "Net Send.h"
    #include "Net SendDlg.h"
    #include "DlgProxy.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    /////////////////////////////////////////////////////////////////////////////
    // CAboutDlg-Dialogfeld für Anwendungsbefehl "Info"
    
    class CAboutDlg : public CDialog
    {
    public:
        CAboutDlg();
    
    // Dialogfelddaten
        //{{AFX_DATA(CAboutDlg)
        enum { IDD = IDD_ABOUTBOX };
        //}}AFX_DATA
    
        // Vom Klassenassistenten generierte Überladungen virtueller Funktionen
        //{{AFX_VIRTUAL(CAboutDlg)
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
        //}}AFX_VIRTUAL
    
    // Implementierung
    protected:
        //{{AFX_MSG(CAboutDlg)
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
    {
        //{{AFX_DATA_INIT(CAboutDlg)
        //}}AFX_DATA_INIT
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialog::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(CAboutDlg)
        //}}AFX_DATA_MAP
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
        //{{AFX_MSG_MAP(CAboutDlg)
            // Keine Nachrichten-Handler
        //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CNetSendDlg Dialogfeld
    
    IMPLEMENT_DYNAMIC(CNetSendDlg, CDialog);
    
    CNetSendDlg::CNetSendDlg(CWnd* pParent /*=NULL*/)
        : CDialog(CNetSendDlg::IDD, pParent)
    {
        //{{AFX_DATA_INIT(CNetSendDlg)
            // HINWEIS: Der Klassenassistent fügt hier Member-Initialisierung ein
        //}}AFX_DATA_INIT
        // Beachten Sie, dass LoadIcon unter Win32 keinen nachfolgenden DestroyIcon-Aufruf benötigt
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
        m_pAutoProxy = NULL;
    }
    
    CNetSendDlg::~CNetSendDlg()
    {
        // Existiert für dieses Dialogfeld ein Automatisierungs-Proxy, setzen Sie
        //  seinen Gegenzeiger auf dieses Dialogfeld auf NULL, um anzuzeigen,
        //  dass das Dialogfeld gelöscht wurde.
        if (m_pAutoProxy != NULL)
            m_pAutoProxy->m_pDialog = NULL;
    }
    
    void CNetSendDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialog::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(CNetSendDlg)
            // HINWEIS: Der Klassenassistent fügt an dieser Stelle DDX- und DDV-Aufrufe ein
        //}}AFX_DATA_MAP
    }
    
    BEGIN_MESSAGE_MAP(CNetSendDlg, CDialog)
        //{{AFX_MSG_MAP(CNetSendDlg)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        ON_WM_CLOSE()
        ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
        ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
        ON_BN_CLICKED(IDC_RADIO3, OnRadio3)
        ON_BN_CLICKED(IDC_RADIO4, OnRadio4)
        ON_BN_CLICKED(IDC_RADIO5, OnRadio5)
        ON_EN_CHANGE(IDC_EDIT3, OnChangeEdit3)
        ON_EN_CHANGE(IDC_EDIT8, OnChangeEdit8)
        //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CNetSendDlg Nachrichten-Handler
    
    BOOL CNetSendDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
    
        // Hinzufügen des Menübefehls "Info..." zum Systemmenü.
    
        // IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden.
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);
    
        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
            CString strAboutMenu;
            strAboutMenu.LoadString(IDS_ABOUTBOX);
            if (!strAboutMenu.IsEmpty())
            {   
                pSysMenu->AppendMenu(MF_SEPARATOR);
                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
            }
        }
    
        // Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
        //  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
        SetIcon(m_hIcon, TRUE);            // Großes Symbol verwenden
        SetIcon(m_hIcon, FALSE);        // Kleines Symbol verwenden
    
        // ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
    
        return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
    }
    
    void CNetSendDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
        if ((nID & 0xFFF0) == IDM_ABOUTBOX)
        {
            CAboutDlg dlgAbout;
            dlgAbout.DoModal();
        }
        else
        {
            CDialog::OnSysCommand(nID, lParam);
        }
    }
    
    // Wollen Sie Ihrem Dialogfeld eine Schaltfläche "Minimieren" hinzufügen, benötigen Sie
    //  den nachstehenden Code, um das Symbol zu zeichnen. Für MFC-Anwendungen, die das
    //  Dokument/Ansicht-Modell verwenden, wird dies automatisch für Sie erledigt.
    
    void CNetSendDlg::OnPaint()
    {
        if (IsIconic())
        {
            CPaintDC dc(this); // Gerätekontext für Zeichnen
    
            SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
    
            // Symbol in Client-Rechteck zentrieren
            int cxIcon = GetSystemMetrics(SM_CXICON);
            int cyIcon = GetSystemMetrics(SM_CYICON);
            CRect rect;
            GetClientRect(&rect);
            int x = (rect.Width() - cxIcon + 1) / 2;
            int y = (rect.Height() - cyIcon + 1) / 2;
    
            // Symbol zeichnen
            dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
            CDialog::OnPaint();
        }
    }
    
    // Die Systemaufrufe fragen den Cursorform ab, die angezeigt werden soll, während der Benutzer
    //  das zum Symbol verkleinerte Fenster mit der Maus zieht.
    HCURSOR CNetSendDlg::OnQueryDragIcon()
    {
        return (HCURSOR) m_hIcon;
    }
    
    // Automatisierungs-Server sollten nicht beendet werden, wenn der Benutzer
    //  das UI schließt und ein Controller eines seiner Objekte nicht freigibt.
    //  Diese Nachrichten-Handler stellen sicher, dass das UI ausgeblendet wird,
    //  das Dialogfeld beim Schließen aber erhalten bleibt, wenn der Proxy
    //  noch in Gebrauch ist.
    
    void CNetSendDlg::OnClose()
    {
        if (CanExit())
            CDialog::OnClose();
    }
    
    void CNetSendDlg::OnOK()
    {
    
        if (CanExit())
            CDialog::OnOK();
    
        CString str1, str2, str3, str4;
        GetDlgItemText(IDC_EDIT1, str1);
        GetDlgItemText(IDC_EDIT2, str2);
        GetDlgItemText(IDC_EDIT3, str3);
        GetDlgItemText(IDC_IPADDRESS1, str4);
        CString strResult = _T("net send ") + str1 + _T(".") + str2 + _T(" ") + str3;
    
        STARTUPINFO         siStartInfo;
        PROCESS_INFORMATION piProcInfo;
        memset(&siStartInfo, 0, sizeof(siStartInfo));
        siStartInfo.cb = sizeof(STARTUPINFO);
    
        CreateProcess( NULL,
                   (LPTSTR)(LPCTSTR)strResult,
                   NULL,
                   NULL,
                   FALSE,
                   NULL,
                   NULL,
                   NULL,
                   &siStartInfo,
                   &piProcInfo );
    }
    
    void CNetSendDlg::OnCancel()
    {
        if (CanExit())
            CDialog::OnCancel();
    }
    
    BOOL CNetSendDlg::CanExit()
    {
        // Existiert das Proxy-Objekt noch, so gibt der Automatisierungs
        //  Controller diese Anwendung weiterhin nicht frei. Lassen Sie
        //  das Dialogfeld weiter existieren, blenden Sie nur seine UI aus.
        if (m_pAutoProxy != NULL)
        {
            ShowWindow(SW_HIDE);
            return FALSE;
        }
    
        return TRUE;
    }
    
    void CNetSendDlg::OnRadio1()
    {
        // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
        GetDlgItem(IDC_RADIO3)->EnableWindow(true);
        GetDlgItem(IDC_RADIO4)->EnableWindow(true);
        GetDlgItem(IDC_RADIO5)->EnableWindow(true);
        GetDlgItem(IDC_IPADDRESS1)->EnableWindow(false);
        GetDlgItem(IDC_EDIT1)->EnableWindow(false);
        GetDlgItem(IDC_EDIT2)->EnableWindow(false);
        GetDlgItem(IDC_EDIT3)->EnableWindow(false);
        GetDlgItem(IDC_COMBO1)->EnableWindow(false);
    }
    
    void CNetSendDlg::OnRadio2()
    {
        // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
        GetDlgItem(IDC_RADIO3)->EnableWindow(false);
        GetDlgItem(IDC_RADIO4)->EnableWindow(false);
        GetDlgItem(IDC_RADIO5)->EnableWindow(false);
        GetDlgItem(IDC_IPADDRESS1)->EnableWindow(false);
        GetDlgItem(IDC_EDIT1)->EnableWindow(false);
        GetDlgItem(IDC_EDIT2)->EnableWindow(false);
        GetDlgItem(IDC_EDIT3)->EnableWindow(true);
        GetDlgItem(IDC_COMBO1)->EnableWindow(false);
    }
    
    void CNetSendDlg::OnRadio3()
    {
        // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
        GetDlgItem(IDC_IPADDRESS1)->EnableWindow(true);
        GetDlgItem(IDC_EDIT1)->EnableWindow(false);
        GetDlgItem(IDC_EDIT2)->EnableWindow(false);
        GetDlgItem(IDC_EDIT3)->EnableWindow(true);
        GetDlgItem(IDC_COMBO1)->EnableWindow(false);
    }
    
    void CNetSendDlg::OnRadio4()
    {
        // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
        GetDlgItem(IDC_IPADDRESS1)->EnableWindow(false);
        GetDlgItem(IDC_EDIT1)->EnableWindow(true);
        GetDlgItem(IDC_EDIT2)->EnableWindow(true);
        GetDlgItem(IDC_EDIT3)->EnableWindow(true);
        GetDlgItem(IDC_COMBO1)->EnableWindow(false);
    }
    
    void CNetSendDlg::OnRadio5()
    {
        // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
        GetDlgItem(IDC_IPADDRESS1)->EnableWindow(false);
        GetDlgItem(IDC_EDIT1)->EnableWindow(false);
        GetDlgItem(IDC_EDIT2)->EnableWindow(false);
        GetDlgItem(IDC_EDIT3)->EnableWindow(true);
        GetDlgItem(IDC_COMBO1)->EnableWindow(true);
    }
    
    void CNetSendDlg::OnChangeEdit3()
    {
        // TODO: Wenn dies ein RICHEDIT-Steuerelement ist, sendet das Steuerelement diese
    
        // Benachrichtigung nicht, bevor Sie nicht die Funktion CDialog::OnInitDialog()
    
        // überschreiben und CRichEditCrtl().SetEventMask() aufrufen, wobei
    
        // eine ODER-Operation mit dem Attribut ENM_CHANGE und der Maske erfolgt.
    
        // TODO: Fügen Sie hier Ihren Code für die Benachrichtigungsbehandlungsroutine des Steuerelements hinzu
    
        ((CEdit *)GetDlgItem(IDC_EDIT3))->SetLimitText(500);
    }
    
    void CNetSendDlg::OnChangeEdit8()
    {
        // TODO: Wenn dies ein RICHEDIT-Steuerelement ist, sendet das Steuerelement diese
    
        // Benachrichtigung nicht, bevor Sie nicht die Funktion CDialog::OnInitDialog()
    
        // überschreiben und CRichEditCrtl().SetEventMask() aufrufen, wobei
    
        // eine ODER-Operation mit dem Attribut ENM_CHANGE und der Maske erfolgt.
    
        // TODO: Fügen Sie hier Ihren Code für die Benachrichtigungsbehandlungsroutine des Steuerelements hinzu
    
    }
    

    so sieht mein cpp aus! nun soll aber GetUserName bei edit8 stehen! ich weiß nicht ob das so richtig ist! so ist es aber ohne fehler und funktioniert auch



  • scorpionx schrieb:

    so sieht mein cpp aus! nun soll aber GetUserName bei edit8 stehen! ich weiß nicht ob das so richtig ist! so ist es aber ohne fehler und funktioniert auch

    Uff, mit Schnipsel meinte ich den nicht kompilierenden Versuch mit GetUserName, nicht deinen kompletten Code. 😮
    Außerdem finde ich es da nirgends.

    Das Handbuch kann dein Chef übrigens ruhig wegpacken, es gibt eines online.
    Jochen hat ja dahin schon verlinkt und der Link ist nochmal in der MFC-Forum Threadliste ganz oben (also oben drüber). 😉



  • ja des soll ja auch auch anstelle von

    void CNetSendDlg::OnChangeEdit8() 
    {
    	// TODO: Wenn dies ein RICHEDIT-Steuerelement ist, sendet das Steuerelement diese
    
    	// Benachrichtigung nicht, bevor Sie nicht die Funktion CDialog::OnInitDialog()
    
    	// überschreiben und CRichEditCrtl().SetEventMask() aufrufen, wobei
    
    	// eine ODER-Operation mit dem Attribut ENM_CHANGE und der Maske erfolgt.
    
    	// TODO: Fügen Sie hier Ihren Code für die Benachrichtigungsbehandlungsroutine des Steuerelements hinzu
    
    }
    

    sein...
    das ist ein eingabe feld der schreibgeschütz sein soll!oder wird

    ich weiß aber nicht wie ich das da einfügen soll!

    das ist so was wie der nachrichten dienst! 😉



  • Also, wenn das Edit schreibgeschützt ist, wird die OnChange NIEMALS aufgerufen, weil ja nie was eingetippt wird. :p
    Nimm lieber die OnInitDialog, es soll ja sicherlich gleich beim Start angezeigt werden. 😉



  • danke für deine hilfe! ja das soll von anfang da bleiben! kannst du mir den code geben und sagen wo ich das hinfügen soll.!?!

    das ist mein erstes project und dann auch noch so was schweres

    danke für die hilfe







  • Danke nochmal...

    Ist ja ne ganz heickle Geschichte!

    hab schon kopfschmerzen!

    naja melde mich dann bei dir!

    Schönes Wochenende! Feiert schön!


Anmelden zum Antworten