У меня сложилась следующая проблема.
1) Существует Сервис который пускается под профилем системы с параметром "Разрешить взаимодействие с рабочим столом". В этом сервисе создаётся окно для принятия сообщений.
2) Существует my.dll — библиотека ActiveX работающая под IIS в ней есть метода которая должна найти окно созданное сервисом и послать в него сообщение.
Так вот проблема в том что FindWindow возвращает 0 в то время как окно существует. И если я делаю FindWindow для сервисного окна из другого простого приложения то эта функция работает как надо, и находит его !
Кто может быть сталкивался с такой проблемой ? или подкинет свежую идею !
Здравствуйте, FMikle, Вы писали:
FM>У меня сложилась следующая проблема. FM>1) Существует Сервис который пускается под профилем системы с параметром "Разрешить взаимодействие с рабочим столом". В этом сервисе создаётся окно для принятия сообщений. FM>2) Существует my.dll — библиотека ActiveX работающая под IIS в ней есть метода которая должна найти окно созданное сервисом и послать в него сообщение. FM>Так вот проблема в том что FindWindow возвращает 0 в то время как окно существует. И если я делаю FindWindow для сервисного окна из другого простого приложения то эта функция работает как надо, и находит его ! FM>Кто может быть сталкивался с такой проблемой ? или подкинет свежую идею !
Попробуй FindWindowEx, прочитай статью на этом сайте о предотвращении повторного запуска приложения (так есть пара ласковых о FindWindow), приведи код.
If the milk turns out to be sour,
I ain't the kind of pussy to drink it
Здравствуйте, FMikle, Вы писали:
FM>У меня сложилась следующая проблема. FM>1) Существует Сервис который пускается под профилем системы с параметром "Разрешить взаимодействие с рабочим столом". В этом сервисе создаётся окно для принятия сообщений. FM>2) Существует my.dll — библиотека ActiveX работающая под IIS в ней есть метода которая должна найти окно созданное сервисом и послать в него сообщение. FM>Так вот проблема в том что FindWindow возвращает 0 в то время как окно существует. И если я делаю FindWindow для сервисного окна из другого простого приложения то эта функция работает как надо, и находит его ! FM>Кто может быть сталкивался с такой проблемой ? или подкинет свежую идею !
В таких случаях полезно GetLastError() посмотреть.
Вообще, если код тот же самый работает из другого процесса, то дело скорее всего в правах. Еще проверь валидность строки, например не запихал ли ты уникодину в FindWindowA и т.д. ...
Опыт — это такая вещь, которая появляется сразу после того, как была нужна...
Здравствуйте, skyline, Вы писали:
S>Попробуй FindWindowEx, прочитай статью на этом сайте о предотвращении повторного запуска приложения (так есть пара ласковых о FindWindow), приведи код.
Статью прочитал и у меня возникла мысль — не кроется ли проблема в том что у IIS-а существует другой рабочий стол, на котором я и пытаюсь искать своё окно? Если это так то как узнать имя рабочего стола моего сервиса и поменять его поменять?
FindWindowEx так же ничего не дал, EnumWindows ни разу не попадает в callback функцию как будто ни одного окна нету.
Здравствуйте, EM, Вы писали:
EM>В таких случаях полезно GetLastError() посмотреть. EM>Вообще, если код тот же самый работает из другого процесса, то дело скорее всего в правах. Еще проверь валидность строки, например не запихал ли ты уникодину в FindWindowA и т.д. ...
GetLastError возвращает "Операция завершена успешно". Со строкой всё в порядке — проверял.