Эксперименты с функциями Win 32 API в 1C часть 2

13.09.10

Разработка - Универсальные функции

Эксперименты с функциями 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.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    5529    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    46691    dimanich70    83    

165

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6895    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    57915    atdonya    31    

68

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8673    ke.92@mail.ru    17    

68

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    22899    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. orefkov 1158 08.09.10 10:10 Сейчас в теме
Пример 4: предварительно открывать мьютекс не нужно. Если при создании будет задано имя уже существующего мьютекса, его и вернут. При этом GetLastError вернет ERROR_ALREADY_EXISTS, и овладения мьютексом не будет.
Для отправки сообщения требуется регистрация/авторизация