![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| viktorst |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 12.12.2009 Репутация: нет Всего: нет |
Здраствуйте читатели форума. есть такая задача: открыть форму (не свою), нажать на ней кнопку. Я написал открытие через Procces так как есть exe - шник. подскажите как можно получить имя открывшейся формы и список контролов на ней. а так же как программно нажать кнопку. как нажать клавишу на клавиатуре я уже нашел через API, тоесть через неуправляемый код ( во всяком случае так он называется в MSDN). кстати платформа разработки - VS2008, язык С#.
|
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
ИМХО это нетривиальная задача.
сразу ссылка на полезный для данных задач сайт Я бы делал так Форма - это окно. Кнопка - это тоже окно (в ОС Windows). Т.о. фактически - целевая форма с кнопкой - это Windows окно, содержащее дочернее окно (кнопку). Если нужный процесс уже найден (через класс Process, конечно), то к форме можно получить доступ через Process.MainWindowHandle. Получаем дескриптор главного окна. Причем нужно учесть то, что кнопка может находится на панели, панель - еше на чем-то... Т.е. нужно рекурсивно перебирать дочерние окна главного окна до тех пор, пока не найдем окно нужной кнопки. Затем нужно на кнопку нажать, т.е. послать этому окну сообщение ОС (функция API SendMessage), соответствующее нажатию кнопки. Что-то похожее на WM_LBUTTONDOWN Лучше всего поискать готовые примеры в сети. -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| viktorst |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 12.12.2009 Репутация: нет Всего: нет |
tol05. спс за ссылки, тока с английским не дружу. у меня есть русский MSDN почитал там но что то ниче не понял. вот код
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Diagnostics; using System.Runtime.InteropServices; namespace crack { public partial class Form1 : Form { public class Win32 { [DllImport("user32.dll")] public static extern void keybd_event(Keys bVk, byte bScan, UInt32 dwFlags, IntPtr dwExtraInfo); } public const UInt32 KEYEVENTF_EXTENDEDKEY = 1; public const UInt32 KEYEVENTF_KEYUP = 2; string filename; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { string s = ""; int i=0; int k = Convert.ToInt32(textBox2.Text); for (i = Convert.ToInt32(textBox1.Text); i <= k; i++) { Process pr = Process.Start(filename); } } private void button2_Click(object sender, EventArgs e) { openFileDialog1.ShowDialog(); filename = openFileDialog1.FileName; textBox3.Text = filename; } private void button3_Click(object sender, EventArgs e) { Close(); } } } дык вот, мне нужно получить имя формы при открытиии процесса и получить контролы на этой форме. если можно то и способ работы с контроломи можно описать. заранее известно что контролы на форме это кнопки и текстбоксы. и напоминаю что открывающаяся форма не является моей. |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
вот две ссылки
раз два первая сссылка - показывает как найти процесс вторая ссылка - как послать сообщение окну От Вас требуется: найти дескриптор главного окна и передать его в FindWindow(). Получите дочернее окно. Если это дочернее окно - не кнопка (по классу окна смотреть), то дескриптор этого дочернего окна передать в FindWindow(), найти дочернее окно второго уровня. И т.п. рекурсивно пока не найдете окно, представляющее кнопку. Этому окну и шлете message вот пример как это делается -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |