Конференция "Начинающим" » Как открыть своё окно как бы "модальным" поверх чужого? [D7, WinXP]
 
  • Студент (08.01.11 02:10) [0]
    Нужно повесить своё окно как бы "модальным" поверх чужого...
    Чтоб чужое "блокировалось" чтоль пока не закрыть моё (при нажатии на чужое окно оно не активируется а мигает заголовок моего - как если открыть "калькулятор - о программе" и пытаться нажать на сам калькулятор не закрыв about-окно)...
    Известно HWND чужого окна (ну и моего разумеется тоже)...

    Пробовал EnableWindow, SetParent, SetForegroundWindow...
    Что-то это всё не то...

    Прочёл где-то про некое SetSysModalWindow, но его почему-то не рекомендуют использовать, да и не объявлено у меня такой функции (не смог найти как её объявлять вообще)...
  • Германн © (08.01.11 02:23) [1]

    > Студент   (08.01.11 02:10)
    >
    > Нужно повесить своё окно как бы "модальным" поверх чужого.
    > ..
    > Чтоб чужое "блокировалось" чтоль пока не закрыть моё

    ИШ тебе в ответе расскажет об том как в древнем Китае обращались с желающими "странного". :)

    Проще всего наняться на работу в Microsoft и ввести в Windows сие ноу-хау. :)
  • Студент (08.01.11 02:30) [2]
    Но другие-то программы как-то делают так?
    Через Spy++ удалось узнать что чужому окну при этом добавляется WS_DISABLED...

    Попробовал сделать так же с помощью EnableWindow "выключать" чужое при создании моего окна и "включать" чужое при закрытии моего - результат не совсем похож на то что других программ получается...

    Больше ничего примечательного Spy++ вроде не показывал... А может и я не заметил просто...


    > ИШ тебе в ответе расскажет об том как в древнем Китае обращались с желающими "странного". :)


    Хм... Можно поподробнее и про это? :)
  • Германн © (08.01.11 02:58) [3]

    > Студент   (08.01.11 02:30) [2]
    >
    > Но другие-то программы как-то делают так?

    Какие? Назови! Какие программы умеют блокировать доступ к окнам других программ"?


    > Хм... Можно поподробнее и про это?

    Это слишком "кровожадно" для меня.
  • Германн © (08.01.11 03:15) [4]
    Троян WinLock?
  • Студент (08.01.11 03:45) [5]
    Да не блокировать... Я ж не зря в кавычках написал... Просто открываться модально к окну...
    Почему сразу троян? Они мне не интересны, я люблю полезное делать...

    Кажется понял... У тех других программ окна диалоговые... Диалоговые вроде через DialogBoxParam так можно...

    А окно созданное CreateWindowEx никак не получится? Придётся диалоговое окно клеить?
    Я не умею диалоговые делать, не работал с ими... В делфи есть редактор диалоговых окон как в MSVC++?
  • Германн © (08.01.11 03:55) [6]

    > Просто открываться модально к окну...

    Такое пока не придумано. Модально к ОС можно.
  • Студент (08.01.11 03:59) [7]
    Может я просто не так выражаюсь... Самоучка всё-таки, не знаю терминов нормальных... :)


    > Модально к ОС


    м... Это как вообще? Ни разу не видел...
  • Германн © (08.01.11 04:18) [8]

    > Германн ©   (08.01.11 03:55) [6]
    >
    >
    > > Просто открываться модально к окну...
    >
    > Такое пока не придумано. Модально к ОС можно.
    >

    Вру. Можно.
    Склероз, блин.
    См. реализацию MessageBox.
  • Студент (08.01.11 05:51) [9]
    MessageBox реализацию? Быть может вы имели ввиду DialogBox? Так там и есть этот DialogBoxParam...

    Можно небольшой вопрос "оффтопом"?
    Как профессионалы посоветуют поступать, если программа (точнее ОС при запуске программы) иногда выдаёт такое:

    Ошибка приложения: "бла-бла неизвестное программное исключение бла-бла по адресу 0x........".

    Было б название ошибки - я б его впечатал в поисковик... А вот что с "неизвестным"-то поделать? о___о
  • brother © (08.01.11 06:25) [10]
    > если программа

    чья?
  • Плохиш © (08.01.11 19:18) [11]

    > Как профессионалы посоветуют поступать, если программа (точнее
    > ОС при запуске программы) иногда выдаёт такое:
    >
    > Ошибка приложения: "бла-бла неизвестное программное исключение
    > бла-бла по адресу 0x........".

    Я просто выкидываю такие дерьмопроги.
  • DVM © (08.01.11 19:47) [12]

    > Германн ©   (08.01.11 04:18) [8]


    > См. реализацию MessageBox.

    это когда он устроится в MS там он и посмотрит :)

    > Проще всего наняться на работу в Microsoft
  • Студент (09.01.11 06:00) [13]
    Так что? Кроме как диалоговое окно + DialogBoxParam нет вариантов?


    > чья?


    Та что я пишу...
    Но с этим я уже разобрался... Не подумал что моей программе может передаваться вместо "рабочей папки" непонятно что...

    Кстати нашёл объявление SetSysModalWindow в WinUser.h... Шикарное объявление:

    #define SetSysModalWindow(hWnd) (NULL)

  • DiamondShark © (10.01.11 13:49) [14]

    > Германн ©   (08.01.11 02:58) [3]
    > > Студент   (08.01.11 02:30) [2]> > Но другие-то программы
    > как-то делают так?Какие? Назови! Какие программы умеют блокировать
    > доступ к окнам других программ"?

    Такие, типа: "Отправь СМС на номер 12345, а то до форматирования винта осталось 78 секунд"
  • DiamondShark © (10.01.11 13:55) [15]
    Ребята из мелкософта не зря потрудились над тем, чтобы максимально затруднить задачу спереть чужой фокус и монополизировать фокус.

    Если у тебя не троян-локер, то очень сильно пахнет "проблемой X, Y, Z".
    Колись: с какой целью интересуешься?
  • DVM © (10.01.11 14:44) [16]

    > DiamondShark ©   (10.01.11 13:55) [15]


    > Ребята из мелкософта не зря потрудились над тем, чтобы максимально
    > затруднить задачу спереть чужой фокус и монополизировать
    > фокус.

    Сколько бы они не трудились, пока есть эксплорер и панель задач, будет и функция, переключающая задачи и делающая то что нужно, найти которую всегда можно. Раньше это была SwitchToThisWindow теперь другая, но кто хочет тот найдет.
  • DiamondShark © (10.01.11 15:35) [17]

    > DVM ©   (10.01.11 14:44) [16]

    А я и не говорю, что это невозможно.
    Более того, я даже не уверен, что майкрософт собирался решить проблему радикально (например, введя привилегии на вызов User-функций), видимо, они сочли вполне достаточным защититься лишь от неугомонных кулхацкеров, причём, без существенных проблем совместимости.

    Речь о другом, о том, что серьёзные люди понимают, что хулиганство и рукожопие в среде с разделяемыми ресурсами -- это ад и израиль.
    А школоту -- хлебом не корми, только дай бы чего-нибудь скырть.
  • Студент (12.01.11 11:53) [18]
    DiamondShark, DVM, вы говорите загадками... %)

    Ну не хочу я говорить что есть X... Слишком глупо будет выглядеть...

    Как я уже разобрался все делают через Z - создают диалоговое окно и открывают его через DialogBoxParam...
    А я не умею делать диалоговым окном, ну не делал я такого никогда... Да и редактором ресурсов вроде любой дурак попортить его может...

    Вот и думаю... Можно ли сделать окно как я умею (CreateWindowEx) и получить тот же эффект что при DialogBoxParam получается...
  • Игорь Шевченко © (12.01.11 12:06) [19]

    > Можно ли сделать окно как я умею (CreateWindowEx) и получить
    > тот же эффект что при DialogBoxParam получается...


    нет, CreateWindow(Ex) не задает поведения окна.
  • DiamondShark © (12.01.11 14:22) [20]

    > Студент   (12.01.11 11:53) [18]

    Если ты боишься за ресурсы, но требуется поведение DialogBoxParam, то, возможно, тебя спасёт DialogBoxIndirectParam
  • Leonid Troyanovsky © (12.01.11 22:02) [21]

    > Студент   (12.01.11 11:53) [18]

    > Вот и думаю... Можно ли сделать окно как я умею (CreateWindowEx)
    > и получить тот же эффект что при DialogBoxParam получается.

    The DialogBoxParam function uses the CreateWindowEx function to create
    the dialog box.

    --
    Regards, LVT.
  • Студент (17.01.11 17:23) [22]

    > возможно, тебя спасёт DialogBoxIndirectParam


    Спасибо, посмотрю...)


    > The DialogBoxParam function uses the CreateWindowEx function
    > to create the dialog box.


    Это я видел... Понятно что оно использует CreateWindow, как по-другому-то...
    Только как это пригодится в моём случае?
 
Конференция "Начинающим" » Как открыть своё окно как бы "модальным" поверх чужого? [D7, WinXP]
Есть новые Нет новых   [134431   +13][b:0][p:0.001]