Автор Тема: [Интеракция][Окна][Процессы]Работа скрипта как обработчик событий к окну  (Прочитано 10202 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн MnM [?]

  • SoSerious
  • Продвинутый
  • ***
  • Сообщений: 679
  • Репутация: 90
  • Пол: Мужской
  • Post-Hardcore
    • Награды
  • Версия AutoIt: 3.3.12.0
Здравствуйте, прошу помощи для "разжевывания" подобной постановки задачи:
Предположим что мы "нацарапаем" окно в библиотеку dll(используя к примеру ЯП PureBasic), вызывать окно мы научились. Но требуется что бы весь, или хотя бы большая часть функционала обработки окна перешла на плечи AutoIt.

Суть вопроса в том как реализовать общение между dll окном и скриптом AutoIt, допустим что после нажатия на кнопку в окне, dll передаст команду скрипту который тот в свою очередь сделает операции которые уже вписаны в функции. Проблема в реализации так называемого "общения", как передавать от dll до AutoIt сведения что бы выполнить ту или иную команду.

Проблема в написании функции интеракции на PureBasic(Передача функциям параметры) реализовывая команды CreateFileMap_() ; MapViewOfFile_() ; OpenFileMapping_()

Русское сообщество AutoIt


Оффлайн Viktor1703 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1512
  • Репутация: 405
    • Награды
  • Версия AutoIt: 3.3.12.0
PureBasic
Global *proc

Procedure Callback(hWnd, uMsg, lParam, wParam)
  Select hWnd
    Case WindowID(0)
      If *proc
        CallFunctionFast(*proc, hWnd, uMsg, lParam, wParam)
      EndIf 
  EndSelect 
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure 

ProcedureDLL GUI(*func)
  If OpenWindow(0, 0, 0, 300, 200, "", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
    *proc = *func
    SetWindowCallback(@Callback())
    ButtonGadget(1, 20, 20, 80, 20, "test")
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Break
      EndSelect   
    ForEver 
  EndIf
EndProcedure

AutoIt
Код: AutoIt [Выделить]
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WinAPIEx.au3>

$tFunc = DllCallbackRegister('Callback', 'ptr', 'hwnd;uint;wparam;lparam')
GUI(DllCallbackGetPtr($tFunc))
DllCallbackFree($tFunc)

Func Callback($hWnd, $uMsg, $wParam, $lParam)
    Switch $uMsg
        Case $WM_COMMAND
            Switch _WinAPI_LoWord($wParam)
                Case 1 ;~ Наша кнопка на окне
                    Switch _WinAPI_HiWord($wParam)
                        Case $BN_CLICKED
                            MsgBox(0, '', 'Button 1')
                    EndSwitch
            EndSwitch
    EndSwitch
EndFunc

Func GUI($pFunc)
    DllCall('guipb.dll', 'none', 'GUI', 'ptr', $pFunc)
    If @error Then
        Return 0
    EndIf
    Return 1
EndFunc
 


Оффлайн MnM [?]

  • SoSerious
  • Продвинутый
  • ***
  • Сообщений: 679

  • Автор темы
  • Репутация: 90
  • Пол: Мужской
  • Post-Hardcore
    • Награды
  • Версия AutoIt: 3.3.12.0
Viktor1703
Это 2 примера или код PB уже dll, при запуске кода AutoIt окно не появляется

Оффлайн Viktor1703 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1512
  • Репутация: 405
    • Награды
  • Версия AutoIt: 3.3.12.0
Код PB компилируешь в dll, ложишь эту dll рядом со скриптом и запускаешь скрипт на AutoIt, прикрепляю dll и скрипт на AutoIt. Хотя код на том и на том яп не очень правильный, просто пример, и интересно зачем это?
« Последнее редактирование: Июль 28, 2013, 12:45:55 от Viktor1703 »

Русское сообщество AutoIt


Оффлайн MnM [?]

  • SoSerious
  • Продвинутый
  • ***
  • Сообщений: 679

  • Автор темы
  • Репутация: 90
  • Пол: Мужской
  • Post-Hardcore
    • Награды
  • Версия AutoIt: 3.3.12.0
Извиняюсь, просто при компиляции dll'ке имя не то дал :) Спасибо за пример

Оффлайн sims [?]

  • Осваивающий
  • **
  • Сообщений: 184
  • Репутация: 24
  • Пол: Мужской
    • Награды
MnM  [?]
Цитировать
код PB уже dll
Нет. Его компилировать нужно. Файлы в архиве.

Оффлайн MnM [?]

  • SoSerious
  • Продвинутый
  • ***
  • Сообщений: 679

  • Автор темы
  • Репутация: 90
  • Пол: Мужской
  • Post-Hardcore
    • Награды
  • Версия AutoIt: 3.3.12.0
Цитата: sims
Нет. Его компилировать нужно. Файлы в архиве.
Я спрашивал, код является для компиляции в dll или это консольное приложение :)
Цитата: Viktor1703
и интересно зачем это?
Ну PB вроде бы как компилируемый, и работает быстрее если сравнивать с GUI у AutoIt, вот и подумал окошечко в dll сунуть(Хотя наверное правильнее было бы сделать с точностью наоборот :))

Оффлайн Viktor1703 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1512
  • Репутация: 405
    • Награды
  • Версия AutoIt: 3.3.12.0
MnM  [?]
Цитировать
Ну PB вроде бы как компилируемый, и работает быстрее если сравнивать с GUI у AutoIt, вот и подумал окошечко в dll сунуть(Хотя наверное правильнее было бы сделать с точностью наоборот )

Или сразу писать в PB

Русское сообщество AutoIt


Оффлайн MnM [?]

  • SoSerious
  • Продвинутый
  • ***
  • Сообщений: 679

  • Автор темы
  • Репутация: 90
  • Пол: Мужской
  • Post-Hardcore
    • Награды
  • Версия AutoIt: 3.3.12.0
Цитата: Viktor1703
Или сразу писать в PB
Вот не поверите, как узнал про функциональность того языка сразу на нем захотел "калякать", но вот не задача с переходом с AutoIt на PB. Всякие преобразования переменных, еще не такое как в Autoit представление бинарных данных. Вобщем долго мне в нем копаться :'(

Оффлайн Viktor1703 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1512
  • Репутация: 405
    • Награды
  • Версия AutoIt: 3.3.12.0
MnM

А чего в нём копаться, просто ставь типы для переменных, в справке всё есть...

a.l = 3    ; Переменная типа long
b.i = 3    ; переменная типа Int
c.s = "1" ; переменная типа String

Str(a) ; преобразуем переменную типа Long в тип String
Str(b) ; преобразуем переменную типа Int в тип String
Val(c) ; преобразуем переменную типа String в тип Quad
ValD(c) ; преобразуем переменную типа String в тип Double
ValF(c) ; преобразуем переменную типа String в тип Float

Ну и т.д. по PB есть справка почти как в AutoIt, находится в директории вместе с PB.


Добавлено: Июль 28, 2013, 13:49:36
MnM  [?]
Цитировать
еще не такое как в Autoit представление бинарных данных

В каком смысле не такое?

Оффлайн MnM [?]

  • SoSerious
  • Продвинутый
  • ***
  • Сообщений: 679

  • Автор темы
  • Репутация: 90
  • Пол: Мужской
  • Post-Hardcore
    • Награды
  • Версия AutoIt: 3.3.12.0
Цитата: Viktor1703
В каком смысле не такое?
Нуу, например у AutoIt это 0x0... а у PB %... и *... ; @...

Оффлайн Viktor1703 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1512
  • Репутация: 405
    • Награды
  • Версия AutoIt: 3.3.12.0
MnM  [?]
Цитировать
Нуу, например у AutoIt это 0x0... а у PB %... и *... ; @...

У PureBasic будет так $34, * - это указатель например

var=100 ; Запись числа 100 в переменную
*[email protected] ; Поучение адреса переменной
Debug PeekC(*pointer) ; покажет 100

символ @ используется для получения адреса переменной, функции, массива, структуры и т.д. в общем есть справка, форумы, онлайн уроки и т.д.

Оффлайн MnM [?]

  • SoSerious
  • Продвинутый
  • ***
  • Сообщений: 679

  • Автор темы
  • Репутация: 90
  • Пол: Мужской
  • Post-Hardcore
    • Награды
  • Версия AutoIt: 3.3.12.0
Цитата: Viktor1703
есть справка, форумы
Ну так я и роюсь там, но часть информации идет все равно по принципу: "В одно ухо влетает... а из другого вылетает=)"

Оффлайн sims [?]

  • Осваивающий
  • **
  • Сообщений: 184
  • Репутация: 24
  • Пол: Мужской
    • Награды
MnM  [?]
Цитировать
Я спрашивал, код является для компиляции в dll или это консольное приложение
Тот код можно скомпилировать как оконное или консольное приложение, или dll, но наличие ProcedureDLL намекает что это все таки dll.

[?]
Цитировать
Всякие преобразования переменных
Они выполняются компилятором и в большинстве случаев, достаточно типа по умолчанию (по умолчанию это Integer, но можно изменить оператором Define).
В справке перечислены типы переменных и их размерность (число байт). http://purebasic.com/documentation/reference/variables.html

[?]
Цитировать
Нуу, например у AutoIt это 0x0... а у PB %... и *... ; @...
% это либо деление по модулю, или признак числа, записанного в двоичной системе счисления.
* это переменная - указатель на память. В место нее вполне сгодится переменная типа Integer, кроме случая, указателя на структуру.
@ это получение указателя переменной, процедуры, массива, связанного списка, структуры и т. д. http://pure-basic.narod.ru/docs/point.html

Оффлайн AZJIO [?]

  • VIP
  • *
  • Сообщений: 2718
  • Репутация: 1138
    • мой сайт
    • Награды
  • Версия AutoIt: 3.3.8.1
MnM
Учти что он платный. Хотя если зарабатывать на нём, то наверно заработаешь быстрее и хватит на то, что бы его купить и ещё останется.

Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
15 Ответов
9159 Просмотров
Последний ответ Февраль 24, 2010, 19:27:11
от snoitaleR
5 Ответов
3585 Просмотров
Последний ответ Июнь 12, 2011, 23:29:40
от Zaramot
20 Ответов
7016 Просмотров
Последний ответ Январь 19, 2012, 02:48:41
от Viktor1703
8 Ответов
3455 Просмотров
Последний ответ Апрель 28, 2012, 00:49:45
от running-frag
8 Ответов
2924 Просмотров
Последний ответ Март 17, 2014, 09:27:06
от freed21
5 Ответов
1512 Просмотров
Последний ответ Май 02, 2015, 22:02:38
от inververs
2 Ответов
2593 Просмотров
Последний ответ Сентябрь 13, 2015, 14:14:15
от CreatoR
4 Ответов
3171 Просмотров
Последний ответ Апрель 19, 2017, 02:39:34
от Alofa
2 Ответов
582 Просмотров
Последний ответ Октябрь 06, 2017, 13:37:59
от ololo1215
0 Ответов
61 Просмотров
Последний ответ Май 11, 2018, 04:06:32
от Drinkins