Registry information in c++ einbinden!



  • 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!



  • hab es versucht aber die fehler meldung kommt noch

    --------------------Konfiguration: Net Send - Win32 Debug--------------------
    Kompilierung läuft...
    Net SendDlg.cpp
    C:\DOKUMENTE UND EINSTELLUNGEN\TOLGA.KARAKOC\DESKTOP\Test!\Net Send\Net SendDlg.cpp(348) : error C2601: 'GetUserNameA' : Lokale Funktionsdefinitionen sind unzulaessig
    Fehler beim Ausführen von cl.exe.
    
    Net SendDlg.obj - 1 Fehler, 0 Warnung(en)
    

    nice we



  • Zeig den Code bitte, der angemeckert wird!
    Sonst kann ich dir nicht helfen.



  • void CNetSendDlg::OnChangeEdit9() 
    {
    CString GetUserName()
    {
        DWORD dwBuffer = 256;      
        CString strUserName;
        GetUserName(strUserName.GetBuffer(255), &dwBuffer);
        strUserName.ReleaseBuffer();
             return strUserName;
    }
    
    }
    

    hast du messenger oder so? damit geht es doch schneller



  • Das geht auch hier. Vor allem wegen dem Code.
    Naja, schau doch mal, was du gemacht hast und was der Compiler meckert:
    Du hast eine Funktion in eine Funktion geschrieben - das mag der nicht.
    Da du das nur einmal brauchst, lassen wir das mit der Zusatzfunktion einfach weg.

    void CNetSendDlg::OnChangeEdit9()
    {
        DWORD dwBuffer = 256;      
        CString strUserName;
        GetUserName(strUserName.GetBuffer(255), &dwBuffer);
        strUserName.ReleaseBuffer();
    }
    

    Jetzt ist das aber immer noch nicht OnInitDialog (Message Handler zu WM_INITDIALOG)... 🙄



  • danke mittler weile hab ich keine fehler mehr aber man sieht auch den namen nicht!

    der schreibt das nicht in die changeEdit. also man sieht es nicht!

    du sagst ich soll init benutzen aber ich will nich das der name im neuen dialog erscheint! ich will das er hier:

    (wie kann ich bilder einfügen?) *blamage* 😃

    also im dem selben dialog erscheint!



  • Nochmal: OnChangeEditBlabla ist ein Message-Handler, der aufgerufen wird wenn sich im Edit Blabla was ändert. NICHT, wenn der Dialog auf geht.
    Um den Text zu setzen gibt es viele andere Möglichkeiten, eine (die einfachste) ist:

    GetDlgItem(IDC_EDIT9)->SetWindowText(strUserName);
    

    Jetzt brauchst du noch die OnInitDialog...
    Welches VC hast du?

    ... in 20 Minuten bin ich erstmal off.
    PS: Bilder kann man nur verlinken.



  • visual studio 6

    gut dann können wir ja auch am montag weiter machen. ich danke dir erstmal! aber so lange kannst du mir noch helfen!

    ich weiß net mehr weiter... hab dir email geschickt!



  • VC6, gut das kann ich fast blind und muss nicht nachgucken:
    Strg+W drücken (Klassenassisten geht auf)
    Erste Karteikarte, Klassenname "CNetSendDlg" in der rechten Liste runterscrollen, WM_INITDIALOG markieren, Knopf Funktion hinzufügen, Namen so lassen und bestätigen, Knopf Code bearbeiten.

    Unter die Zeile CDialog::... kommen dann die 4 Zeilen mit dem Usernamen und dann die eine mit SetWindowText. 🙂



  • ich kann keine funktion hinzufügen!

    🙄



  • Wieso? 😮
    Gibts die schon?


Anmelden zum Antworten