Как послать WM_LBUTTONDOWN без подключенного монитора?
Добрый день!
Есть некоторое приложение. У него нет никакого API ,а необходимо было наладить автоматическую работу с ним.
Поэтому написано другое приложение, которое посредством WinAPI взаимодействует с ним.
Посылает ему сообщения типа WM_LBUTTONDOWN через PostMessage:
PostMessage(window, (uint)windowMessages.WM_LBUTTONDOWN, button, clickPos);
Все работает стабильно и хорошо.
Но появилась необходимость запускать это все дело на арендованном сервере. Монитора никакого нет и соотв-но взаимодействие нарушается. Как я понял это нормально. Нет монитора -> нет размера окна \ нет фокуса у окна -> посылаемые координаты\сообщение некорректны
Но возникает вопрос как решить мою проблему ? Нужно или как то на уровне WinAPI решить проблему или эмулировать монитор.
Как костыль пришлось пока что держать открытой RDP сессию. Тогда все работает стандартно.
Есть какое-то решение?
Заранее спасибо.
дело не в мониторе, а в наличии\отсутствии сессии пользователя. Нет сессии - нет сеанса GUI, нет окон приложения, некуда тыкать. Нужно прописать автоматический логин нужного юзера при старте винды: www.windowsfaq.ru/content/view/895/120
Я этого в посте не написал т к думал получится обойти проблему как то цивилизовано с помощью самого WinAPI, а не кастыльно, но такой способ не подходит для меня по 2 причинам:
1. У меня не одна сессия открыта на сервере для подобной работы.
2. Под учетную запись необходимо заходить по RDP для ручной работы. А значит все сломается после выхода.
Ниже комментарием написал как сделал пока не придумал ничего лучше
nikitao, так всегда происходит, когда выбираешь неподходящий инструмент в неподходящем окружении.
Обычно windows инфраструктура и не такие костыли порождает.
p.s. на linux в аналогичной ситуации есть пара штатных решений и три костыля на выбор
Получилось пока что вот так решить проблему:
Если зайти через VNC ( использую RealVNC Server\Client) , то после закрытия VNC клиента не происходит дисконнект Windows пользователя и все продолжает работать.
Во многих случаях этого достаточно.
Но мне необходима работа нескольких сессий одновременно. Поэтому на одной учетке ( на которую происходит вход через VNC) открываются RDP сессии на те учетки с которых уже идет реальная работа.
Вот такой ужас, но работает и на том спасибо%)