Sendkeys Probleme bei XP und Word2002

Hallo,

ich habe ein Programm, welches sich bei Druck einer Tastenkombination markierten Text aus Windows-Anwendungen holt und dann weiter verarbeitet.

Das Rausholen des Textes erfolgt mit SendKeys("^c"). Geht soweit auch ganz gut. Nur unter Windows XP geht es zusammen mit Office XP nicht. Mit Notepad, Acrobat etc klappt es wunderbar.

Druecke ich vorher manuel STRG+C, dann geht es!

Hat vielleicht irgendwer eine Ahnung warum das so sein koennte? Ich such mir hier den Wolf im Internet =:wink:

Danke und Ciao! Bjoern

Hallo,

bin schon einen Schritt weiter, weiss nur noch nicht in welche Richtung =:wink:

Direkt nach dem Aufruf des Programmes funktioniert es genau einmal! Danach nicht mehr. Erst wieder, wenn man das Programm beendet und neu startet

Ciao! Bjoern

Hallo Bjoern,

bin schon einen Schritt weiter, weiss nur noch nicht in welche
Richtung =:wink:

Direkt nach dem Aufruf des Programmes funktioniert es genau
einmal! Danach nicht mehr. Erst wieder, wenn man das Programm
beendet und neu startet

da kann ich auch nur raten. …

1.) Du verwendest eine Taste, die Das Programm auch verwendet. Deine Tastenbelegung könnte dabei überschrieben werden.
2.) Dein Programm bemerkt den Tastendruck nicht.

Ich würde mal einen Stoppunkt setzen um zu sehen, ob und wie das Programm reagiert.

Gruß, Rainer

Hallo,

da kann ich auch nur raten. …

1.) Du verwendest eine Taste, die Das Programm auch verwendet.
Deine Tastenbelegung könnte dabei überschrieben werden.

Mhh, das Programm ist ja Word2002. Unter Windows 2000 in Kombination mit Word2002 funktioniert es ja, ausserdem ist die Tastenkombination STRG+C, also eine gaengige Funktion. Den Focus selber bekommt mein Programm ja, es oeffnet sich ja. Es wird halt nur nicht der aktuell markierte Text uebernommen, sondern der vorherige (bzw. nur der, der als erstes nach Programmstart gewaehlt wurde, bzw sich in der Zwischenablage befindet)

2.) Dein Programm bemerkt den Tastendruck nicht.

s.o.

Ich würde mal einen Stoppunkt setzen um zu sehen, ob und wie
das Programm reagiert.

Das Programm reagiert korrekt. Die Uerbenahme markierten Textes in mein Programm funktioniert gaaaanz einfach: ich sende STRG+C an das Programm mit dem aktuellen Focus, dann rufe ich mein Programm auf, setze den Focus darauf (auf eine Textbox im Programm) und sende STRG+V. Fertig =:wink:

Alles wird gemacht. Nur bei STRG+C wird der aktuelle Text nicht uebernommen!

Ciao! Bjoern

Hallo Bjoern,

Mhh, das Programm ist ja Word2002. Unter Windows 2000 in
Kombination mit Word2002 funktioniert es ja,

Hmmm, die selben Programme (Deines und Word2002) nur unterschiedliche BS (Mal W2k, mal XP) und unterschiedliches Verhalten von VB? Das habe ich noch nicht gesehen. Muß aber nichts heißen, ich habe so einiges noch nicht gesehen. :wink:

ausserdem ist die
Tastenkombination STRG+C, also eine gaengige Funktion.

Wird auch sonst nicht anders belegt.

Allerdings verstehe ich jetzt ganz Bahnhof! Wenn Du STRG-C drückst, wieso sendest Du dann den selben Tastencode noch mal?

Den
Focus selber bekommt mein Programm ja, es oeffnet sich ja.

OK, Dein Programm hat den Focus. Dann kann sich STRG-C nicht mehr auf den Text in Word auswirken, denn das muß den Focus haben, damit der Text übernommen werden kann.

Es
wird halt nur nicht der aktuell markierte Text uebernommen,
sondern der vorherige (bzw. nur der, der als erstes nach
Programmstart gewaehlt wurde, bzw sich in der Zwischenablage
befindet)

Wäre logisch, wenn Dein Programm den Focus hat. Dann dürfte das aber unter W2k auch nicht funktionieren.

Das Programm reagiert korrekt. Die Uerbenahme markierten
Textes in mein Programm funktioniert gaaaanz einfach: ich
sende STRG+C an das Programm mit dem aktuellen Focus, dann
rufe ich mein Programm auf, setze den Focus darauf (auf eine
Textbox im Programm) und sende STRG+V. Fertig =:wink:

Setze den Stoppiunkt an die Stelle, an der Du die Daten aus dem Clipboard schon in der Variablen hast. Da kannst Du sehen, ob die Daten im Clipboard angekommen sind.

Alles wird gemacht. Nur bei STRG+C wird der aktuelle Text
nicht uebernommen!

Wenn Du die Tasten ohnehin drückst, warum sendest Du die Kombination dann noch mal? Die Daten stehen dann doch schon im Clipboard, Du mußt sie nur noch lesen.

Gruß, Rainer

Nachtrag … Beispiel
Hallo Bjoern,

ich verstehe immer noch nicht ganz, was Du vor hast.
Ich habe mal ein Beispiel geschrieben, von dem ich im Moment vermute, daß es macht, was Du willst. Dann kannst Du mir leichter erzählen, wo ich Dich falsch verstanden habe.

1.) Auf die Form kommt ein Button und eine Liste …

Code:

Private Sub Command1\_Click()
 Do While w = 0
 Clipboard.Clear
 txt = ""

 Do While txt = ""
 DoEvents
 txt = Clipboard.GetText
 Loop

 List1.AddItem txt

 Loop
End Sub

Du startest Das Programm und minimierst es.

Dann öffnest Du Word (oder Du öffnest Word vorher, ist auch egal) markierst eine Textstelle und tippst STRG-C. Dann die nächste Textstelle … Die kopierten Textstellen stehen aufgelistet in Deinem Programm, Du mußt es nur wieder anzeigen um die Texte lesen speichern, … zu können. Sendkeys wird dafür nicht gebraucht.

Gruß, Rainer

1 Like

Hallo Rainer,

ich hab das Problem gefunden, werde dich aber vorher noch ein wenig ueber meine abstruse Ausgangssituation aufklaeren =:wink:

Allerdings verstehe ich jetzt ganz Bahnhof! Wenn Du STRG-C
drückst, wieso sendest Du dann den selben Tastencode noch mal?

Nein, ich druecke nicht STRG+C, sondern STRG+SHIFT+F11. Warum? Weil man mit STRG+SHIFT und Pfeiltaste ein Wort markieren kann, dann schnell von der Pfeiltaste auf F11 wechseln (was anderes war nicht mehr frei) und schon wird in einem Woerterbuch nach dem Wort gesucht.

Intern macht das Programm aber nur eine Abfolge der Befehle SendKeys(^c), Form1.show und SendKeys(^v)

Und genau beim SendKeys(^c) haperte es. Wenn ich allerdings vor der Tastankombination STRG+SHIFT+F11 auch noch STRG+C gedrueckt hatte ging es. Daraus folgerte ich, dass der Text nicht in die Zwischenablage reinkam->STRG+C bzw. SendKeys funktioniert nicht.

Die Loesung war einfach genug: SendKeys hat ja Zwei Parameter. Einmal der String der gesendet wird, einmal eine boolsche Variable, ob auf die korrekte Ausfuehrung gewartet werden soll.

Letzteres war total aus meinem Gedaechtnis verschwunden. Und auch auf 99% der Seiten, auf denen ich heute morgen nach SendKeys gesucht habe, hatten keinen zweiten Parameter angegeben!

Gruß, Rainer

Danke fuer deinen Beistand. Es bringt ja auch schon viel, wenn man sieht, dass man nicht alleine an irgendwas verzweifeln muss, sondern einer da ist, der genauso verzweifwelt. Auch wenn es bei demjenigen eher aufgrund einer verwirrenden Fragestellung war =:wink:

Ciao! Bjoern

Hi Bjoern,

Die Loesung war einfach genug: SendKeys hat ja Zwei Parameter.
Einmal der String der gesendet wird, einmal eine boolsche
Variable, ob auf die korrekte Ausfuehrung gewartet werden
soll.

Ja, da habe ich aber auch nicht 'dran gedacht, obwohl mir das auch schon Probleme gelöst hat. :wink:

Danke fuer deinen Beistand. Es bringt ja auch schon viel, wenn
man sieht, dass man nicht alleine an irgendwas verzweifeln
muss, sondern einer da ist, der genauso verzweifwelt.

Gern gescheh’n. :wink: Manchmal hilft es schon, das Problem zu beschreiben, dann bemerkt man die Lösung. Demnächst machen wir das mal umgekehrt. :wink:

Gruß, Rainer