Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2014, 22:28   #1
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию отловить сообщение

отлавливаю сообщение формы следующим способом
Код:
function WindowProc(hWnd,Msg,wParam,lParam:Integer):Integer;stdcall;
begin
//тут код
end;
Result:=DefWindowProc(hWnd,Msg,wParam,lParam);
end;
так вот, после того как получил сообщение обрабатываю и выполняю действия, но, сообщение отлавливается только 1 раз 2 раз уже игнорируется. Пришла идея загнать в таймер и уже повторять проверку? как правильно это реализовать в таймере. Как запустить данную функцию в таймер? или может кто скажет как сделать чтобы сообщение обрабатывалась постоянно, а не 1 раз после запуска.
HTTqp вне форума Ответить с цитированием
Старый 31.10.2014, 02:10   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от HTTqp Посмотреть сообщение
отлавливаю сообщение формы следующим способом
Этот "способ" даже не скомпилируется. А уж отловить им что-то...
Цитата:
Сообщение от HTTqp Посмотреть сообщение
Пришла идея загнать в таймер и уже повторять проверку?
А это уже просто бред! Что загнать в таймер? Какую проверку повторять?
northener вне форума Ответить с цитированием
Старый 31.10.2014, 09:27   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Ставьте ловушку через библиотеку на WH_GETMESSAGE
Человек_Борща вне форума Ответить с цитированием
Старый 31.10.2014, 19:23   #4
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию

Я наверное не правильно описал хочу более детально пояснить. Я пишу следующую функцию
Код:
function WindowProc(hWnd,Msg,wParam,lParam:Integer):Integer;stdcall;
begin
Result:=0;
case msg of
  WM_DESTROY:
   begin
    PostQuitMessage(0);
    Exit;
   end;
//тут еще сообщения которые отлавливаются
//...
//...
end;
Result:=DefWindowProc(hWnd,Msg,wParam,lParam);
end;
все работает хорошо но есть сообщения(msg) которые правильно обрабатываются лишь при запуске окна, если окно теряет вид(фокус) они перестают обрабатываться и ни чего не происходит. Так вот тогда я решил что может попробовать функцию поместить в таймер и обрабатывать сообщение скажем каждые 2 секунды. Но не знаю как правильно применит это. В отдельную dll'ку загонять не хочу, нужно без всяких лишних библиотек. Вроде все объяснил, как пологается. Кто подскажет как правильно сделать?
HTTqp вне форума Ответить с цитированием
Старый 31.10.2014, 19:25   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
В отдельную dll'ку загонять не хочу, нужно без всяких лишних библиотек.
Вирусы пишем?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 31.10.2014, 19:36   #6
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию

то есть то твоему если нет dll и есть вопросы то сразу вирус? я не понимаю если так задаваться тут к каждой теме можно прибивать такой же пост? и кричать это вирус. Набив постов что ли?
HTTqp вне форума Ответить с цитированием
Старый 31.10.2014, 19:40   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

"без dll" — странное требование для чего-либо, кроме вредоносного ПО. Обычно пользователей не волнует наличие dll и прочих доп. файлов, еще можно создать инсталятор.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 31.10.2014, 19:48   #8
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию

когда я писал файловый менеджер я обошелся без dll, хотя мне требовалось отловить подключения флешки что бы определить ее и дать к ней доступ. я писал так
Код:
procedure UpdateDriveAll;
procedure WMDeviceChange(var message:TMessage);message WM_DEVICECHANGE;
...
procedure WMDeviceChange(var message:TMessage);
begin
  case message.wParam of
    DBT_DEVICEARRIVAL,DBT_DEVICEREMOVECOMPLETE://Устройство подключенно и доступно
    begin
    USBSecurity(Drive);
    UpdateDriveAll;
    end;
    DBT_DEVICEQUERYREMOVE://Разрешение удалять устройство запрошено. Любая прикладная программа может отвергать этот запрос и отменять удаление
    begin
    //True - дает разрешение
    message.Result:=Integer(True);
    Exit;
    end;
    DBT_DEVICEQUERYREMOVEFAILED:;//Запрос, на удалить устройства был отклонен;
    DBT_DEVICEREMOVEPENDING:;//Устройство отключается. Не может быть отклонено;
    DBT_DEVICETYPESPECIFIC:;//Зависящее от устройств событие;
    DBT_CONFIGCHANGED:;//Текущая конфигурация изменилась;
    DBT_DEVNODES_CHANGED:;//Узел устройства изменился;
  end;
  inherited;
end;
и обходился без dll просто тут, другая проблема срабатывает только 1 раз, после первого запуска если получает сообщение, 2 раз если получает уже не производит действий. Тем более dll используются для глобального я так понял отлова сообщения.

И давайте тогда уж по теме, флуд ни кому не нужен!!!
HTTqp вне форума Ответить с цитированием
Старый 31.10.2014, 19:53   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Сообщение может до тебя не дойти, для этого нужно писать хук. Хук должен быть внутри DLL потому что DLL умеет работать между чужими процессами.
Человек_Борща вне форума Ответить с цитированием
Старый 31.10.2014, 22:44   #10
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
есть сообщения(msg) которые правильно обрабатываются лишь при запуске окна, если окно теряет вид(фокус) они перестают обрабатываться и ни чего не происходит.
Сообщение не может перестать обрабатываться. Оно может перестать приходить данному окну. И никакой таймер это не исправит.
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отловить сообщение мыши на Edit'е ComboBoxa Alexxx7 Visual C++ 0 17.04.2014 11:31
Как отловить сообщение от WM_CLOSE от "крестика"? graveman Win Api 3 01.10.2012 16:22
отловить Captcha akimov_aleks Работа с сетью в Delphi 3 01.04.2010 23:31
Как отловить сообщение WM_DESTROY правильно? Johnson Общие вопросы Delphi 10 07.11.2009 12:55
Отловить курсор ALximIK777 Общие вопросы Delphi 13 23.10.2009 12:19