2010-07-20 4 views
0

Je travaille sur un projet existant avec un outil d'importation de texte écrit en C#. Il mélange essentiellement à la dernière fenêtre qui a eu le focus, copie le texte, revient en arrière et colle le texte dans la zone de texte. Pour ce faire, il émet essentiellement des commandes clavier si: Alt + Tab, Ctrl + A, Ctrl + C, Alt + Tab puis enfin obtenir le texte du presse-papiers et ajoutez-le à la zone de texte.Importation de texte C# à partir d'une fenêtre externe

Actuellement, cela fonctionne très bien sur XP. Cependant, il ne fonctionne pas sur Vista/Win 7. Il passera à la nouvelle fenêtre et cela semble être le cas, mais quand je reviens au C#, il a ajouté ce qui était précédemment dans le presse-papiers (ne pas copier avec succès le nouveau texte). Je suppose qu'il y a un problème à dire à une autre fenêtre d'utiliser les touches du clavier (Sélectionner tout et copier).

J'ai fait des recherches modérées en ligne et n'ai pas vraiment trouvé quoi que ce soit donc j'espérais voir si quelqu'un avait un problème similaire.

+0

Comment sont les commandes du clavier étant émis? SendKeys? Autre chose? – theraccoonbear

Répondre

1

En supposant que vous utilisez SendKeys, vous pouvez consulter ce commentaire sur la page SendKeys MSDN. Si cela est quelque chose introduit avec Vista, ce serait presque certainement affecter Windows 7 aussi bien, penser « Id:

Remarque

La classe SendKeys a été mis à jour pour le .NET Framework 3.0 pour permettre son utilisation dans les applications qui s'exécutent sur Windows Vista. La sécurité renforcée de Windows Vista (connue sous le nom d'utilisateur Account Control ou UAC) empêche l'implémentation précédente de fonctionner comme prévu .

La classe SendKeys est sensible aux problèmes de synchronisation , que certains développeurs ont dû contourner. L'implémentation mise à jour est toujours sensible aux problèmes de synchronisation , mais est légèrement plus rapide et peut nécessiter des modifications aux solutions de contournement . La classe SendKeys essaie d'utiliser l'implémentation précédente en premier, et si cela échoue, utilise la nouvelle implémentation . Par conséquent, la classe SendKeys peut se comporter différemment sur différents systèmes d'exploitation. De plus, lorsque la classe SendKeys utilise la nouvelle implémentation, la méthode SendWait n'attendra pas que les messages soient traités lorsqu'ils sont envoyés à un autre processus .

Si votre application repose sur un comportement cohérent quel que soit le système d'exploitation , vous pouvez forcer la SendKeys classe à utiliser la nouvelle implémentation en ajoutant le paramètre d'application suivante dans votre fichier app.config .

Pour forcer la classe SendKeys pour utiliser la mise en œuvre précédente, utilisez la valeur "JournalHook" au lieu.

http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx

Questions connexes