Inhalt von txt => Fenster kopieren

Chars brauchst du auch eigentlich nicht.. es gibt in C# immer strings.

Falls das Lesen einer Datei das Problem ist, das ist ganz einfach:
Code:
StreamReader datei = File.OpenText("Pfad");
[COLOR="Red"]string inhalt[/COLOR] = datei.ReadToEnd();
datei.Close();
Zusätzlich ist dann noch using System.IO; nötig.
 
und wie füge ich das in die Txt ein ? (code technisch)
Wie gesagt C# null plan
 
Code:
D:\Visual Studio Projects\nun aber\Class1.cs(13): The type or namespace name 'StreamReader' could not be found (are you missing a using directive or an assembly reference?)
D:\Visual Studio Projects\nun aber\Class1.cs(14): The type or namespace name 'datei' could not be found (are you missing a using directive or an assembly reference?)
D:\Visual Studio Projects\nun aber\Class1.cs(15): The type or namespace name 'datei' could not be found (are you missing a using directive or an assembly reference?)

mhhh? Also ne referenz namens Streamreader finde ich nicht
 
using System.IO ???

/edit:
Das Programm könnte z.B. so aussehen:
Code:
using System;
using System.IO;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace Tipper
{
    class Program
    {
        static void Main()
        {
            string Pfad = [COLOR="Red"]@"C:\passwörter.txt"[/COLOR]; // zum Beispiel
            string pw1, pw2, pw3;

            StreamReader datei = File.OpenText(Pfad);
            pw1 = datei.ReadLine();
            pw2 = datei.ReadLine();
            pw3 = datei.ReadLine();

            foreach (Process p in Process.GetProcesses())
            {
                if (p.MainWindowTitle == "Unbenannt - Editor") // Der Titel des Fensters - [COLOR="Red"]bei dir Truecrypt[/COLOR]
                {
                    SetForegroundWindow(p.MainWindowHandle);
                    SendKeys.SendWait(pw1 + "{Enter}" + pw2 + "{Enter}" + pw3 + "{Enter}");
                    return;
                }
            }
        }

        [DllImport("user32.dll")]
        private static extern bool SetForegroundWindow(IntPtr hWnd);
    }
}
In jeder Zeile der Passwortdatei stünde ein Passwort.
Außerdem fehlt noch die Fehlerbehandlung.
 
Zuletzt bearbeitet:
sauber ! danke !!! vielen vielen dank ^^

So jetzt muss der nur noch enter drücken nachdem er eingefügt hat.
Bzw wie anfangs beschrieben perfekt wär halt wenn er die Aktion drei mal macht.

Nochmal: Ich kann halt kein C# alles was ich mit C++ kann geht hier net weil die Syntax falsch is. Aber ich verstehe deinen Code bzw bin sicher auch in der Lage den anzupasen =)

/Edit: Boah danke. C# ist ja vom Code her voll easy (Stichtwort {Enter}). Bei c++ hätt ich jetzt erst ma gesucht.


Alles klar das Proggie ist fertig. Das wars auch fürs erste. Fehlerbehandlung brauch ich erst mal nicht.
 
Zuletzt bearbeitet:
Öhm es rennt doch noch net. Sprich mit txts klappts. Ich glaube es liegt am Namen vom Fenster.

Und zwar hats den Ellenlangen Namen "Kennwort für C:\XP platte\xp platte" da meckert sogar der Compiler. Ich probiers mal mit "Kennwort *". Vll geht das ja =)

/edit: Nein gehts nicht. Mennö

/edit:2: Das Fenster wird leider auch nicht unter Tasks angezeigt. Daher kann das Tool das Fenster auch nicht finden.
 
Zuletzt bearbeitet:
Da es jetzt in C# weitergeht, kann ich dir keine Syntax liefern, aber es müsste reichen den Prozessname zu kennen und dadurch das Handle zu bekommen oder zumindest das Fenster nach oben zu holen.

Im übrigen sind Doppelposts nicht so gern gesehen.

Edit: Hier hätte ich was, was an dein Problem rankommt. Ich hab auch nach C# Lösungen gesucht, aber da gibts noch weniger als in C++.
Generell bräuchtest du eine Funktion, die eine ProcessID entgegennimmt und dir ein Handle auswirft. Aber selbst das muss nicht 100% funktionieren, wenn die gesuchte Anwendung partout kein Top-Level-Handle rausrücken will.
 
Zuletzt bearbeitet:
Ich weiß wollts nur übersichtlicher halten ;)

Hm hast Recht. Nur leider weiß ich nicht wie ich das vollbringe :-\
 
Wenn du den Prozessnamen kennst: statt if (p.MainWindowTitle == "bla") mal mit if (p.ProcessName == "bla") versuchen ;)

/edit: Nein geht noch schöner:
Code:
using System;
using System.IO;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace Tipper
{
    class Program
    {
        static void Main()
        {
            string Pfad = @"C:\passwörter.txt"; // zum Beispiel
            string pw1, pw2, pw3;

            StreamReader datei = File.OpenText(Pfad);
            pw1 = datei.ReadLine();
            pw2 = datei.ReadLine();
            pw3 = datei.ReadLine();

            foreach (Process p in Process.[COLOR="Red"]GetProcessesByName("blabla")[/COLOR])
            {
                SetForegroundWindow(p.MainWindowHandle);
                SendKeys.SendWait(pw1 + "{Enter}" + pw2 + "{Enter}" + pw3 + "{Enter}");
                return;
            }
        }

        [DllImport("user32.dll")]
        private static extern bool SetForegroundWindow(IntPtr hWnd);
    }
}
Aber nicht getestet ;)

Die ID würde man übrigens einfach per p.Id bekommen.
 
Zuletzt bearbeitet:
So zu ich würd sagen 80% hab ichs ! :D

Ich hab da den ganzen Tach drann gehangen. Aber dafür klappts xD Und denkt drann ich kann kein bisschen C# dafür doch net übel oder ? :D Man bin ich grad stolz auf mich *g*
Bitteschön:

Code:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.IO;
using System.Data;



namespace activeWindow
 {
	class Program
	{
		[ DllImport("user32.dll") ]
		static extern int GetForegroundWindow();
		[ DllImport("user32.dll") ]
		static extern int GetWindowText(int hWnd);
		
		
		static void Main()
		{
			
			StreamReader datei = File.OpenText("f:\\keys.txt");
			string inhalt = datei.ReadToEnd();
			datei.Close();
			int counter = 0;
                        System.Threading.Thread.Sleep(5000);

			foreach (Process p in Process.GetProcesses())
			{
				while (counter != 4)
				{
				
				GetForegroundWindow();
				SendKeys.SendWait(inhalt + "{Enter}");
				System.Threading.Thread.Sleep(5000);
				counter=counter+1;
				
				}
			}
		}
		[DllImport("user32.dll")]
		private static extern bool SetForegroundWindow(IntPtr hWnd);
	}
}

Hat allerdings einen Schönheitsfehler. Wird das Script nach dem Anmelden gestartet, ist es vor TC gestartet und will somit den Code quasie in sein eigenes fenster kopieren. Ich muss halt erst mal das TC Fenster mit der Hand in den Vordergrund klicken, aber dann läufts wie geschmiert.

Mh muss also nur noch das TC Fenster in den Vordergrund rücken und dann sollte es das gewesen sein =)

Das krieg ich auch noch hin. Aber falls jemand ne Idee hat raus damit.

Danke an alle.

Beater

PS:Ich lauf jetzt erst mal mitm dicken Grinsen im Gesicht rum :D

/edit:

GESCHAFFT. Komplett fertig. Der Key wird von der Karte gesaugt, die Platten gemounted und im Netz freigegeben ohne einen einzigen Klick.

Realisiert hab ichs zum Schluss ganz einfach mittels drei WAIT Batch Files. Nach 10sec wird TC gestartet, nach 8 mein Script wobei dass erst nach 5sec (Sleep Befehl fehlt oben noch) startet und TC bis dahin komplett geladen ist und auf mein Script quasie wartet. Nach den ganzen Keys sprich nach ca 25sec (hab ich einfach abgeschätzt wie lange das dauert) geb ich dann die Platten via Net Share im Netz frei.

Alles mit Wait -s Zeit und danach halt die entsprechende .exe oder bat gestartet.

Wär evt auch was fürs TC Forum glaub ich.

/edit2: So hab den Code mal um Sleep ergänz so, dass das Script erst nach 5sec nach dem Start ausgeführt wird.
Für die, die sich nicht von vorne durchwühlen wollen: f:\\keys.txt enthält die Keys. Falls jemand das Script fertig kompiliert haben will soll er mir eine PM schicken.

MfG
Beater

Das klappt übrigens auch mit USB Sticks und jedem denkbaren mobilen Speichermedium wo eine .txt draufpasst. Ideal für leute mit sehr sehr sehr langen PWs, die aber zu fowl sind sich diese zu merken ;)
 
Zuletzt bearbeitet: (Code verbessert)
warum denn so kompliziert? ich hab meins mit autoit gemacht. hat meiner ansicht nach den vorteil, dass man die passwörter nicht in einer .txt speichern muss, sondern, dass sie direkt in der kompilierten .exe drin sind. außerdem wird, wenn das programm im autostart ist, truecrypt automatisch gestartet. also einfach nur auswählen ob man die platte einbinden will oder nicht. sehr stressfrei.

PHP:
#include <GUIConstants.au3>
#include <Misc.au3>


;~ AutoItSetOption("TrayIconHide", 1)


GUICreate ("SECUR@TIME", 300, 100, (@DesktopWidth-200)/2, (@DesktopHeight-100)/2, $WS_BORDER + $WS_POPUP)

GUICtrlCreateLabel ("TrueCrypt Mounts", 100, 30, 270, 23)
$Button_0 = GUICtrlCreateButton ("Cancel", 150, 65, 90, 23,$BS_DEFPUSHBUTTON)
$Button_1 = GUICtrlCreateButton ("Extern100", 50, 65, 90, 23,$BS_DEFPUSHBUTTON)


GUISetState ()

While 1
	$MSG = GUIGetMsg()
Select
	Case $MSG = $GUI_EVENT_CLOSE
		ExitLoop
	Case $MSG = $Button_0
		ExitLoop
	Case $MSG = $Button_1 Or _IsPressed("0D", 'user32.dll')		
		MountVolume1()
		ExitLoop 	
	EndSelect
WEnd

Func MountVolume1()
RunWait("C:\Program Files\TrueCrypt\TrueCrypt.exe /v \Device\Harddisk3\Partition2 /ld /b /p "passwort" /quiet /s /w /q background");
EndFunc

gruß agent

edit: denke auch, dass das sicherer ist, die dekompilierfunktion von autoit hat bei mir zumindest nicht funktioniert, somit ist es schwerer an die passwörter ranzukommen.
 
Zuletzt bearbeitet:
Am besten wäre es die Passörter z.B. AES-Verschlüsselt zu speichern und dann beim Start ein kurzes Passwort zu fordern. Aber wenn der die Datei mit den Passwörtern sicher lagert ist die Lösung doch ok.
 
ich hab mich auf diese weise nur davor geschützt, dass man das passwort auf die schnelle im klartext lesen kann. meine systempartition, auf der auch das skript liegt, ist sowieso verschlüsselt.
durch diese lösung wollte ich ja gerade verhindern, dass ich zum mounten wieder ein passwort eingeben muss.
gruß agent
 
Nein das Pw soll nicht im Quellcode eingebunden werden. Auch wenn mans nicht decompilen kann/können sollte. Das PW ist mehr als sicher gelagert ;) Die Lösung ist für mich eigentlich perfekt.

Nur spuckt TC iwie nen Fehler aus nach dem ganzen (Datei konnte nicht gefunden werden). Klappt aber trotzdem alles ^^

Ma schaun next Step ist die Fehlerbehandlung wenn ich ma Zeit hab.
 
Zurück
Oben