Как подделать положение курсора мыши в Windows Forms C #? - PullRequest
5 голосов
/ 14 августа 2010

У меня есть это приложение Windows Forms с простой всплывающей подсказкой.В зависимости от расположения окна приложения на рабочем столе и расположения курсора мыши «всплывающая подсказка» (или стрелка-указатель) может указывать или не указывать на нужное место.

Например, мое приложение привязываетсяк боковым сторонам рабочего стола, и когда он будет привязан к правой стороне, если курсор мыши находится ниже 100 пикселей правой стороны, «наконечник» всплывающей подсказки будет указывать на неправильное место.Но если курсор мыши находится где-то еще, он будет указывать на правильное место.

В этой ситуации я хотел подделать положение курсора мыши (без фактического изменения положения курсора мыши), чтобы оно было где-то еще, поэтомупроблема не возникнет.

Возможно ли это?Как мне этого добиться?

private void noteTitleInput_KeyPress(object sender, KeyPressEventArgs e) {
    if(e.KeyChar == Convert.ToChar(Keys.Return, CultureInfo.InvariantCulture) && noteTitleInput.Text.Length > 0) {
        e.Handled = true;

        noteInputButton_Click(null, null);
    } else if(!Char.IsControl(e.KeyChar)) {
        if(Array.IndexOf(Path.GetInvalidFileNameChars(), e.KeyChar) > -1) {
            e.Handled = true;

            System.Media.SystemSounds.Beep.Play();

            noteTitleToolTip.Show("The following characters are not valid:\n\\ / : * ? < > |",
                groupNoteInput, 25, -75, 2500);

            return;
        }
    }

    noteTitleToolTip.Hide(groupNoteInput);
}

Ответы [ 4 ]

4 голосов
/ 08 сентября 2010

Я не совсем уверен, зачем вам устанавливать позицию курсора, потому что вы можете установить подсказку так, чтобы она отображалась там, где вы говорите, а не обязательно там, где мышь.

Например:

tooltip1.Show("My tip", controlOnWhichToShow, 15, 15);

будет отображать кончик в верхнем левом углу элемента управления OnWhichToShow, в 15 точках от краев.

Если я вас неправильно понял, то, пожалуйста, укажите, в какой момент времени используется положение мыши.

3 голосов
/ 08 сентября 2010

Если вы синхронизируете событие MouseHover, вы можете создать всплывающую подсказку, как описывает veljkoz. Таким образом, вы можете разместить подсказку, как вам нравится. Код будет выглядеть примерно так:

protected override void OnMouseHover(EventArgs e)
{
  ToolTip myToolTip = new ToolTip();
  myToolTip.IsBalloon = true;
  // TODO The x and y coordinates should be what ever you wish.
  myToolTip.Show("Helpful Text Also", this, 50, 50);
  base.OnMouseHover(e);
}

Надеюсь, это поможет.

0 голосов
/ 05 июня 2019

Вы можете делать то, что вы говорите с классом. Вы можете сделать это очень простым способом.

один класс создания и

namespace MousLokasyonbulma

{ класс benimtooltip: ToolTip { [System.Runtime.InteropServices.DllImport ( "User32.dll")] static extern bool MoveWindow (IntPtr h, int x, int y, int width, int height, bool redraw); public benimtooltip () { this.OwnerDraw = true; this.Draw + = Benimtooltip_Draw; }

    private void Benimtooltip_Draw(object sender, DrawToolTipEventArgs e)
    {
        e.DrawBackground();
        e.DrawBorder();
        e.DrawText();
        var t = (ToolTip)sender;
        var h = t.GetType().GetProperty("Handle",
          System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
        var handle = (IntPtr)h.GetValue(t);
        var location = new Point(650, 650);
        var ss= MoveWindow(handle, location.X, location.Y, e.Bounds.Width, e.Bounds.Height, false);
    }
}

}

полный код MyGithup

Пример изображения проекта https://i.hizliresim.com/1pndZG.png https://i.hizliresim.com/Lvo3Rb.png

0 голосов
/ 14 августа 2010

В Windows Forms мышь захватывается элементом управления, когда пользователь нажимает кнопку мыши на элементе управления, и мышь освобождается элементом управления, когда пользователь отпускает кнопку мыши.

Свойство Captureкласс Control указывает, захватил ли элемент управления мышь.Чтобы определить, когда элемент управления теряет захват мыши, обработайте событие MouseCaptureChanged.

Только мышь в окне переднего плана может захватывать мышь.Когда фоновое окно пытается захватить мышь, оно получает сообщения только о событиях мыши, которые происходят, когда указатель мыши находится в видимой части окна.Кроме того, даже если окно переднего плана захватило мышь, пользователь все равно может щелкнуть другое окно, выводя его на передний план.Когда мышь захвачена, горячие клавиши не работают.

Подробнее здесь. Захват мыши в Windows Forms

...