Формы победы, журнал все щелчки?

Существует ли способ зарегистрировать все щелчки в приложении Форм Победы? Я хотел бы прервать щелчки и записать действие и название управления, которое вызвало его.

Действительно ли это возможно?

Заранее спасибо.

ОБНОВЛЕНИЕ: я ищу приложение широкое решение, нет ли никакой способ добавить слушателя очереди событий окон (или чем когда-нибудь это называют)?

5
задан chillitom 6 April 2010 в 10:36
поделиться

5 ответов

Вы можете сделать это, если в основной форме вашего приложения будет реализован интерфейс IMessageFilter. Вы можете просматривать сообщения Window, которые оно получает, и искать клики. Например:

  public partial class Form1 : Form, IMessageFilter {
    public Form1() {
      InitializeComponent();
      Application.AddMessageFilter(this);
      this.FormClosed += (o, e) => Application.RemoveMessageFilter(this);
    }

    public bool PreFilterMessage(ref Message m) {
      if (m.Msg == 0x201 || m.Msg == 0x203) {  // Trap left click + double-click
        string name = "Unknown";
        Control ctl = Control.FromHandle(m.HWnd);
        if (ctl != null) name = ctl.Name;
        Point pos = new Point(m.LParam.ToInt32());
        Console.WriteLine("Click {0} at {1}", name, pos);
      }
      return false;
    }
  }

Обратите внимание, что при этом регистрируются все клики в любом окне вашего приложения.

5
ответ дан 14 December 2019 в 13:32
поделиться

Что ж, вы можете подписаться на событие Click или MouseDown для каждого элемента управления в форме.

0
ответ дан 14 December 2019 в 13:32
поделиться

используйте MouseEventArgs следующим образом:

    private  void Form_MouseDown(object sender, System.WinForms.MouseEventArgs e) 
{ 
switch (e.Button) 
{ 
    case MouseButtons.Left: 
    MessageBox.Show(this,"Left Button Click"); 
    break; 
    case MouseButtons.Right: 
    MessageBox.Show(this,"Right Button Click" ); 
    break; 
    case MouseButtons.Middle: 
    break; 
    default: 
    break; 
} 

EventLog.WriteEntry("source", e.X.ToString() + " " + e.Y.ToString()); //or your own Log function

} 
0
ответ дан 14 December 2019 в 13:32
поделиться

В тестовом проекте NunitForms есть записывающее приложение, которое отслеживает это и многие другие события. Код очень умный и заслуживает внимательного изучения. Это проект ThoughtWorks.

Это решение Rolls Royce! ...

Попробуйте рекурсивно пройти по коллекции Controls формы и присоединиться к событию в зависимости от типа.

PK: -)

0
ответ дан 14 December 2019 в 13:32
поделиться

Для этого можно использовать Spy ++ или WinSpy ++ .

альтернативный текст http://www.catch22.net/sites/default/files/images/winspy1.img_assist_custom.jpg

Но я не уверен, как вы можете добиться того же самого. Если возможно, вам нужно будет сделать это с помощью низкоуровневой ловушки Windows API или обработчика сообщений, который дает вам доступ ко всем сообщениям в очереди ваших приложений.

1
ответ дан 14 December 2019 в 13:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: