Tastendrücke übermitteln

CShark

Mitglied
Hallo erstmal an alle,

Ich suche eine Lösung und brauche dafür Hilfe.
Das Programm ist in C# mit C#Express 2010 geschrieben.

Also:
Ich habe ein Programm, dieses Programm öffnet ein mehrseitiges PDF. Dieses PDF soll nun zugeschnitten werden, damit das geschehen kann übermittele ich mit C# Tastendrücke mittels SendKeys.Send. Soweit so gut funktioniert es, aber jetzt komme ich zu meinem Problem.

Da ich die Datei nach dem zuschneiden an einem anderen Ort als die Ursprungsdatei speichern will muss ich irgendwie durch Tastendrücke zu dem Speichern unter... dialog kommen.
Das genaue Problem ist, dass ich warten muss bis die Verarbeitung abgeschlossen ist also quasi muss ich eine Art wait einbauen.
Ich habe es mit Thread.Sleep und über DateTime probiert. Alles funktioniert nicht.
Kann mir jemand helfen?

mfg
CShark
 
Was funktioniert nicht? Der Thread schläft nicht ein, wenn du Thread.Sleep verwendest? Das glaube ich dir nicht. Zeig mal ein bisschen Code bitte. Alternativ kannst du probieren einen Timer zu verwenden. Was meinst du mit "Ich habe es über DateTime probiert"?
 
Doch doch er schläft ein Tut mir Leid ich habe es nicht soo gut beschrieben.

Es kommt mir quasi so vor als ob er das was eigentlich vor dem sleep ist trotzdem erst danach macht.

Ich mache quasi eine Tastenkombination in Acrobat um das Zuschneidemenü zu öffnen dort mache ich dann eigaben und bestätige das Zuscheiden, wenn er dann damit fertig ist will ich mit einer Tastenkombination den Speichern unter dialog öffnen, und da hängt er sich auf.

Code:
C#:
            SendKeys.Send("%");
            SendKeys.Send("{DOWN}");
            DateTime stopIdle = DateTime.Now.AddSeconds(1);
            while (DateTime.Now < stopIdle)
            {
            }
            SendKeys.Send("%");
            SendKeys.Send("c");

            MausBewegen.Move(200, 200);
            MausBewegen.Click();
            MausBewegen.Click();
            process.WaitForInputIdle();

            do
            {
            } while (process.Responding == false);

            DateTime stopIdle2 = DateTime.Now.AddSeconds(1);
            while (DateTime.Now < stopIdle2)
            {
            }
            SendKeys.Send("{TAB 4}");
            SendKeys.Send("0");
            SendKeys.Send("{TAB}");
            SendKeys.Send("160");
            SendKeys.Send("{TAB}");
            SendKeys.Send("0");
            SendKeys.Send("{TAB}");
            SendKeys.Send("57");
            SendKeys.Send("{TAB 6}");

            DateTime stopIdle3 = DateTime.Now.AddSeconds(3);
            while (DateTime.Now < stopIdle3)
            {
            }

            SendKeys.Send("{UP}");
            SendKeys.Send("{ENTER}");

            SendKeys.Send("+(^(S))");
 
Zuletzt bearbeitet von einem Moderator:
Das letzte SendKeys ist die Tastenkombination für den Speichern unter... Dialog zwischen dem letzten ENTER und dieser Tastenkombination hatte ich einen sleep und dann hat er komischerweise nicht einmal mehr den ENTEr klick vollführt genau das ist auch jetzt noch der Fall :(
Lagsam verzwifle ich daran.
 
Ok ich habe das Problem jetzt gelöst.
Ich habe alle SendKeys.Send durch SendKeys.SendWait ersetzt. Jetzt wartet er ab bis auch das was auf den Tastendruck folgt vorbei ist und löst nicht alels gleichzeitig aus.
Das Problem ist gelöst. Vielen Dank

mfg CShark
 
Ich meine mich zu erinnern, dass du Acrobat direkt als COM-Komponente oder über VBA ansteuern kannst. (wenn es mit VB.Net möglich ist, dann geht es natürlich auch mit C#.) Ich habe mal schnell gesucht und das hier gefunden. Das ist vielleicht ein bisschen eleganter als Tastenanschläge zu simulieren. Ich glaube das Beispiel auf der Seite ist fuer VB6.0... aber mit ein bisschen Suchen findest du bestimmt was Aktuelleres.
 
Zuletzt bearbeitet:
Vielen Dank Shakie ich schau mir das mal an. Wäre wirklich eine wesentlich elegantere Lösung ich arbeite mich da mal rein. Besten Dank!
 
Zurück