Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> имя формы C#, получение имени формы из имени процесса 
:(
    Опции темы
viktorst
Дата 13.12.2009, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 12.12.2009

Репутация: нет
Всего: нет



Здраствуйте читатели форума. есть такая задача: открыть форму (не свою), нажать на ней кнопку. Я написал открытие через Procces так как есть exe - шник. подскажите как можно получить имя открывшейся формы и список контролов на ней. а так же как программно нажать кнопку. как нажать клавишу на клавиатуре я уже нашел через API, тоесть через неуправляемый код ( во всяком случае так он называется в MSDN). кстати платформа разработки - VS2008, язык С#.
PM MAIL   Вверх
tol05
Дата 13.12.2009, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



ИМХО это нетривиальная задача. 
сразу ссылка на полезный для данных задач сайт

Я бы делал так
Форма - это окно. Кнопка - это тоже окно (в ОС Windows). Т.о. фактически - целевая форма с кнопкой - это Windows окно, содержащее дочернее окно (кнопку). 

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

Затем нужно на кнопку нажать, т.е. послать этому окну сообщение ОС (функция API SendMessage), соответствующее нажатию кнопки. Что-то похожее на WM_LBUTTONDOWN 

Лучше всего поискать готовые примеры в сети.




--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
viktorst
Дата 14.12.2009, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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();
        }
    }
}


дык вот, мне нужно получить имя формы при открытиии процесса и получить контролы на этой форме. если можно то и способ работы с контроломи можно описать. заранее известно что контролы на форме это кнопки и текстбоксы. и напоминаю что открывающаяся форма не является моей.
PM MAIL   Вверх
tol05
Дата 14.12.2009, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



вот две ссылки
раз
два

первая сссылка - показывает как найти процесс
вторая ссылка - как послать сообщение окну

От Вас требуется: найти дескриптор главного окна и передать его в FindWindow(). Получите дочернее окно. Если это дочернее окно - не кнопка (по классу окна смотреть), то дескриптор этого дочернего окна передать в FindWindow(), найти дочернее окно второго уровня. 


И т.п. рекурсивно пока не найдете окно, представляющее кнопку. Этому окну и шлете message

вот пример как это делается



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0402 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.