Zamach na MessageBoxa

0

Mam bibliotekę dll, z której wywołuję pewną procedurę. Jednak, gdy zajdą pewne warunki, funkcja ta wyświetla MessageBoxa.Jednak nie chcę go tam, wolałbym sam pokazać stosowny komunikat. Jak więc mogę zamknąć tego MessageBoxa? Próbowałem tuż po wywołaniu procedury zrobić FindWindow na podstawie Captiona MessageBoxa, niestety nic nie znajdywało. Próbowałem także założyć haka na okienka, opisywanego w gorących tematach, niestety z podobnym skutkiem. Po prostu nic się nie działo. Wszelkie rozwiązania lub sugestie mile widziane :). Dodam, że biblioteka nie jest moja, więc nie mogę zmienić źródeł.

// Napiszę jeszcze, że nie bardzo zadowala mnie ciągłe szukanie okna w timerze.

0

Czyżby jakaś biblioteka shareware, np. PPM? :>

Czy ten MessageBox jest odpalany jako okno modalne w stosunku do Twojej aplikacji? Jeśli tak, to musiałbyś utworzyć drugi wątek wyszukujący MessageBoxa.

Spróbuj tak:
Znajdujesz program, do którego należy MessageBox (to zapewne Twój program) i funkcją EnumChildWindows przeszukujesz onka porównując Caption.
Nie dam głowy, że to zadziała - niestety nie mam czasu na testy.

0

Czyżby jakaś biblioteka shareware, np. PPM? :>

Nie. Co prawda, jest to plugin do innego programu, ale biblioteka jest darmowa :). Po prostu w przypadku błędu, wywala ona MessageBoxa typu ponów/anuluj, a ja chcę go zamienić na własny komunikat o błędzie.

Czy ten MessageBox jest odpalany jako okno modalne w stosunku do Twojej aplikacji?

Niestety tak :(.

Znajdujesz program, do którego należy MessageBox (to zapewne Twój program) i funkcją EnumChildWindows.

Jako uchwyt parenta co mam podać? Uchwyt głównego okienka? Skoro do znalezienia messageboxa potrzeba aż oddzielnego wątku, to czy messagebox jest dzieckiem okna głównego?

Może łatwiej byłoby zdekompilować bibliotekę, usunąć linijkę z wywołaniem funkcji MessageBox() (w assemblerze chyba wywoływanie funkcji winapi wyglada podobnie, jak w językach wysokiego poziomu?) i ponownie skompilować [???]

0

Jako uchwyt parenta co mam podać? Uchwyt głównego okienka? Skoro do znalezienia messageboxa potrzeba aż oddzielnego wątku, to czy messagebox jest dzieckiem okna głównego?

Jeśli MessageBox powoduje, że Twoja aplikacja staje się niedostępna do czasu zamknięcia okienka, to oznacza, że jest ono modalne w stosunku do Twojej aplikacji. W związku z tym Twój program jest zatrzymany. Stąd potrzebny drugi wątek, który będzie działał podczas wyświetlania okienka.

Może łatwiej byłoby zdekompilować bibliotekę, usunąć linijkę z wywołaniem funkcji MessageBox() (w assemblerze chyba wywoływanie funkcji winapi wyglada podobnie, jak w językach wysokiego poziomu?) i ponownie skompilować [???]

Co do ponownej kompilacji, to, ekhm, raczej nie. Ale można spróbować scrackować bibliotekę, jeśli nie jest przed tym pozabezpieczana.

0

nie wiem, może spróbuj otworzyć tego *.dll ResHackerem i jak będzie dialog, to go wywal, albo zamień. Można też odpalć HexEditorem i zmienić stringa, który się wyświetla w MessageBoxie... powinno zadziałać...

Pozdrawia cimak [cya]

1 użytkowników online, w tym zalogowanych: 0, gości: 1