Форум » [x]Harbour » MessageBox после выхода из программы. » Ответить

MessageBox после выхода из программы.

Andrey: Всем привет ! Можно ли повесить MessageBox на экране примерно с таким содержанием "Аварийный выход из программы для обновления!", и чтобы он остался после выхода из программы ? Хотелось бы обойтись без внешнего дополнительного софта. Хочу сделать всем аварийное покидание программы ! Достали тупизмом при обновление программы.

Ответов - 11

PSP: Может и можно. Но, по-моему, это окно станет неуправляемым. Но это - по-моему...))

Andrey: PSP пишет: Но, по-моему, это окно станет неуправляемым. Да закрыть его потом и всех делов ! Я встречал такое окно в системе - там было типа перезагрузка системы и таймер...

SergKis: Andrey Запусти IE с нужным текстом и оформлением на html странице


Andrey: Вот нагуглил http://developer.alexanderklimov.ru/articles/pinvoke.php [pre2]Из книги C#. Советы программистам (в сокращении) Программный код, который выполняется под управлением CLR (Common Language Runtime, т. е. общая среда выполнения языков), называется управляемым (managed) кодом. Программный код, выполняющийся вне среды выполнения CLR, называется неуправляемым (unmanaged) кодом. Примером неуправляемого программного кода служат функции Win32 API, компоненты COM, интерфейсы ActiveX. Несмотря на большое количество классов .NET Framework, содержащих множество методов, программисту все равно приходится иногда прибегать к неуправляемому коду. Надо сказать, что число вызовов неуправляемого кода уменьшается с выходом каждой новой версии .NET Framework. Microsoft надеется, что наступит такое время, когда весь код можно будет сделать управляемым и безопасным. Но пока реальность такова, что без вызовов функций Windows API нам пока не обойтись. Но сначала немного теории. Управляемый код .NET Framework может вызывать неуправляемую функцию из DLL (функцию Windows API) при помощи специального механизма Platform Invoke (сокр. P/Invoke). Для того чтобы обратиться к какой-нибудь неуправлямой библиотеке DLL, вы должны преобразовать .NET-объекты в наборы struct, char* и указателей на функции, как того требует язык C. Как сказали бы программисты на своем жаргоне — вам нужно маршалировать параметры. Более подробно о маршалинге (Marshalling) вам следует почитать в документации. Чтобы вызвать DLL-функцию из C#, сначала ее необходимо объявить (программисты, имеющие опыт работы с Visual Basic 6.0, уже знакомы с этим способом). Для этого используется атрибут DllImport: using System.Runtime.InteropServices; public class Win32 { [DllImport("User32.Dll")] public static extern void SetWindowText(IntPtr hwnd, String lpString); } [/pre2] Т.е. получается мне нужно из Харбора вызывать неуправляемую функцию из DLL (функцию Windows API) ! Кто нибудь делал такое ?

Andrey: SergKis пишет: Запусти IE с нужным текстом и оформлением на html странице Хороший вариант ! Воспользуюсь если не получиться !

Andrey: Можно наверное обойтись через: [pre2] cParam := "User32.Dll ????" ShellExecute( 0, "Open", "rundll32.exe", cParam,, 3 )[/pre2] Только вот не нашёл как сделать параметры правильно... Может кто подскажет как, или нельзя так сделать ?

Dima: Andrey Прога сетевая ?

Andrey: Dima пишет: Прога сетевая ? И сетевая и для сервер-терминалов ! Юзера уходят от компа, а кто обновляет - тупит, обновляет при открытых базах. Если бы только у одного заказчика... Выкинуть всех могу, а сообщения на экране не будет... Юзера тогда будут в Ауте !

Dima: Andrey Может это чем то поможет C:\MiniGUI\SAMPLES\BASIC\MsgBoxEx\

Dima: Похоже из командной строки не получится нормально запустить MessageBoxA cParam := "User32.Dll,MessageBoxA 111 222 333" А вот через DllCall можно , но этот вариант я так понял не подходит DllCall( "user32.dll", DLL_OSAPI, "MessageBoxA", 0, "Hello world!", "Harbour sez", hb_bitOr( MB_OKCANCEL, MB_ICONEXCLAMATION, MB_HELP ) ) Можно через msg повесить месагу MSG {<пользователь> | <имя сеанса> | <ID сеанса> | @<имя файла> | *} [/SERVER:<сервер>] [/TIME:<секунд>] [/V] [/W] [<сообщение>] <пользователь> Имя пользователя. <имя сеанса> Имя сеанса. <ID сеанса> Идентификатор сеанса. @<имя файла> Файл, содержащий список имен пользователей, сеансов или идентификаторов сеансов, которым отправляется сообщение. * Отправить сообщение всем сеансам на указанном сервере. /SERVER:<сервер> Сервер (по умолчанию - текущий). /TIME:<секунд> Интервал ожидания подтверждения от получателя. /V Отображение информации о выполненных действиях. /W Ожидание ответа от пользователя, полезно вместе с /V. <сообщение> Отправляемое сообщение. Если не указано, выдается запрос или принимается ввод из STDIN.

Andrey: Dima пишет: А вот через DllCall можно , но этот вариант я так понял не подходит Если сообщение остаётся после выхода из программы, то подходит !



полная версия страницы