Нет нельзя Окну надо передавать сообщения а как вы представляете передачу сообщений когда PID неизвестен *?
Ладно, сформулирую по другому, винда пусть все знает, но никому не выдает, по крайней мере функции GetWindowThreadProcessId
Хм не совсем понял - но попробуй перехватить тогда эту функцию (пусть винда знает то функция выдает калл)
Короче имеется приложение, которое нормально относится к загрузке в своё адресное пространство DLL, но не переносит если в этой DLL создаётся диалоговое окно, т.е. в DLLMain создается thread в нем окно.. появилось предположение что приложение перебирает все окна и если окно принадлежит процессу и не является его родным окном все прибивается.. нужно как-то обойти сложившееся недоразумение, будут предложения?
не понимаю если окно открывается из DLL то оно открывается на PID того, кто открыл DLL и все должно быть нормально (1000 раз делал все работало) Или вы там не прально окно создаете или я не понял, что вы хотите ..
> не понимаю Я вроде понятно написал %) В любом другом приложении всё будет работать, т.к. окно создаётся как положено. Не работает только в данном конкретном приложении, т.к. оно явно этого не хочет.
> то оно открывается на PID того, кто открыл DLL и все должно быть нормально (1000 раз делал все работало) Уточняю. Например, приложение знает что у него может быть только одно окно с конкретным названием и классом, и если, вдруг, появляется другое окно принадлежащее этому процессу, то процесс прибивается.
> а пропатчить само приложение на предмет поиска им окон? Неприемлемо, т.к. я во первых не знаю каким образом оно ищет окно, тем более это протектор, да ещё глючный, который я даже ставить сейчас уже не хочу, да и хотелось универсальности.
Про класс :я бы назвал класс своего окна так как и у родного, это же ведь только имя, и совпадения проверяет компиллер НО еслибы делал такую прогу, на проверку окна, то я бы не стал проверять окна это же поток нужно создать и все такое. Думаю те кто делал просто поставили хук на API создания окна и просто запретили открытия новых окон вот и все. В этом случаи нужно самому узнать реальный адрес API открытия окна и вызвать именно его а не подставу (напримет так как для виря вычисляли адрес функции) а вообще, для этого дела есть специально готовая библиотека в си =)) (detours.h) (это мне посоветавали сам незнал)
пока что созрела такая мысля, перехватываем сообщения от клавы, и по определенным последовательностям выполняем необходимые действия, т.е. без создания окна, но все-таки хотелось какого-нибудь визуального интерфейса
TermoSINteZ Вообще-то моё окно создается до старта целевого процесса, т.е. процесс стопорится на EP, загружается DLL, потом пускается дальше, причем окно нормально создается и успевает показаться на экране.