Войти

Показать полную графическую версию : Как с помощью Скрипта С/С++ открывать программу и вносить в нее изменентя


anatolii_fedorov@vk
24-09-2014, 18:17
Посоветуйте что-то или помогите решить следующую задачу, для меня это абсолютно ново:

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

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

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

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

Coutty
25-09-2014, 05:30
Для подобных целей создали скриптовый язык AutoIT (http://forum.oszone.net/forum-103.html). Почитайте документацию - там есть конкретные примеры как сделать "Запуск программы, ожидание открытия окна, совершение действий".

anatolii_fedorov@vk
25-09-2014, 10:41
Вопрос по 1 и 2, как выполняется получение этого HWND и поиск. Если знаете может ссылку на пример...

Iska
25-09-2014, 10:58
anatolii_fedorov@vk, начните с прочтения локализованной документации AutoIt (http://autoit-script.ru/autoit3_docs/index.htm). Особливо этого:
Заголовки и текст окон (основы) (http://autoit-script.ru/autoit3_docs/intro/windowsbasic.htm)
Заголовки и текст окон (дополнительно) (http://autoit-script.ru/autoit3_docs/intro/windowsadvanced.htm)

mrcnn
08-10-2014, 10:18
Пример на С


#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.




© OSzone.net 2001-2012