C # — поиск координат приложения Winform

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

Я пробовал использовать координаты, указанные в свойствах текстового поля и элементов управления кнопки, но они не работали.

  IntPtr childHwnd = Win32API.FindWindowByPosition (ptr, new Point (intFirstNameCoordX, intFirstNameCoordY));  

Вот как я хочу найти окно.

Я хочу найти текстовое поле и положение кнопок в форме Windows. Я искал в Google и нашел какой-то инструмент Spy ++, но я не уверен, что это то, что мне нужно, и если это так, может ли кто-нибудь рассказать мне, как я могу использовать его, чтобы найти позицию в приложении простой оконной формы.


3

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

Во-первых, вы можете получить дескриптор главного окна. Вы можете получить дескриптор по процессу (перечислить окна процесса) или по его заголовку. Если вы хотите получить дескриптор по заголовку, вы можете использовать FindWindow

Этот дескриптор является дескриптором окна. Затем вы можете перечислить его дочерние окна — например, панели или другие элементы управления, используя EnumChildWindows

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

Затем, когда вы найдете элемент управления, который вас интересует, вы можете получить дополнительную информацию , используя, например, GetWindowRect

Улучшите этот ответ
ответил 29 марта ’19 в 13:21
  • Так вы говорите, что я не должен искать окно по его положению, а не по ручкам? Если да, то где я могу найти имя ручки? Я новичок в этом, поэтому заранее прошу прощения — Фаран Салим, 29 марта 2019, 13:26
  • Итак, у меня есть функции 🙂 FindWindow — вы найдете главное окно своего приложения. Затем вам нужно использовать EnumChildWindows, чтобы найти его дочерние элементы. Все является окном — окно, панель, кнопка, текстовое поле … FindWindow предоставит вам дескриптор вашего mainWindow. EnumChildWindows предоставит вам дескрипторы и некоторые другие вещи дочерних окон. — Adam Jachocki 29 марта ’19 в 13:31
  • Хорошо, я понял, но как мне получить ручки для окон? Например, мне нужно использовать какой-нибудь инструмент? Как какой-нибудь визуализатор деревьев или что-то в этом роде? Где я знаю родительский дескриптор, дочерний дескриптор и т. Д. — Фаран Салим, 29 марта 2019, 13:42
  • Нет, дескрипторы меняются каждый раз, когда создается элемент управления. Вы получите дескрипторы от FindWindow и EnumChildWindows. Прочтите ссылки в моем сообщении 🙂 — Адам Джачоцки, 29 марта 2019, 13:43
  • В настоящее время в моем коде я нахожу MainWindowHandle следующим образом: IntPtr ptr = MainWindowHandle; — Фаран Салим, 29 марта ’19 в 13:52
| показать 1 дополнительный комментарий

Хорошо, я вижу, что вы используете функции WinApi, поэтому я выиграл Не будем углубляться в это, просто дайте вам некоторое представление.

Во-первых, вы можете получить дескриптор главного окна. Вы можете получить дескриптор по процессу (перечислить окна процесса) или по его заголовку. Если вы хотите получить дескриптор по заголовку, вы можете использовать FindWindow

Этот дескриптор является дескриптором окна. Затем вы можете перечислить его дочерние окна — например, панели или другие элементы управления, используя EnumChildWindows

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

Затем, когда вы найдете элемент управления, который вас интересует, вы можете получить дополнительную информацию , используя, например, GetWindowRect



Ввод мыши в приложении C # Windows Forms

Здравствуйте, программисты,

I создали приложение Windows Forms на C # в Visual Studio 2017, которое открывает любой файл PDF. Форма, которую я использую при запуске приложения, представляет собой поле с кнопкой (для открытия PDF-файла), два текстовых поля, которые задают координаты X и Y мыши, и поле, в котором открывается PDF-файл. К сожалению, всякий раз, когда я нажимаю на поле PDF, ничего не происходит. Как мне взаимодействовать с PDF-файлом и показать пользователю, где находится мышь во время щелчка?

Код для открытия PDF:

 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing;  использование System.Linq; использование System.Text; использование System.Threading.Tasks; использование System.Windows.Forms; пространство имен WindowsFormsApp2 {публичный частичный класс Form1: Form {public Form1 () {InitializeComponent ();  } private void button1_Click (object sender, EventArgs e)//кнопка для открытия PDF {OpenFileDialog openFileDialogE = new OpenFileDialog ();  если (openFileDialogE.ShowDialog () == System.Windows.Forms.DialogResult.OK) {axAcroPDF1.src = openFileDialogE. Имя файла;  }} private void axAcroPDF1_MouseClick (объект-отправитель, MouseEventArgs e)//предполагается записывать позицию при нажатии {base.OnMouseClick (e);  textBox1.Text = e.X.ToString ();  textBox2.Text = e.Y.ToString ();  } private void axAcroPDF1_MouseUp (отправитель объекта, MouseEventArgs e)//предполагается записывать позицию при выпуске {textBox1.Text = e.X.ToString ();  textBox2.Text = e.Y.ToString ();  Console.WriteLine («мышь вверх»);  }}} 

Что я пробовал:

Я скорректировал существующий код, который дает пользователю координаты щелчков в любом месте графического окна. Я изменил его так, чтобы он мог работать с коробкой PDF. Я использовал его в своем коде на C #. Я также протестировал существующую программу отдельно, и она тоже не сработала.
В конце концов я хочу вывести расстояние на экране между тем, когда я начинаю щелкать, и когда я отпускаю.

Исходный код:

 

 using System; using System.Collections.Generic; using System.ComponentModel;  использование System.Data; использование System.Drawing; использование System.Linq; использование System.Text; использование System.Windows.Forms; пространство имен testGraphiqueCSharp {общедоступный частичный класс Form1: Form {public Form1 () {InitializeComponent ();  } защищенный void pictureBox1_MouseClick (MouseEventArgs e) {base.OnMouseClick (e);  textBox1.Text = e.X.ToString ();  textBox2.Text = e.Y.ToString ();  } private void pictureBox1_MouseUp (отправитель объекта, MouseEventArgs e) {textBox1.Text = e.X.ToString ();  textBox2.Text = e.Y.ToString ();  Console.WriteLine («мышь вверх»);  }}} 

Оцените статью
logicle.ru
Добавить комментарий