Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
 С пятницей всех.  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Привет друзья. Как дела?

Какие пятничные темы вы хотели-бы услышать?

(Пятничные темы - любые технологичные. По программированию. Но не срочные. Не продуктовы баги вобщем.)
19 мар 21, 20:46    [22297515]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
Dima T
Member

Откуда:
Сообщений: 15689
Весенние каникулы у детей начинаются. Зефирки учимся жарить на мангале.
19 мар 21, 22:17    [22297536]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
didgik
Member

Откуда:
Сообщений: 968
mayton, интересует запрет повторного запуска проги той же папки. Из другой можно. Главный вопрос - активировать прогу уже запущенную из этой папки.
19 мар 21, 22:20    [22297537]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Создавай в текущей папке .pid файл с кодом текущего процесса.

Да это горбуха.

Сообщение было отредактировано: 22 мар 21, 12:11
19 мар 21, 22:26    [22297538]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
mayton
Member

Откуда: loopback
Сообщений: 51019
Dima T
Весенние каникулы у детей начинаются. Зефирки учимся жарить на мангале.

Разве зефирки жарят? Обычно - сосиски.
19 мар 21, 22:28    [22297539]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
didgik
Member

Откуда:
Сообщений: 968
mayton
Создавай в текущей папке .pid файл с кодом текущего процесса.

А если прога крашнеца и не уберет за собой .pid?
19 мар 21, 22:28    [22297540]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
didgik
Member

Откуда:
Сообщений: 968
mayton
Dima T
Весенние каникулы у детей начинаются. Зефирки учимся жарить на мангале.

Разве зефирки жарят? Обычно - сосиски.

Кстати да. Никогда не понимал этого буржуйского извращения. Или у них зефир другой?
19 мар 21, 22:29    [22297541]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
petrav
Member

Откуда:
Сообщений: 2861
didgik
mayton, интересует запрет повторного запуска проги той же папки. Из другой можно. Главный вопрос - активировать прогу уже запущенную из этой папки.

Ну… Создать именованный мьютекс (уровня системы). Имя мьютекса должно содержать папку запуска. При этом мьютекс нужно захватить при запуске и никогда не нужно отпускать.

А вот переключиться на уже запущенное приложение...
19 мар 21, 22:35    [22297546]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
Dima T
Member

Откуда:
Сообщений: 15689
mayton
Dima T
Весенние каникулы у детей начинаются. Зефирки учимся жарить на мангале.

Разве зефирки жарят? Обычно - сосиски.

Жарят. Все горячее вкуснее чем холодное. Фотки дал бы, но с телефона пишу, не дома, комп дети отжали (((
19 мар 21, 22:35    [22297547]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
petrav
Member

Откуда:
Сообщений: 2861
didgik
mayton
Создавай в текущей папке .pid файл с кодом текущего процесса.

А если прога крашнеца и не уберет за собой .pid?

Если крашнеца... При старте прога должна взять эксклюзивные права на доступ к этому файлу. Если твоя прога крашается, то все ограничения доступа слетают. Как и тот заблокированный мьютекс.
19 мар 21, 22:38    [22297548]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
didgik
Member

Откуда:
Сообщений: 968
petrav
didgik
пропущено...

А если прога крашнеца и не уберет за собой .pid?

Если крашнеца... При старте прога должна взять эксклюзивные права на доступ к этому файлу. Если твоя прога крашается, то все ограничения доступа слетают. Как и тот заблокированный мьютекс.

С мьютексом понятно, не понятно причем тут .pid.
А как активировать уже запущенную прогу по мьютексу?? И да. В винде.
19 мар 21, 22:41    [22297550]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
Dima T
Member

Откуда:
Сообщений: 15689
didgik
petrav
пропущено...

Если крашнеца... При старте прога должна взять эксклюзивные права на доступ к этому файлу. Если твоя прога крашается, то все ограничения доступа слетают. Как и тот заблокированный мьютекс.

С мьютексом понятно, не понятно причем тут .pid.
А как активировать уже запущенную прогу по мьютексу?? И да. В винде.

"Активировать" это что значит в реальной жизни?

Сообщение было отредактировано: 19 мар 21, 22:47
19 мар 21, 22:47    [22297552]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
petrav
Member

Откуда:
Сообщений: 2861
didgik
petrav
пропущено...

Если крашнеца... При старте прога должна взять эксклюзивные права на доступ к этому файлу. Если твоя прога крашается, то все ограничения доступа слетают. Как и тот заблокированный мьютекс.

С мьютексом понятно, не понятно причем тут .pid.

Я не знаю, что это такой за файл .pid. Видимо, что это файл содержащий process id. Имея process id возможно можно определить дескриптор главного окна этого процесса и послать ему что-то типа сообщения WM_SHOW.

Кстати, Process Explorer умеет определять какой процесс держит файл. Так что в файл записывать process id, видимо, не нужно.

didgik
А как активировать уже запущенную прогу по мьютексу?? И да. В винде.

Я не знаю.
19 мар 21, 22:48    [22297553]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
petrav
Member

Откуда:
Сообщений: 2861
Вот только что я запустил программу, которая держит определённый файл.
Потом я запустил Process Explorer. Главное меню: Find -> Find handle or DLL.
По имени файла нашёлся процесс, который держит этот файл.

Дальше ПКМ на этом процессе: Window -> Bring to front. Всё, приложение
активировано на основе пути к файлу, который (файл) держит это приложение.

Как блокировку файла заменить на блокировку глобального мьютекса... Ну...
может можно.
19 мар 21, 22:57    [22297557]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
didgik
Member

Откуда:
Сообщений: 968
Dima T

"Активировать" это что значит в реальной жизни?

Чтоб запущенная прога развернулась с панели задач.

Впрочем, вопрос только в том, как во второй копии получить хендл окна уже запущеной проги из этой же папки.
19 мар 21, 22:57    [22297558]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
petrav
Member

Откуда:
Сообщений: 2861
didgik
Dima T

"Активировать" это что значит в реальной жизни?

Чтоб запущенная прога развернулась с панели задач.

Впрочем, вопрос только в том, как во второй копии получить хендл окна уже запущеной проги из этой же папки.

How to get main window handle from process id?.

Поиск в гугле по: winapi get main window handle for process id.
19 мар 21, 23:04    [22297560]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
didgik
Member

Откуда:
Сообщений: 968
petrav
didgik
пропущено...

Чтоб запущенная прога развернулась с панели задач.

Впрочем, вопрос только в том, как во второй копии получить хендл окна уже запущеной проги из этой же папки.

How to get main window handle from process id?.

Поиск в гугле по: winapi get main window handle for process id.

Тогда вопрос в том, как во второй копии получить process id уже запущеной проги из этой же папки.
19 мар 21, 23:07    [22297561]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
petrav
Member

Откуда:
Сообщений: 2861
didgik
petrav
пропущено...

How to get main window handle from process id?.

Поиск в гугле по: winapi get main window handle for process id.

Тогда вопрос в том, как во второй копии получить process id уже запущеной проги из этой же папки.

Уже всё же сказано.

- В .pid файл записать process id. Но на случай падения приложения нужно держать эксклюзивные права на запись в этот файл.
- Можно держать эксклюзивные права вообще на пустой файл в папке приложения. И по пути к этому файлу определить process id — process explorer так может.
- Можно попробовать по имени мьютекса (который содержит путь к папке) определить process id, который его держит.

Тут есть ещё момент, что на компе может быть авторизовано сразу несколько пользователей. WinAPI неисчерпаем так же как и атом. Это ещё В.И. Ленин говорил.
19 мар 21, 23:17    [22297565]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
didgik
Member

Откуда:
Сообщений: 968
у меня есть ini файл. Наверно можно его заюзать под это дело.
И писать в него pid при запуске.
Т.е. при запуске проги, мы проверяем, есть ли возможность в него писать, если нет, то берем оттуда pid, активируем запущенный экземпляр и закрываемся. И никакие мьютексы не нужны.

Осталось узнать про эксклюзивные права записи. Как ставить и как проверять.

Сообщение было отредактировано: 19 мар 21, 23:22
19 мар 21, 23:28    [22297566]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
petrav
Member

Откуда:
Сообщений: 2861
didgik
у меня есть ini файл. Наверно можно его заюзать под это дело.
И писать в него pid при запуске.
Т.е. при запуске проги, мы проверяем, есть ли возможность в него писать, если нет, то берем оттуда pid, активируем запущенный экземпляр и закрываемся. И никакие мьютексы не нужны.

Осталось узнать про эксклюзивные права записи. Как ставить и как проверять.

При запуске проги пытаемся заблокировать файл на эксклюзивную запись.
Если получилось, то записываем в ini файл pid и запускаемся.

Если не получилось, то пытаемся открыть этот файл на чтение и читаем pid.
Если получилось, читаем pid. По нему получаем HWND и активируем окно. Выходим.

Эксклюзивные права на запись, например, проверяются попыткой получить такие
права. Получил - значит ты хозяин. Документация на функцию ::CreateFile() из WinAPI.
19 мар 21, 23:36    [22297570]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
didgik
Member

Откуда:
Сообщений: 968
о, а может сразу HWND в ини пихать?
19 мар 21, 23:38    [22297571]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
petrav
Member

Откуда:
Сообщений: 2861
didgik
о, а может сразу HWND в ини пихать?

Не знаю. Попробуйте.
19 мар 21, 23:48    [22297576]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

petrav
Эксклюзивные права на запись, например, проверяются *попыткой* получить такие
права. Получил - значит ты хозяин. Документация на функцию ::CreateFile() из WinAPI.

Ага. Прочитать PID из файла, который не удалось открыть. Отличный план.

Может, не стоит маяться дурью с файлом, а сразу искать окно?..

Posted via ActualForum NNTP Server 1.5

20 мар 21, 01:27    [22297594]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
didgik
Member

Откуда:
Сообщений: 968
Dimitry Sibiryakov

petrav
Эксклюзивные права на запись, например, проверяются *попыткой* получить такие
права. Получил - значит ты хозяин. Документация на функцию ::CreateFile() из WinAPI.

Ага. Прочитать PID из файла, который не удалось открыть. Отличный план.

Может, не стоит маяться дурью с файлом, а сразу искать окно?..


Прочитать PID из файла, который не удалось открыть на запись. Читать можно. Я так понял.

А поиск окна я не осилил пока что. В этом и проблема.
20 мар 21, 02:11    [22297597]     Ответить | Цитировать Сообщить модератору
 Re: С пятницей всех.  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10925
Dima T
Все горячее вкуснее чем холодное.
Особенно водка и мороженое.
20 мар 21, 06:06    [22297604]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
Все форумы / C++ Ответить