Коллеги, прошу помощи!
Стоит задача управлять оконным win приложением (нажатие кнопок и ввод данных в формы) через веб-сайт средствами PHP. Естественно приложение лежит на сервере и есть все необходимые права.
Понимаю, что это несколько извращённая задача, но таковы внешние условия и поменять их возможности нет.
Можете подсказать, как к задаче подойти и какие мануалы курить? Гугление внятных результатов не дало. С консольными приложениями есть варианты, а с окнами как работать — непонятно.
Далее — любым способом приделываем к ПХП: либо расширением, либо просто отдельным приложением с нтерфейсом на stdin/out (пхп его запускает и передает необходимые данные/команды).
Спасибо за подробный ответ. Но я так понимаю, это разработчики WinAmp позаботились, чтобы можно было WM_COMMAND, WINAMP_PLAY вызывать?
Или в любом случае можно декомпилировать, покопаться и найти что вызывать?
Разработчики winamp озаботились об обработке сообщений окна, как то происходит в любом GUI приложении. Любое взаимодействие (манипуляции с окном, клики, нажатие кнопки, и т.д.) — есть сообщение (message) в оконную функцию. Для понимания посмотрите хотя бы пару примеров Чарльза Петцольда (Charles Petzold). А лучше книжку почитать.
Декомпилировать тоже ничего не нужно, достаточно подсмотреть для FindWindow классы главного и дочернего окна например с помощью Spy++ из комплекта визуалстудии (в 6.0 точно было такое добро, дальше — не уверен). Ну а оконные сообщения все стандартные и документированные в MSDN.
Хм… глянуть в сторону php WinAPI (Эмуляция нажатия клавиш посланная нужным окнам и т.д.) (это если приложение вообще не редактируемо) или в сторону php + COM, если можно соорудить необходимый интерфейс на стороне приложения.
Помимо FindWindow и PostMessage, есть еще полезные функции keybd_event, mouse_event.
Самый простой вариант — на нормальном компилируемом языке написать простейшую программу из пары функций FindWindow + PostMessage. Параметры для этих функций будут браться из командной строки программы.
А из программы PHP мы будем вызывать: system(«FindWindowAndPostMessage.exe 'WinAmp' WM_LBUTTONDOWN 0 0»);