76

Re: Вызов WinAPI функций в Lua

Сделал сборку для QUIK 8.5 (Lua 5.3).
Ссылки в первом сообщении.


toxa пишет:

и, чтобы два раза не вставать, добавьте GetCurrentProcessId()

GetCurrentProcessId() добавлена.

77

Re: Вызов WinAPI функций в Lua

Для QUIK версий 6.x и 7.x берём файл из каталога x32
Для QUIK версий 8.0..8.4 берём файл из каталога x64-Lua51
Для QUIK версий 8.5 и последующих берём файл из каталога x64-Lua53

Здравствуйте.
В каталоге по ссылке в первом сообщении увидел только х32 и х64.
Видимо осталась старая ссылка.

78

Re: Вызов WinAPI функций в Lua

Специально только что скачал файл по ссылке с данного сайта (из первого сообщения).
Файл называется w32.dll.zip, от 19.05.2020, размер 436 846 байт.
В этом архиве 3 папки:
x32
x64-Lua51
x64-Lua53

Так что всё на месте.
Я думаю у вас браузер закешировал скачку и не скачивает заново. Попробуйте другим браузером скачать, или предварительно перед скачиванием удалите файл с указанным именем из того места, куда производится скачивание.

79

Re: Вызов WinAPI функций в Lua

Да, действительно. С другого браузера все скачалось.

Спасибо.

80

Re: Вызов WinAPI функций в Lua

Здравствуйте.
Подскажите, как правильно использовать CreateProcess.
Пытаюсь запустить exe файл, который в свою очередь открывает и закрывает txt файлы для записи и чтения.
pp=getScriptPath().."\\myfile.exe";
w32.CreateProcess(pp,nil,nil,nil,0,0,nil,StartUpInfo, ProcessInfo);
В таком виде все работает. Можно запускать и останавливать скрипт сколь угодно раз. Но если закрыть и открыть квик и запустить скрипт, то txt файлы оказываются заняты другим процессом. Если удалить и добавить скрипт - все опять работает.
Возможно, необходимо воспользоваться
CloseHandle(hThread); // закрываем дескриптор процесса
CloseHandle(hProcess); // закрываем дескриптор потока
hThread и hProcess находятся в ProcessInfo. Как его получить?
Может я думаю не в том направлении?
Подскажите пожалуста.

81

Re: Вызов WinAPI функций в Lua

Вопрос закрыт.

82

Re: Вызов WinAPI функций в Lua

fin, было бы очень здорово, если бы вы поделились результатами и описанием того, как вы решили проблему.

83

Re: Вызов WinAPI функций в Lua

swerg пишет:

fin, было бы очень здорово, если бы вы поделились результатами и описанием того, как вы решили проблему.

Путь необходимо было прописать в двух местах
pp=getScriptPath().."\\Myfile.exe";
ppp=getScriptPath();
rez = w32.CreateProcess(pp,"","","",1,0,"",ppp,"", ProcessInfo);
Надеюсь кому-то поможет.
Все работает, но хотелось бы что бы в обратную сторону rez был ввиде таблицы (сейчас rez=1.0) с информацией от ProcessInfo, которая необходима и для CloseHandle и для TerminateProcess, может и для других функций. Причем, это не мои желания, это стандартный функционал самой ф-ции CreateProcess.

84

Re: Вызов WinAPI функций в Lua

swerg пишет:

GetCurrentProcessId() добавлена.

А как её использовать, например для автологина? Чтобы вводить пароль в правильном экземпляре Квик.

85

Re: Вызов WinAPI функций в Lua

Сравнивать с GetWindowThreadProcessId()

86 (2020-05-24 21:41:01 отредактировано swerg)

Re: Вызов WinAPI функций в Lua

fin пишет:

но хотелось бы что бы в обратную сторону rez был ввиде таблицы (сейчас rez=1.0) с информацией от ProcessInfo

Эта функция возвращает несколько параметров:

res, hProcess, hThread, dwProcessId, dwThreadId = w32.CreateProcess(...)

res равно либо 1 либо 0,
Если res == 1, то остальные параметры заполняются как раз значениями из lpProcessInformation.
Если res == 0, то остальные параметры заполняются nil.

87

Re: Вызов WinAPI функций в Lua

res, hProcess, hThread, dwProcessId, dwThreadId = w32.CreateProcess(...)

Спасибо.

88

Re: Вызов WinAPI функций в Lua

toxa пишет:

Сравнивать с GetWindowThreadProcessId()

GetWindowThreadProcessId возвращает не PID процесса info.exe

89

Re: Вызов WinAPI функций в Lua

Возвращает pid процесса, которому принадлежит окно. Вы же не ожидаете, что билл гейтс лично запрограммирует специальную функцию для обнаружения окна логина какого-то там  говнософта из новосибирска? wink

90

Re: Вызов WinAPI функций в Lua

Вы же сами написали:

toxa пишет:

Сравнивать с GetWindowThreadProcessId()

Сравнивал с

w32.GetWindowThreadProcessId(w32.FindWindow("InfoClass", ""))

Если не правильно, напишите, что с чем сравнивать.

91 (2020-06-01 22:17:35 отредактировано swerg)

Re: Вызов WinAPI функций в Lua

w32.GetWindowThreadProcessId оказывается тоже 2 параметра возвращает:

threadId, processId = w32.GetWindowThreadProcessId(handleWondow)

CyberTrader, вам нужно брать второе возвращаемое значение.

За одно обновил сборку win32 на сайте, w32.GetWindowThreadProcessId() теперь возвращает целочисленные значения, для удобства в Lua5.3

92 (2020-06-03 01:08:17 отредактировано CyberTrader)

Re: Вызов WinAPI функций в Lua

swerg, спасибо.

Поскольку были жалобы, на всякий сделал проверку, то ли окно мы нашли:

  local PID = w32.GetCurrentProcessId()
  while run do
    hQUIK = w32.FindWindow('InfoClass', '')
    if select(2, w32.GetWindowThreadProcessId(hQUIK)) == PID then
      break
    else sleep(50) end
  end

В чужом окне уже не должен вводить пароль.

93

Re: Вызов WinAPI функций в Lua

Есть ли в библиотеке функции работы с системным буфером обмена? Если нет, планируете ли добавить?

94

Re: Вызов WinAPI функций в Lua

wmit пишет:

Есть ли в библиотеке функции работы с системным буфером обмена? Если нет, планируете ли добавить?

А какие конкретно функции требуются? Напишите, да и добавим, если нужно.

95

Re: Вызов WinAPI функций в Lua

swerg пишет:

А какие конкретно функции требуются? Напишите, да и добавим, если нужно.

Удобно копировать значение из таблиц quik и вставлять в свои таблицы.
В доске опционов делаем Ctrl+c на ячейке с кодом опциона, в программируемой таблице выделяем нужную ячейку и жмем Ctrl+v, а в SetTableNotificationCallback обрабатываем событие Ctrl+v и вызываем соответствующую функцию w32, например:
res = w32.Ctrl_V()
SetCell(id, r, c, res)