Registry information in c++ einbinden!
-
hallo zusammen,
ich schreibe grad ein programm womit man nachrichten im netzwerk mit 200 mitarbeiter schicken kann!
um missbrauch dieses programms zu vermeiden will ich die "logon_user" als information ein binden, damit der angemeldete kollege nur mit seinem namen schreiben kann!
hatte vorher ein textfeld aber das will ich jetzt ändern!habt ihre einige ideen?
und noch was...
ich hab in einem forum gelesen das c++ das auch direkt machen kann, keine ahnung wie das aber funktionieren soll.Danke im Vorraus!
Grüße X
-
Registry: http://www.c-plusplus.net/forum/viewtopic-var-t-is-39053.html
Zum aktuell angemeldeten User gabs auch mal was, ich finde es nur auf die Schnelle nicht.
-
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!
-
Hmmmm..... hast Du jemals schon mal programmiert?
Sie Doku ist hier:
http://msdn.microsoft.com/library/en-us/sysinfo/base/getusername.aspUnd ein Beispiel ist hier:
http://msdn.microsoft.com/library/en-us/sysinfo/base/getting_system_information.asp
-
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 wirdich 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
-
-
Und die Suche hilft auch: http://www.c-plusplus.net/forum/viewtopic.php?t=62620