Laden...

Tasten an ein schon laufendes Programm schicken

Erstellt von csharpprogrammierer vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.490 Views
C
csharpprogrammierer Themenstarter:in
4 Beiträge seit 2009
vor 14 Jahren
Tasten an ein schon laufendes Programm schicken

Hallo,
Ich will ein Programm schreiben, das ein Prozess startet, dem prozess eine PID zuweißt und später mit getprocessbyid Tasten an den Prozess sendet. Mit dem PID zuweißen klappt alles gut bis ich die Tasten senden will. Dann kommt ein Fehler der Prozess mit der ID ... wurde nicht gefunden. Was mache ich da??? Kann man das irgendwie anders machen, vielleicht über findwindow???

Hier mein jetztiger Code:

private void button1_Click(object sender, EventArgs e)
        {
            string str = textBox1.Text;
            Process process = new Process();
            process.StartInfo.FileName = str;
            process.Start();
            ID = process.Id;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            System.IntPtr MainHandle = Process.GetProcessById(ID).MainWindowHandle;
            SendKeys.Send(Text);
            SetForegroundWindow(MainHandle);
        }
6.911 Beiträge seit 2009
vor 14 Jahren

Hallo,

du kannst dem Prozess keine ID zuweisen. Das erledigt das Betriebssystem.
Später muss der Prozess auch nicht ermittelt werden - die Variable kann gehalten werden.

Beispiel:


Process p = new Process();
p.StartInfo.FileName = "notepad.exe";
p.Start();
int id = p.Id;

Die Variable für den Prozess (hier: p) kannst du später verwenden und von die ID-Eigenschaft lesen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

C
csharpprogrammierer Themenstarter:in
4 Beiträge seit 2009
vor 14 Jahren

hallo,
vielen dank für die schneller antwort.
Ich habe jetzt nicht mehr den Fehler, allerdings werden immernoch keine Tasten gesendet.

private void button1_Click(object sender, EventArgs e)
        {
            Process p = new Process();
            p.StartInfo.FileName = textBox1.Text;
            p.Start();
            int id = p.Id;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            
            System.IntPtr MainHandle = Process.GetProcessById(id).MainWindowHandle;
            SendKeys.Send(textBox2.Text);
            SetForegroundWindow(MainHandle);
        }
2.760 Beiträge seit 2006
vor 14 Jahren


            SendKeys.Send(textBox2.Text);
            SetForegroundWindow(MainHandle);

Macht mir den Eindruck falsch herum zu sein.

C
csharpprogrammierer Themenstarter:in
4 Beiträge seit 2009
vor 14 Jahren

ne funktionier immernoch nicht.
Allerdings wird das id auch als Fehler angesehen. (Der Name "id" ist im aktuellen Kontext nicht vorhanden)

System.IntPtr MainHandle = Process.GetProcessById(id).MainWindowHandle;

Fehlt noch etwas?

2.760 Beiträge seit 2006
vor 14 Jahren

Der Name "id" ist im aktuellen Kontext nicht vorhanden

Hmm.. das solltest du selbst lösen können: [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

Was möchtest du denn für Tasten schicken? Bzw. an was für eine Anwendung? Bei DirectInput funktioniert das z.B. nicht.

6.911 Beiträge seit 2009
vor 14 Jahren

Woher soll er die Variable "id" kennen wenn sie lokal deklariert ist? Das müsste doch schon beim Kompilieren auffallen.

Wenn der Prozess auf Klassenebene gespeichert wird kann auf die ID-Eigenschaft des Prozess direkt zugegriffen werden ohne die ID via GetProcessByID zu ermitteln.


public partial class Form1 : Form
{
	Process p = new Process();

	public Form1()
	{
		InitializeComponent();
	}

	private void button1_Click(object sender, EventArgs e)
	{
		... p.MainWindowHandle;
	}
}

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

C
csharpprogrammierer Themenstarter:in
4 Beiträge seit 2009
vor 14 Jahren

Es sollen Tasten in eine textBox eingeben werden.
Die sollen dann an ein Spiel geschickt werden.
Der Pfad der Datei soll in eine textBox geschrieben werden.
Dann soll das Spiel auf Buttondruck gestartet werden.
Klappt auch alles gut nur halt das keine Tasten gesendet werden.

Bin noch nicht der ganz Fortgeschrittene, deswegen ist es etwas umständlich geschrieben.

2.760 Beiträge seit 2006
vor 14 Jahren

Was für ein Spiel, denn:

Bei DirectInput funktioniert das z.B. nicht.

Du kannst (ähm nein, solltest) aber auch die Foren-Suche bemühen denn hier haben schon einige Leute das selbe gemacht wie du. In der Regel funktionierte das dann auch.

6.911 Beiträge seit 2009
vor 14 Jahren

Was meinst du mit Tasten? Glaube nicht dass Hardwarebestandteile per Software versendet werden können 😉

PostMessage (WinAPI) könnte eine Alternative darstellen.

mfG Gü

PS: Was mich immer wieder wundert warum Leute die nicht programmieren können und denen die Grundlagen fehlen sich Themen aussuchen die sehr fortgeschritten sind.
Ich zB hab mit den Grundlagen begonnen.

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

2.760 Beiträge seit 2006
vor 14 Jahren

Was meinst du mit Tasten? Glaube nicht dass Hardwarebestandteile per Software versendet werden können

😁

Was mich immer wieder wundert warum Leute die nicht programmieren können und denen die Grundlagen fehlen sich Themen aussuchen die sehr fortgeschritten sind.
Ich zB hab mit den Grundlagen begonnen.

Da gebe ich dir vollkommen recht. Aber C# mitm Visual Studio schaut am Anfang so einfach aus das man sich leicht übernimmt. Alles schön Klicki Bunti mit Designer und der gleichen und SendKeys klingt auch noch so schön intuitiv. Dann noch irgendwo schnell ein snippet verbastelt und alles schaut gut aus... bis es nicht so funktioniert wie man es erwartet hätte.

1.696 Beiträge seit 2006
vor 14 Jahren

Schon wieder einer, der versucht, Spiele zu cheaten. Warum macht man sowas? Ich verstehe das nicht, was hat man davon? Erfolgerlebnis? Wohlkaum!

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo csharpprogrammierer,

davon abgesehen wurde dieses Thema schon bis zum Abwinken besprochen. Bitte benutze die Forumssuche. Vielen Dank!

herbivore