Эксперименты с функциями Win 32 API в 1C часть 2
Эксперименты с функциями Win 32 API в 1C
- Описание
- Подробнее
Описание
Пример №3 Разрушаем окна (на примере PopUp меню)
Регистрируем функции:
Wrap = CreateObject(«DynamicWrapperX»);
Wrap.Register(«USER32.DLL», «FindWindow», «i=ss», «r=l»);
Wrap.Register(«USER32.DLL», «DestroyWindow», «i=h», «r=l»);
получаем дискриптор окна поиском по классу #32768
HWND = Wrap.FindWindow(«#32768″,»»);
Если HWND<>0 Тогда
Wrap.DestroyWindow(HWND);
КонецЕсли;
Все менюшка исчезла
Внимание DestroyWindow() не работает в потоке!
Пример №4 Запрет запуска обработки или конфигурации более 1 раза (классический, мьютексы-взаимоисключения)
Регистрируем функции:
Wrap = CreateObject(«DynamicWrapperX»);
// создать мьютекс
Wrap.Register(«KERNEL32.DLL», «CreateMutex», «i=lls», «r=l»);
// открыть мьютекс
Wrap.Register(«KERNEL32.DLL», «OpenMutex», «i=lls», «r=l»);
// ожидание объекта
Wrap.Register(«KERNEL32.DLL», «WaitForSingleObject», «i=hl», «r=l»);
// высвобождение
Wrap.Register(«KERNEL32.DLL», «ReleaseMutex», «i=h», «r=l»);
// закрываем
Wrap.Register(«KERNEL32.DLL», «CloseHandle», «i=h», «r=l»);
Объявляем переменные:
MutexName = «MainErt»;
MUTEX_ALL_ACCESS = 2031617;
Проверяем на существование мьютекса в системе:
HMutex = Wrap.OpenMutex(MUTEX_ALL_ACCESS,0,MutexName);
Если HMutex=0 Тогда
// создаем если не существует и высвобождаем на потом
HMutex = Wrap.CreateMutex(0,1,MutexName);
Wrap.ReleaseMutex(HMutex);
Иначе
Предупреждение(«Обработка уже запущена работа невозможна!»);
КонецЕсли;
Пример №5 Широковещательные сообщения
Wrap = CreateObject(«DynamicWrapperX»);
Wrap.Register(«netapi32.dll», «NetMessageBufferSend», «i=wwwwl», «r=l»);
servername = «\\compname»;
messagename = «compname»;
fromname = «compname»;
messagetext = «hello»+РазделительСтрок+»!!!»;
messagelength = СтрДлина(messagetext)*2;
res = Wrap.NetMessageBufferSend(servername,messagename,fromname,messagetext,messagelength);
Внимание! Важны права доступа, имена пользователей и тп. Подробнее в MSDN.

