|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Определить подключение\отключение второго монитора
Добрый вечер, уважаемые форумчане.
Подскажите, как можно отловить подключение\отключение второго монитора? |
#2
|
||||
|
||||
Попробуйте вот это
Код:
type TForm1 = class(TForm) Button1: TButton; private { Private declarations } procedure WMDeviceChange(var Message: TMessage); message WM_DEVICECHANGE; public { Public declarations } end; var Form1: TForm1; implementation const DBT_DEVICEARRIVAL = $8000; const DBT_DEVICEQUERYREMOVE = $8001; const DBT_DEVICEQUERYREMOVEFAILED = $8002; const DBT_DEVICEREMOVEPENDING = $8003; const DBT_DEVICEREMOVECOMPLETE = $8004; const DBT_DEVICETYPESPECIFIC = $8005; const DBT_CONFIGCHANGED = $0018; procedure TForm1.WMDeviceChange(var Message: TMessage); var s : string; begin {Do Something here} case Message.wParam of DBT_DEVICEARRIVAL : s := 'A device has been inserted and is now available'; DBT_DEVICEQUERYREMOVE: begin s := 'Permission to remove a device is requested'; ShowMessage(s); {True grants premission} Message.Result := integer(true); exit; end; DBT_DEVICEQUERYREMOVEFAILED : s := 'Request to remove a device has been canceled'; DBT_DEVICEREMOVEPENDING : s := 'Device is about to be removed'; DBT_DEVICEREMOVECOMPLETE : s := 'Device has been removed'; DBT_DEVICETYPESPECIFIC : s := 'Device-specific event'; DBT_CONFIGCHANGED : s:= 'Current configuration has changed' else s := 'Unknown Device Message'; end; ShowMessage(s); inherited; end; Добавлено немного позже Можно ещё в принципе таймером следить за Screen.MonitorCount, если оно > 1, то значит сейчас в системе два экрана, но это правда как-то не совсем по-прогерски Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 03.10.2014 в 07:39. |
#3
|
|||
|
|||
Не помогло.
Таймером следить не пойдет)) |
#4
|
||||
|
||||
Я не уверен, что WM_DEVICECHANGE отправляется всем окнам, а не только главному окну приложения. В VCL главное окно приложения -- Application. В качестве эксперимента можно попробовать кинуть на форму TApplicationMessages и перекрыть OnMessage с приведенным кодом.
Не стоит путать форумы с богадельнями. © Bargest |