Помогите новичку
-
Да. Обычно static переменные занимают безымянное место в сегменте .data
Вопрос про shared memory:
Если я сначала создам именованную память,
а потом в этом же потоке её опять открою,
то нужно два раза закрывать её?
Указатели же разные возвращаются.
Вопрос про OpenDialog:
В wiki я читал, конечно, но там не полное
описание. Собственно, хотелось бы узнать
описание того, чего там нет.
Я использовал его в своей программе, которая
делает скриншот. Так как, я не совсем разобрался,
я немного изменил пример из wiki и скомпилировал его.
Потом, при сохранении скриншота в файл, я из своей
программы запускаю этот изменённый скомпилированный пример.
Передаю ему в качестве параметра имя созданной shared memory,
и через неё программы общаются.
Ещё такой вопрос:
В эмуляторе на моём скриншоте иногда заметны артефакты
неперерисовавшегося окна(оно сворачивается, и потом делается скриншот).
Каким образом можно подождать, пока окно свернётся?
так выглядит моя программа:

Если я сначала создам именованную память,
а потом в этом же потоке её опять открою,
то нужно два раза закрывать её?
Указатели же разные возвращаются.
Вопрос про OpenDialog:
В wiki я читал, конечно, но там не полное
описание. Собственно, хотелось бы узнать
описание того, чего там нет.
Я использовал его в своей программе, которая
делает скриншот. Так как, я не совсем разобрался,
я немного изменил пример из wiki и скомпилировал его.
Потом, при сохранении скриншота в файл, я из своей
программы запускаю этот изменённый скомпилированный пример.
Передаю ему в качестве параметра имя созданной shared memory,
и через неё программы общаются.
Ещё такой вопрос:
В эмуляторе на моём скриншоте иногда заметны артефакты
неперерисовавшегося окна(оно сворачивается, и потом делается скриншот).
Каким образом можно подождать, пока окно свернётся?
так выглядит моя программа:

Для OpenDialog не надо ничего руками делать. Давно уже все через библиотеку Proc_Lib сделано. Смотри программы которые используют OpenDialog.
Насчет именованной памяти как то сумбурно излагаешь. Если обращаешься по одному имени то и получаешь одну и ту же область. Может ли она быть дважды смонтирована по разным адресам я не знаю. Таких опытов не ставил. Лучше в вопросах приводить свои куски кода иначе малопонятно что подразумевалось.
Насчет именованной памяти как то сумбурно излагаешь. Если обращаешься по одному имени то и получаешь одну и ту же область. Может ли она быть дважды смонтирована по разным адресам я не знаю. Таких опытов не ставил. Лучше в вопросах приводить свои куски кода иначе малопонятно что подразумевалось.
0CodErr
Да, надо закрывать два раза. Но если ты этого не сделаешь, ядро закроет всё само при завершении потока.
Да, надо закрывать два раза. Но если ты этого не сделаешь, ядро закроет всё само при завершении потока.
Serge
Т.е. она два раза примонтируется по разным адресам?
Т.е. она два раза примонтируется по разным адресам?
Mario
Да. Физически это всё равно одна область памяти.
Да. Физически это всё равно одна область памяти.
Mario
У меня проблема с фильтром OpenDialog.
Так не работает:
Filter dd Filter.end - Filter.1
.1:
db 'BMP',0
.end:
db 0
А так работает:
Filter dd Filter.end - Filter.1
.1:
db 'BMP',0
db 'BMP',0
.end:
db 0
В процессе работы программы
никаких действий с фильтром я не произвожу.
В чём может быть причина?
Ещё про мышь:
Получение данных прокрутки
с помощью функции 37.7 доступно только активному окну.
А если очень хочется, то как-нибудь можно их получить не
только активному окну? Я хочу, чтобы моя программка-информер(на скриншоте)
показывала и данные прокрутки.
Функция 37.7 возвращает и вертикальное, и горизонтальное смещение.
Но если мышь трёхкнопочная, тогда, получается, смещение может быть
только вертикальным, а горизонтальное неопределено?
Можно ли определить, какое количество кнопок у мыши?
А если мышь имеет больше 5-ти кнопок? Тогда нужен другой драйвер или как?

У меня проблема с фильтром OpenDialog.
Так не работает:
Filter dd Filter.end - Filter.1
.1:
db 'BMP',0
.end:
db 0
А так работает:
Filter dd Filter.end - Filter.1
.1:
db 'BMP',0
db 'BMP',0
.end:
db 0
В процессе работы программы
никаких действий с фильтром я не произвожу.
В чём может быть причина?
Ещё про мышь:
Получение данных прокрутки
с помощью функции 37.7 доступно только активному окну.
А если очень хочется, то как-нибудь можно их получить не
только активному окну? Я хочу, чтобы моя программка-информер(на скриншоте)
показывала и данные прокрутки.
Функция 37.7 возвращает и вертикальное, и горизонтальное смещение.
Но если мышь трёхкнопочная, тогда, получается, смещение может быть
только вертикальным, а горизонтальное неопределено?
Можно ли определить, какое количество кнопок у мыши?
А если мышь имеет больше 5-ти кнопок? Тогда нужен другой драйвер или как?

Хотет такую прогу для мышки. Её чуть-чуть допилить - и будет годный модуль для ПО настройки системы.
Подробнее пиши, что за мышь, подключена к какому порту, используется ли переходник и т.п. CleverMouse пишет драйвер ЮСБ где-то в том форуме viewforum.php?f=30
Там есть фича небольшая/:0CodErr wrote:У меня проблема с фильтром OpenDialog.
1) Когда фильтрации нет (т.е. в обоих случаях доступны все расширения файлов), то надо писать:
Spoiler:
Code: Select all
Filter:
dd Filter.end - Filter.1
.1:
;db 'BIN',0
;db 'DAT',0
.end:
db 02) А вот когда фильтрация есть нужно писать:
Spoiler:
Code: Select all
Filter:
dd Filter.end - Filter
.1:
db 'TXT',0
db 'ASM',0
db 'INC',0
db 'MAC',0
db 'DBG',0
db 'INI',0
db 'LOG',0
db 'DAT',0
db 'INF',0
db 'BAT',0
db 'SH',0
.end:
db 0Это не логично - ради одной программы менять логику всех остальных. Конечно правильно написанные программы фильтруют события мыши, если они не активны и специально не задумывалась обработка мыши в фоновом режиме. Однако это создаст дополнительную нагрузку на всю систему во время работы, если такое событие будет приходить ко всем приложениям. Небольшую нагрузку конечно, но все же.0CodErr wrote: Получение данных прокрутки с помощью функции 37.7 доступно только активному окну. А если очень хочется, то как-нибудь можно их получить не
только активному окну? Я хочу, чтобы моя программка-информер(на скриншоте)
показывала и данные прокрутки.
Если так уж сильно необходимо, то нужно доделывать ядро, а этим заниматься некому кроме автора пожелания.
Нужно провести опыт - подключить мышь с одним скроллером и посмотреть. Оно либо будет дублировать данные, либо не будет выдавать ничего.0CodErr wrote: Функция 37.7 возвращает и вертикальное, и горизонтальное смещение. Но если мышь трёхкнопочная, тогда, получается, смещение может быть
только вертикальным, а горизонтальное неопределено?
Нет, функции возвращающей тип мыши не было предусмотрено. Ранее в этом не было необходимости. Более того поскольку несколько мышей могут работать параллельно (com1 + com2 + ps2), то получается нужно иметь функцию выводящую список всех подключенных мышей с их типами. Такой функционал в ядре требует дополнительного кода и доделывания всех драйверов мышей (com и ps2)0CodErr wrote: Можно ли определить, какое количество кнопок у мыши?
Текущий драйвер мыши ps2, не позволяет иметь более 5 кнопок и 2-х скроллеров. Если мышь слишком нестандартная и требует специальных драйверов, то естественно будет работать только базовый функционал: перемещение и две кнопки.0CodErr wrote: А если мышь имеет больше 5-ти кнопок? Тогда нужен другой драйвер или как?
Вот, предположим, у потока есть дочерний поток.
В некоторый момент из родительского потока вызывается функция 18.18, чтобы
завершить дочерний поток. А дальше идёт ещё какой-нибудь код.
Так вот, может ли этот код начать выполняться до завершения дочернего потока?
Если окно не помещается на экране, то меняются ли его размеры и координаты,
или же оно только так рисуется, чтобы уместиться?
Как можно сделать, чтобы окно не реагировало на события мыши,
если над ним другое окно(либо частично перекрывается)?
Хотелось бы обрабатывать события даже если окно не активно.
Я хочу сделать панель для запуска программ.
Она читает список этих программ из файла(можно добавлять в него другие).

В некоторый момент из родительского потока вызывается функция 18.18, чтобы
завершить дочерний поток. А дальше идёт ещё какой-нибудь код.
Так вот, может ли этот код начать выполняться до завершения дочернего потока?
Если окно не помещается на экране, то меняются ли его размеры и координаты,
или же оно только так рисуется, чтобы уместиться?
Как можно сделать, чтобы окно не реагировало на события мыши,
если над ним другое окно(либо частично перекрывается)?
Хотелось бы обрабатывать события даже если окно не активно.
Я хочу сделать панель для запуска программ.
Она читает список этих программ из файла(можно добавлять в него другие).

Замечательное дело делаешь. Только мое видение - вид панели должен быть настраиваемым.
Текущая панель меняет рабочую область экрана, кстати. Это может помочь.
По поводу 18.18:
Если не прав, ядерщики меня поправят.
Текущая панель меняет рабочую область экрана, кстати. Это может помочь.
По поводу 18.18:
Отсюда делаем вывод: не может.Подфункция 18 - завершить процесс/поток по идентификатору.
Возвращаемое значение:
eax = 0 - успешно
eax = -1 - ошибка (процесс не найден или является системным)
Если не прав, ядерщики меня поправят.
0CodErr
18.18 может. Функция гарантирует только что завершаемый поток не получит управления. Небольшая задержка поможет делу. Надо учитывать что в Колибри уничтожение любого потока и освобождение связанных с ним ресурсов происходит в контексте системного потока OS_IDLE и является отложенной операцией. Автоматически закрываются только привязанные к потоку ресурсы: расшареная память, курсоры и звуковые буферы. Память выделенная 68.12 не освобождается до завершения всех потоков приложения.
18.18 может. Функция гарантирует только что завершаемый поток не получит управления. Небольшая задержка поможет делу. Надо учитывать что в Колибри уничтожение любого потока и освобождение связанных с ним ресурсов происходит в контексте системного потока OS_IDLE и является отложенной операцией. Автоматически закрываются только привязанные к потоку ресурсы: расшареная память, курсоры и звуковые буферы. Память выделенная 68.12 не освобождается до завершения всех потоков приложения.
Думается мне нужно сделать задержку 0,01 * 256 = 2,56 секунды, чтобы уж совсем надежно.
Who is online
Users browsing this forum: No registered users and 1 guest