|
|
  |
Разработка findcolor, findimage, Pure lua |
|
|
sutra |
1.4.2021, 12:02
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Нашёл я причину моих мытарств, так и заставили штудировать СИ. Код --lua local ffi = require("ffi") local FILE_READ_DATA = 0x1 local FILE_WRITE_DATA = 0x2 local GENERIC_WRITE = 0x40000000 local FILE_SHARE_READ = 0x00000001 local FILE_SHARE_WRITE = 0x00000002 local CREATE_ALWAYS = 0x2 local OPEN_ALWAYS = 4 local FILE_ATTRIBUTE_NORMAL = 0x80 ffi.cdef[[ typedef unsigned long DWORD; typedef DWORD *LPDWORD; typedef void *LPVOID; typedef const void *LPCVOID; bool WriteFile(int hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, int lpOverlapped); int CreateFileA(const char* lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, int lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, int hTemplateFile); bool CloseHandle(int hObject); ]] function saveF(path) local C = ffi.C local s,s2 = "qwertyui" , "asdfghjk" -- local hFile = C.CreateFileA(path, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL,0) local hFile = C.CreateFileA(path, 3, 3, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,0) -- так на мой вгляд правильнее -- local dwWritten = ffi.new('LPDWORD') -- а если разремарить и заремарить строку ниже - смотри дальнейшие комменты local dwWritten = ffi.new'DWORD[1]' log("pass1") C.WriteFile(hFile, s2, 4, dwWritten, 0) log("pass2") -- хрен вам C.WriteFile(hFile, s, 6, dwWritten, 0) log("pass3") -- хрен ещё раз C.CloseHandle(hFile) log("pass4") -- и какого хрена ещё надо, вот и блокировка файла Пилотом end -- кстати если вместо нулей ставить nil, хрен вам покажет сразу сам Пилот saveF([[C:\screen_desktop.txt]])
Cirus, Дарк - спасибо, только благодаря совместным вашим усилиям я победил эту хрень.
|
|
|
|
sutra |
1.4.2021, 14:02
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Цитата почему OPEN_ALWAYS а не CREATE_ALWAYS? Вопрос не ко мне (код cirus). Но насколько я врубался в тему, разницы нет. Криэйт просто перезапишет любой файл однозначно. На существующем опен я не проверял. Код OPEN_ALWAYS 4 Opens a file, always. If the specified file exists, the function succeeds and the last-error code is set to ERROR_ALREADY_EXISTS (183).
If the specified file does not exist and is a valid path to a writable location, the function creates a file and the last-error code is set to zero. Вообще (насколько я понимаю) блочит если не закрывает дескриптор файла. Странно почему у всех по разному. Может от среды обитания зависит? Я всё использую как есть. Может у других что-то плюсом? Отладка, ... винда ... Пилот (у меня 2.41 дек. 2018). Дарк, а что, color быстр? Я принципиально им не пользуюсь. Делаю снимок интересующей меня зоны и работаю ИСКЛЮЧИТЕЛЬНО с образом, так никогда никаких разночтений не будет. Если меня что-то не устраивает - делаю скрин, всё по моему абсолютно логично.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|