J'ai le numéro suivant:Écrire la position de la souris absolue dans TextBox
J'ai une fenêtre avec deux zones de texte. Lorsque je clique dans une zone de texte et puis cliquez n'importe où ailleurs (même en dehors de la fenêtre), la position du clic de souris doit être écrite dans la zone de texte.
J'ai trouvé la bibliothèque MouseKeyHook
, dans laquelle une démo montre comment la position de la souris est mise à jour dans un formulaire Windows. Mais je n'ai pas encore réussi à appliquer le code à mon problème. Je ne sais même pas où je devrais écrire le code trouvé dans la démo.
Ce que je suis venu avec à ce jour est la suivante:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace LineClicker
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void StarttextBox_GotFocus(object sender, RoutedEventArgs e)
{
Mouse.Capture(StarttextBox);
StarttextBox.Text = string.Format(" x {0} , y {1}", PointToScreen(Mouse.GetPosition(this)).X, PointToScreen(Mouse.GetPosition(this)).Y);
}
}
}
Voici le code pour une zone de texte. Lorsque je clique dessus, les coordonnées x et y sont affichées. Ils ne sont pas absolus, je pense que cela est dû au paramètre this
dans la méthode GetPosition
. Que dois-je choisir au lieu de this
?
Une autre chose est que la position n'est pas toujours mise à jour. Lorsque je déplace la souris vers le coin inférieur droit de mon bureau, puis que j'active la zone de texte en la tabulant, la position n'est pas mise à jour.
Quelles sont les étapes à suivre ici?
Si vous souhaitez obtenir la position absolue de la souris, par rapport à l'écran, et la mettre à jour même lorsque vous êtes en dehors de la fenêtre WPF, vous devrez utiliser un MouseHook (Utilise les appels API Win32 pour obtenir la position) et un minuteur, qui obtient la position et l'affiche dans votre TextBlock. –