Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Как с помощью Скрипта С/С++ открывать программу и вносить в нее изменентя (http://forum.oszone.net/showthread.php?t=288419)

anatolii_fedorov@vk 24-09-2014 18:17 2406626

Как с помощью Скрипта С/С++ открывать программу и вносить в нее изменентя
 
Посоветуйте что-то или помогите решить следующую задачу, для меня это абсолютно ново:

Есть программа, которая работает с электронными устройствами защит (SOFT):

- необходимо ее запускать (путь - C:\Programm Files\SOFT\soft.exe);
- программа имеет структуру проводника Windows, необходимо обратиться к одному из каталогов в дереве (Project\North Region\Substation);
- внутри этого каталога находится устройство защиты (иконка - Device);
- если ее открыть вручную, то открывается окно в котором необходимо выбрать вариант связи с устройством (например - Ethernet).

Для начала хотя бы эти шаги, может быть на примере с какой-то другой программой.
Спасибо.

mrcnn 24-09-2014 22:10 2406706

Сомневаюсь, что задача решается на VBS, а на C ее решить возможно.
Запуск делает функция system(путь)
1. Получение HWND запускаемой программы (поиск перечислением процессов)
2. Получение HWND контролов, которые есть в программе
Делается имитация выбора(в зависимости от того, какой контрол)

Coutty 25-09-2014 05:30 2406781

Для подобных целей создали скриптовый язык AutoIT. Почитайте документацию - там есть конкретные примеры как сделать "Запуск программы, ожидание открытия окна, совершение действий".

anatolii_fedorov@vk 25-09-2014 10:41 2406854

Вопрос по 1 и 2, как выполняется получение этого HWND и поиск. Если знаете может ссылку на пример...

Iska 25-09-2014 10:58 2406860

anatolii_fedorov@vk, начните с прочтения локализованной документации AutoIt. Особливо этого:
Заголовки и текст окон (основы)
Заголовки и текст окон (дополнительно)

mrcnn 08-10-2014 10:18 2412514

Пример на С

Код:

#include <windows.h>
#include <stdio.h>

#pragma comment(lib,"user32.lib");
#pragma comment(lib, "kernel32.lib");
#pragma comment(lib, "gdi32.lib");

BOOL CALLBACK eproc2(HWND hwnd, LPARAM l)
{
char c[1024];
printf("eproc2: %x\t", hwnd);
GetWindowText(hwnd, c,1020);
printf("%s\n", c);
return 1;
}

BOOL CALLBACK eproc1(HWND hwnd, LPARAM l)
{
LPARAM l1;
char c[1024];
printf("eproc1: %x\t", hwnd);
GetWindowText(hwnd, c, 1020);
printf("%s\n", c);
EnumChildWindows(hwnd, &eproc2, l1);
return 1;
}

int main()
{
LPARAM l;
EnumWindows(&eproc1, l);
}

подобным можно получить хэндл окна и хэндл контролов в окне, а имитацию нажатия можно сделать функцией SendMessage, у которой первым параметром является хэндл окна, вторым тип сообщения, третьим wParam сообщения, четвертым lParam сообщения.

Клик мышью в контроле осуществляется сообщениями WM_LBUTTONDOWN и WM_LBUTTONUP.


Время: 02:39.

Время: 02:39.
© OSzone.net 2001-