bomzzz Почитай это: Ссылка Может, что-то прояснится.
» Вопросы по программированию на C/С++
bomzzz
Цитата:
Зачем? Программа по идее здесь должна только ответить, можно системе завершаться или нет.
Идеология работы системы такова:
Сначала система рассылает сообщения WM_QUERYENDSESSION, запрашивая все ли программы готовы к закрытию. А после этого посылает WM_ENDSESSION, сообщая, решила она завершаться или нет (смотри wParam). И вот в обработчике WM_ENDSESSION и должно пройти всё завершение работы без лишних вопросов. Как только обработчик отработал - всё, программа завершена. Так что запуск отдельного потока здесь как не пришей кобыле хвост.
Цитата:
пришло сообщение WM_QUERYENDSESSION окно запускает тред завершающий обработку и сбрасывающие данные на диск.
Зачем? Программа по идее здесь должна только ответить, можно системе завершаться или нет.
Идеология работы системы такова:
Сначала система рассылает сообщения WM_QUERYENDSESSION, запрашивая все ли программы готовы к закрытию. А после этого посылает WM_ENDSESSION, сообщая, решила она завершаться или нет (смотри wParam). И вот в обработчике WM_ENDSESSION и должно пройти всё завершение работы без лишних вопросов. Как только обработчик отработал - всё, программа завершена. Так что запуск отдельного потока здесь как не пришей кобыле хвост.
это я прочитал - единственное что есть на русском , ниче не прояснилось.
Добавлено:
Цитата:
говорю же не завершается. на практике проверено
Добавлено:
WM_QUERYENDSESSION - как только на это ответил единица все дальше ниче не происходит. можно сделать только так на WM_QUERYENDSESSION закончить приложение и ответить 0 - пошло дальше
Добавлено:
Цитата:
приложение так работает, пришей не пришей от этого никуда не деться
Добавлено:
а блин ступил - вернуть то 1 надо.
вот работает
Цитата:
или так без разницы
Цитата:
Добавлено:
Цитата:
Как только обработчик отработал - всё, программа завершена.
говорю же не завершается. на практике проверено
Добавлено:
WM_QUERYENDSESSION - как только на это ответил единица все дальше ниче не происходит. можно сделать только так на WM_QUERYENDSESSION закончить приложение и ответить 0 - пошло дальше
Добавлено:
Цитата:
запуск отдельного потока здесь как не пришей кобыле хвост.
приложение так работает, пришей не пришей от этого никуда не деться
Добавлено:
а блин ступил - вернуть то 1 надо.
вот работает
Цитата:
.ELSEIF uMsg == WM_QUERYENDSESSION
mov eax, 1
ret
.ELSEIF uMsg == WM_ENDSESSION
mov SHUTDOWNFLAG, 9988
mov eax,offset EXITProc
invoke CreateThread,NULL,NULL,eax,0,0,addr ThreadID1
mov ThreadID1, eax
invoke CloseHandle, ThreadID1
invoke Sleep, 5000
или так без разницы
Цитата:
.ELSEIF uMsg == WM_QUERYENDSESSION
mov SHUTDOWNFLAG, 9988
mov eax,offset EXITProc
invoke CreateThread,NULL,NULL,eax,0,0,addr ThreadID1
mov ThreadID1, eax
invoke CloseHandle, ThreadID1
invoke Sleep, 5000
mov eax, 1
ret
bomzzz
Цитата:
Месье знает толк в извращениях.
Тогда хоть жди завершения потока через WaitForSingleObject, а не через Sleep. Лишних тормозов не будет.
Цитата:
приложение так работает, пришей не пришей от этого никуда не деться
Месье знает толк в извращениях.
Тогда хоть жди завершения потока через WaitForSingleObject, а не через Sleep. Лишних тормозов не будет.
ага идея, а то думал еще один флаг влепить. пока добился что вообще работает.
ну а как без треда сделать интернет может зависнуть - представь браузер страница зависла и ни одна кнопка не отвечает
ну а как без треда сделать интернет может зависнуть - представь браузер страница зависла и ни одна кнопка не отвечает
Цитата:
ну а как без треда сделать интернет может зависнуть - представь браузер страница зависла и ни одна кнопка не отвечает
Что вы хотите этим сказать?
ну я бы тебе на даунлоад мастере показал, да в последних версиях исправили по заявкам радиослушателей, как окно зависает
Я имею в виду, что мешает использовать ассинхронный/неблокирующий ввод-вывод?
ассинхронный и есть тред. сейчас с ходу уже не могу вспомнить почему меня ассинхронный не устроил, но если писать на слотах все равно не обойтись без треда - от варианта слотов пришлось отказаться потому что я не был уверен, что обеспечил все необходимое для обработки хттп протокола. но в любом случае - окно это просто картинка с кнопашками, и если еще на все кнопки обработку вешать оно постоянно подвисать будет, а если все на тредах сделать картинка отлично работкает
Abs62
Цитата:
отлично работкаит даже на моем иде винте 2 мб спуливает незаметно для выключения
Добавлено:
только вот такой прикол - система ждет так не больше чем указано в реестре ждать и больше 60 мб оно так спулить не успевает. а вот если все сделать в WM_QUERYENDSESSION тогда ждет ровно столько сколько надо - но тогда если приложение зависнет и винда не выключиться
Добавлено:
еще такая фигня в лпараметре передается причина системной остановки и одна из причин LOGOFF, когда меняешь юзера прогрмаммы не закрываются, и не смотря на отсутствие проверки по поводу причины на смену юзера так тоже не останавливается приложение
Цитата:
.ELSEIF uMsg == WM_QUERYENDSESSION
mov eax, 1
ret
.ELSEIF uMsg == WM_ENDSESSION
mov SHUTDOWNFLAG, 9988
mov eax,offset EXITProc
invoke CreateThread,NULL,NULL,eax,0,0,addr ThreadID1
mov ThreadID1, eax
;invoke CloseHandle, ThreadID1
;invoke Sleep, 5000
invoke WaitForSingleObject,ThreadID1,5000
invoke WaitForSingleObject,ThreadID,5000
отлично работкаит даже на моем иде винте 2 мб спуливает незаметно для выключения
Добавлено:
только вот такой прикол - система ждет так не больше чем указано в реестре ждать и больше 60 мб оно так спулить не успевает. а вот если все сделать в WM_QUERYENDSESSION тогда ждет ровно столько сколько надо - но тогда если приложение зависнет и винда не выключиться
Добавлено:
еще такая фигня в лпараметре передается причина системной остановки и одна из причин LOGOFF, когда меняешь юзера прогрмаммы не закрываются, и не смотря на отсутствие проверки по поводу причины на смену юзера так тоже не останавливается приложение
никто не знает как LOGOFF вызвать, у меня правда пользователь всего один может поэтому - получается только через эмуляцию нажатия WINDOWS+L ???
bomzzz
ExitWindowsEx с флагом EWX_LOGOFF.
ExitWindowsEx с флагом EWX_LOGOFF.
значит у меня чета октлючена. спс
Добавлено:
http://zalil.ru/32032645
перезагрузка происходит. может из за того что пользователь один. win+l работает
Добавлено:
http://zalil.ru/32032645
перезагрузка происходит. может из за того что пользователь один. win+l работает
bomzzz
Цитата:
Тогда смотри функцию LockWorkStation - по Win+L она и вызывается.
PS. Только имей в виду, что это не logoff - это именно блокировка сеанса.
Цитата:
win+l работает
Тогда смотри функцию LockWorkStation - по Win+L она и вызывается.
PS. Только имей в виду, что это не logoff - это именно блокировка сеанса.
щас попробую, но я вроде пробовал это
Добавлено:
гыгы , работкаит!
спасипки. как то криво гуглил наверно
Добавлено:
а вот в чем дело - я неправильно думал как это называется. в винде написано "смена пользователя" ну я и подумал что это лог оф
Добавлено:
странно вот эта кнопка работает, а логофф нет
Цитата:
Добавлено:
гыгы , работкаит!
спасипки. как то криво гуглил наверно
Добавлено:
а вот в чем дело - я неправильно думал как это называется. в винде написано "смена пользователя" ну я и подумал что это лог оф
Добавлено:
странно вот эта кнопка работает, а логофф нет
Цитата:
invoke RtlAdjustPrivilege,13h,1h,0h,esp
invoke ExitWindowsEx, EWX_REBOOT OR EWX_FORCEIFHUNG, 0
bomzzz
Цитата:
Дык, ребут - он и в Африке ребут. Выход - это EWX_LOGOFF.
Цитата:
invoke ExitWindowsEx, EWX_REBOOT OR EWX_FORCEIFHUNG, 0
Дык, ребут - он и в Африке ребут. Выход - это EWX_LOGOFF.
никто не делал на сокетах хттп прокси? чета не получается.
имеется ввиду чтоб запросы через прокси шли, сокс5 легко делается, а вот хттп чушь какая то
имеется ввиду чтоб запросы через прокси шли, сокс5 легко делается, а вот хттп чушь какая то
В чем чушь то? Спецификацию HTTP прочесть надо соответствующий раздел и сразу станет понятно, что http-proxy получает тот же запрос что и http сервер, по полю host определяет кому запрос, пересылает его и возвращает полученный ответ. Все просто настолько, насколько просто вообще быть может.
я не нашел ни единого примера в инете ни на дельфи ни на си.
то есть ип адрес указать прокси сервера, а в поле хост указать адрес хттп сервера. попробую сенкс.
то есть ип адрес указать прокси сервера, а в поле хост указать адрес хттп сервера. попробую сенкс.
Примеры тоже кстати есть. В разнообразии.
Только не понятно зачем? Есть RFC в котором все это очень подробно описано. Я скажу больше, конкретно эта RFC даже перевод на русский имеет.
Цитата:
Любой сетевой адрес/доменное имя/samba имя, через которой программка использующая прокси сможет связаться с вашим сервером
Цитата:
Укажет программа, использующая ваш прокси. А вам нужно будет по этому ip/dns name (как правило) установить соединение и переслать запрос. А потом ответ. И закрыть оба соединения.
Только не понятно зачем? Есть RFC в котором все это очень подробно описано. Я скажу больше, конкретно эта RFC даже перевод на русский имеет.
Цитата:
то есть ип адрес указать прокси сервера
Любой сетевой адрес/доменное имя/samba имя, через которой программка использующая прокси сможет связаться с вашим сервером
Цитата:
поле хост указать адрес хттп сервера
Укажет программа, использующая ваш прокси. А вам нужно будет по этому ip/dns name (как правило) установить соединение и переслать запрос. А потом ответ. И закрыть оба соединения.
значит неправильно гуглил, сокс5 легко нашел и сделал. а хттп искал искал ниче не нашел
Цитата:
вот сейчас могу точно сказать, почему ИЕ библиотека не устраивает, не асинхронный а вообще, если принудительно прибить соединение в большинстве случаев процесс использующий библиотеку ИЕ для интернета начинает жрать 100% процессора. на сокетах такого не бывает
никто не знает как сделать, чтоб системное меню окна вызывалось не (только) по ALT+SPACE а по другой горячей клавише?
bomzzz
1. Поискать соответствующий WM_*
2. В оконной процедуре перед DefWindowProc править свое сочетание клавиш на ALT+SPACE.
1. Поискать соответствующий WM_*
2. В оконной процедуре перед DefWindowProc править свое сочетание клавиш на ALT+SPACE.
Цитата:
Поискать соответствующий WM_*
не могу найти
Цитата:
В оконной процедуре перед DefWindowProc править свое сочетание клавиш на ALT+SPACE.
это все что в голову пришло, но как то не очень, хуже только сэмулировать нажатие мыши в угол окна
bomzzz
Цитата:
WM_SYSCOMMAND + SC_KEYMENU
Цитата:
не могу найти
WM_SYSCOMMAND + SC_KEYMENU
разве это не наоборот - когда с меню манипулируешь такое сообщение приходит окну. то есть меню само по себе открывается
bomzzz
Само по себе ничего не бывает. Читай MSDN.
Цитата:
Само по себе ничего не бывает. Читай MSDN.
Цитата:
An application can carry out any system command at any time by passing a WM_SYSCOMMAND message to DefWindowProc.
ну я попробовал уже не открывается.
http://vsokovikov.narod.ru/New_MSDN_API/Accel_kbd/notify_wm_syscommand.htm
Окно получает это сообщение тогда, когда пользователь выбирает команду из Системного меню окна (прежде известное как системное или управляющее меню) или когда пользователь выбрал кнопку развертывания, свертывания, восстановления или закрытия окна.
Добавлено:
я туда пункт добавил - чтоб из за одного пункта меню не городить, и так как меню другого нету хотел к ALT+SPACE добавить F10. и вот когда мой пункт меню выбирается как раз это сообщение приходит. то есть меню само по себе обслуживается системой, а по результату манипуляций с ним приходит приложению. это соопчение
http://vsokovikov.narod.ru/New_MSDN_API/Accel_kbd/notify_wm_syscommand.htm
Окно получает это сообщение тогда, когда пользователь выбирает команду из Системного меню окна (прежде известное как системное или управляющее меню) или когда пользователь выбрал кнопку развертывания, свертывания, восстановления или закрытия окна.
Добавлено:
я туда пункт добавил - чтоб из за одного пункта меню не городить, и так как меню другого нету хотел к ALT+SPACE добавить F10. и вот когда мой пункт меню выбирается как раз это сообщение приходит. то есть меню само по себе обслуживается системой, а по результату манипуляций с ним приходит приложению. это соопчение
bomzzz
Цитата:
Что пробовал-то? Вот так всё вызывается.
Код: DefWindowProc(hWnd,WM_SYSCOMMAND,SC_KEYMENU,' ');
Цитата:
ну я попробовал уже не открывается.
Что пробовал-то? Вот так всё вызывается.
Код: DefWindowProc(hWnd,WM_SYSCOMMAND,SC_KEYMENU,' ');
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
Предыдущая тема: не знаю как назвать тему :-)
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.