Что нового

[Автоматизация] [DevC++] Ошибки при компиляции программы на AutoItX3.DLL + C++

id01

Новичок
Сообщения
8
Репутация
0
Есть программа на AutoIt3:

Код:
$hWnd = WinActivate("[CLASS:#32770]")
ControlClick($hWnd,"","Button5")
ControlClick($hWnd,"","Button6")


Работает на 5+, но для полного счастья нужно использовать это в основной программе, для чего и был нагуглен AutoItX3.DLL.

Теперь на С++:

Код:
#include <windows.h>
#include "AutoItX3_DLL.h"

using namespace std;

int main(int argc, char *argv[])
{
    AU3_Init();
   
    HWND hWnd = AU3_WinGetHandle(L"[CLASS:#32770]", L"");
    AU3_WinActivateByHandle(hWnd);
   
    HWND hCtrl = AU3_ControlGetHandle(hWnd, L"Button5");
    AU3_ControlClickByHandle(hWnd, hCtrl, L"LEFT", 1);
   
    hCtrl = AU3_ControlGetHandle(hWnd, L"Button6");
    AU3_ControlClickByHandle(hWnd, hCtrl, L"LEFT", 1);
   
    return 0;
}

Понятия не имею, работает или нет, ибо оно даже не компилируется.

[Linker error] undefined reference to `AU3_Init@0'
[Linker error] undefined reference to `AU3_WinGetHandle@8'
[Linker error] undefined reference to `AU3_WinActivateByHandle@4'
[Linker error] undefined reference to `AU3_ControlGetHandle@8'
[Linker error] undefined reference to `AU3_ControlClickByHandle@24'
[Linker error] undefined reference to `AU3_ControlGetHandle@8'
[Linker error] undefined reference to `AU3_ControlClickByHandle@24'

Ессесна, первым делом гуглил ошибку, но ничего нового или толкового не нашел. AutoItX3_DLL.lib к проекту подключил. В качестве среды использую DevC++. Прикладываю архив с проектом, там файл проекта, исходник, длл и либ файлы. Помогите, пожалуйста.
 

Вложения

  • AutoItX3dll.rar
    173.6 КБ · Просмотры: 3

Prog

Продвинутый
Сообщения
597
Репутация
77
Re: [Автоматизация] Ошибки при компиляции программы на AutoItX3.DLL + C++

Линкер не находит ссылки на функции из DLL.
Раньше не приходилось подключать DLL?
 
Автор
I

id01

Новичок
Сообщения
8
Репутация
0
Re: [Автоматизация] Ошибки при компиляции программы на AutoItX3.DLL + C++

Prog сказал(а):
Линкер не находит ссылки на функции из DLL.
Раньше не приходилось подключать DLL?

Да, это впервые. Я понимаю, что не находит, но я ведь все подключил.
[hide]
Нннничего не понимаю! (с) "Колобки ведут расследование" :smile:
[/hide]
 

Prog

Продвинутый
Сообщения
597
Репутация
77
Re: [Автоматизация] Ошибки при компиляции программы на AutoItX3.DLL + C++

id01 [?]
но я ведь все подключил
AutoItX3_DLL.lib добавили в проект, или где-то в коде есть
Код:
#pragma comment(lib,"AutoItX3_DLL.lib")
 
Автор
I

id01

Новичок
Сообщения
8
Репутация
0
Re: [Автоматизация] Ошибки при компиляции программы на AutoItX3.DLL + C++

Да, я добавил в проект, в настройках проекта.
#pragma comment(lib,"AutoItX3_DLL.lib") не помог, я использую DevC++, а это, по-моему, для MSVS, не так ли?
 

Prog

Продвинутый
Сообщения
597
Репутация
77
Re: [Автоматизация] Ошибки при компиляции программы на AutoItX3.DLL + C++

id01 [?]
для MSVS, не так ли
Да для MSVS. Компилятор не был указан и обычно используют его.
 
Автор
I

id01

Новичок
Сообщения
8
Репутация
0
Re: [Автоматизация] Ошибки при компиляции программы на AutoItX3.DLL + C++

Компилятор не был указан и обычно используют его.

Хммммм.... Ладно, впредь буду всегда указывать компилятор. А что делать-то? Дело уже 4 дня стоит, и все, казалось бы, из-за какой-то мелочи.
 
Автор
I

id01

Новичок
Сообщения
8
Репутация
0
Так я же скинул код. Это все, что есть в проекте, который сейчас не компилируется.
 

Prog

Продвинутый
Сообщения
597
Репутация
77
В проекте кроме кода также lib и dll файлы, которые вы видимо неправильно подключили.
 
Автор
I

id01

Новичок
Сообщения
8
Репутация
0
Вас понял, проект приложил к первому посту.
 

Prog

Продвинутый
Сообщения
597
Репутация
77
Приложение собралось без ошибок. Возможно дело в настройках или версии DevC++, а не в проекте.
 

Вложения

  • AutoItX3dll.rar
    179 КБ · Просмотры: 5
Автор
I

id01

Новичок
Сообщения
8
Репутация
0
Мда уж, это не очень хорошо. Основной проект заточен под верисию DevC++ 4.9.9.2. В других версиях он уже не компилируется, буквально даже в следующей (4.9.9.3) уже не работает. Чем вы собирали и какой версией?
 

Prog

Продвинутый
Сообщения
597
Репутация
77
Собирал в версии 5.11.

Если основной проект не компилируются в других версиях, нужно найти причину этого и устранить ее. Проект не компилируется, или компилируется, но не работает как надо?
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
id01
OffTopic:
Я, видимо, чего-то не понимаю :-[
Если вы знаете C++, зачем вам AutoIt? Нужные вам функции - это несколько строк на WinAPI - найти окно, отправить сообщение :scratch:
 
Автор
I

id01

Новичок
Сообщения
8
Репутация
0
InnI, спасибо! А я и не задумывался над тем, что такое вообще возможно с помощью WinApi! Все написал, работает. Код кривоватый, как по мне, но костыли старался не использовать (если не считать таковым глобальный вектор ;D).

Прилагаю код, все на C++ и прокомментировано.
Код:
#include <windows.h>
#include <string>
#include <vector>

using namespace std;

// Вектор, в который записываются все хендлы окон с классом Button.
vector<HWND> buttons;

BOOL CALLBACK EnumFunc(HWND hWnd, LPARAM lParam) // Коллбэк-функция
{
	char clsName[65];
	GetClassName(hWnd, clsName, 64); // Получение класса по дескриптору
	string strClsName = clsName;
	if (strClsName == "Button") buttons.push_back(hWnd); // Если класс - Button - добавить дескриптор в вектор
        return TRUE;
}

int main(int argc, char *argv[])
{
        HWND hWnd = FindWindow("SciCalc", NULL); // Тренировался на калькуляторе :)
	
	EnumChildWindows(hWnd, EnumFunc, 0); // Данная винапи функция передает дескриптор каждого дечернего окна (относительно переданного в неё дескриптора) в коллбэк-функцию

	SendMessage(buttons[4], BM_CLICK, 0, 0); // Клац!
	SendMessage(buttons[5], BM_CLICK, 0, 0); // Клац! (2)
	//			             ^
	// Здесь указываются instance нужных кнопок, на 1 меньше, ибо нумерация с 0
	
        return 0;
}

И это все ради реализации вот этого кода:
Код:
$hWnd = WinActivate("[CLASS:SciCalc]")
ControlClick($hWnd,"","Button5")
ControlClick($hWnd,"","Button6") // Здесь Button - класс дочернего окна, а 6 - instance


P.s. Всем спасибо, тему можно считать закрытой.
 
Верх