eingabefeld verknüpfen

scorpionx

Mitglied
hallo

zu aller erst möchte ich sagen das ich ganz neu hier bin! und schon fast alle themen durchsucht hab! bevor ihr sagt das ich mich durch die ganzen tut durchschlage!

also meine frage ist kann ich irgendwie eingabe felder in ein befehl verknüpfen?
wenn ja was muss ich einfügen damit es den inhalt des eingabefeldes übernimmt?

ich freu mich auf eure antworten!

greez X
 
Hi, leider verstehe ich deine Frage nicht so ganz. Vielleicht kannste das ganze nochma irgendwie beschreiben was du vor hast
 
also ich erstelle sowas wie ein net_send.exe

da hab ich drei eingabefelder
1. IDC_EDIT1 (m_edit1) - Vorname
2. IDC_EDIT2 (m_edit2) - Nachname
3. IDC_EDIT3 (m_edit3) - Text

die sollen dann hier rein!

system("net send " "Vorname" "." "Nachname" "Text"


wenn man da den anmeldename per hand eintippt geht es!
aber wenn ich

system("net send " "IDC_EDIT1(oder m_edit1)" "." "IDC_EDIT2(oder m_edit2)" "IDC_EDIT3(oder m_edit3)"

eintippe und im dialog den namen eintippe übernimmt es dieses nicht! was könnte ich tun?

Danke für die schnelle antwort!
 
versuch es entweder mit

system("net send" + " "+GetDlgItemText(IDC_EDIT1) +" " + GetDlgItemText(IDC_EDIT2)...);

oder

system("net send " + m_edit1 +" "+ m_edit2 +" "+ m_edit3);

Der System-Befehl akzeptiert nur einen String, und um aus mehreren Strings einen zu machen, musst du sie miteinander addieren.
 
Dankeschön werde es gleich morgen ausprobieren!

Werde mich morgen gleich melden soweit ich etwas neues erfahre!
aber mit dem addieren hab ich jetzt verstanden ;)

Danke für die schnellen antworten!

Grüße

X
 
Fast hätte ich es vergessen:

du hast offensichtlich Membervariablen zu deinem Eingabefeld (m_edit1) erstellt.
Wenn du diese nicht Updatest, sobald eine Eingabe getätigt wird, bleiben diese leer und der String wird zwar theoretisch richtig zusammenaddiert aber die Variablen haben den falschen (oder keinen) Inhalt.

Du musst noch in die OnChange Funktion deiner Eingabefelder was eingeben:

Code:
void myApplication::OnChangeEdit1()
{
	 UpdateData(TRUE);
}

Erst durch UpdateData(bool) werden die Eingabefelder und die Membervariablen miteinander abgeglichen.
Über den Funktionsparameter kannst du wählen, wie upgedated werden soll:
UpdateData(TRUE) übernimmt den Wert des Eingabefelds in die Variable, wärend
UpdateData(FALSE) den Wert der Variable in das Eingabefeld übernimmt.
 
The_Maegges hat gesagt.:
versuch es entweder mit
system("net send" + " "+GetDlgItemText(IDC_EDIT1) +" " + GetDlgItemText(IDC_EDIT2)...);
Das kann so nicht funktionieren, da GetDlgItemString() kein CString-Objekt zurückgibt. Die einzelnen Teilstrings müssen erst zwischengespeichert und dann zusammengebaut werden:
Code:
CString str1, str2, str3;
GetDlgItemText(IDC_EDIT1, str1);
GetDlgItemText(IDC_EDIT2, str2);
GetDlgItemText(IDC_EDIT3, str3);

CString strResult = _T("net send ") + str1 + _T(" ") + str2 + _T(" ") + str3;

Außerdem sollte man bei Windows-Programmen besser mit "CreateProcess()" statt mit "system()" arbeiten (obwohl es erstmal komplizierter aussieht):
Code:
STARTUPINFO         siStartInfo;
PROCESS_INFORMATION piProcInfo;
memset(&siStartInfo, 0, sizeof(siStartInfo));
siStartInfo.cb = sizeof(STARTUPINFO);

CreateProcess( NULL,
               strResult, // Kommandostring, siehe vorherigen Code
               NULL,
               NULL,
               FALSE,
               NULL,
               NULL,
               NULL, 
               &siStartInfo,
               &piProcInfo );

Gruß
MCoder
 
Außerdem sollte man bei Windows-Programmen besser mit "CreateProcess()" statt mit "system()" arbeiten (obwohl es erstmal komplizierter aussieht):

Code:
CString str1, str2, str3;
GetDlgItemText(IDC_EDIT1, str1);
GetDlgItemText(IDC_EDIT2, str2);
GetDlgItemText(IDC_EDIT3, str3);

CString strResult = _T("net send ") + str1 + _T(" ") + str2 + _T(" ") + str3;


Code:
STARTUPINFO         siStartInfo;
PROCESS_INFORMATION piProcInfo;
memset(&siStartInfo, 0, sizeof(siStartInfo));
siStartInfo.cb = sizeof(STARTUPINFO);

CreateProcess( NULL,
               strResult, // Kommandostring, siehe vorherigen Code
               NULL,
               NULL,
               FALSE,
               NULL,
               NULL,
               NULL, 
               &siStartInfo,
               &piProcInfo );

und was bewirkt das ganze wenn man mit CreateProcess() arbeitet?

also bei system()

komm immer noch kurz ein dos-fenster! wenn man das weg bekommen würde?

ich denke das müsste dann mit CreateProcess() funktionieren, könnte mir mal jemand den code geben

danke im vorraus

grüße

tolga
 
CreateProcess ist der Code. Das ist eine Win32-API-Funktion. Und ja, dadurch kommt kein Konsolenfenster hoch.
 
und wie kann ich das anstelle von system()

ersetzen?

vielleicht so?
Code:
STARTUPINFO         siStartInfo;
PROCESS_INFORMATION piProcInfo;
memset(&siStartInfo, 0, sizeof(siStartInfo));
siStartInfo.cb = sizeof(STARTUPINFO);

CreateProcess( NULL,
               strResult, 
               CString str1, str2, str3;
               GetDlgItemText(IDC_EDIT1, str1);
               GetDlgItemText(IDC_EDIT2, str2);
               GetDlgItemText(IDC_EDIT3, str3);
               CString strResult = _T("net send ") + str1 + _T(" ") + str2 + _T(" ") + str3;
               
               NULL,
               NULL,
               FALSE,
               NULL,
               NULL,
               NULL, 
               &siStartInfo,
               &piProcInfo );

da ist doch etwas falsch! oder?
 

Neue Beiträge

Zurück