Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) функция 1С - Сигнал() - обертка над чем ? (число прочтений - 7376 )
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
функция 1С - Сигнал() - обертка над чем ?
12. Января 2011 :: 08:26
Печать  
давеча возникло желание поковырять поведение этой функции при работе в терминале.

и ответить на самый главный вопрос - функция Сигнал() - этож явная обертка над вызовом метода из WinApi

первоначально я думал что это Beep
однако - звук воспроизводимый командой
Код
Выбрать все
cmd /c echo <Ctrl+G> 

- это как раз звук системного динамика

а вот 1С вызывает звук Windows "Восклицание"

например на Delphi функция определена как
Цитата:
unction
MessageBeep(uType:word) : boolean;

Параметр uType
указывает воспроизводимый звук, как идентификатор раздела [sounds]
реестра, в котором записаны звуки, сопровождающие те, или иные
события Windows. Параметр uType может принимать следующие значения:

MB_ICONASTERISK -
проигрывает звук "Звездочка" (SystemAsterisk)

MB_ICONEXCLAMATION
- проигрывает звук "Восклицание" (SystemExclamation)

MB_ICONHAND -
проигрывает звук "Критическая ошибка" (SystemHand)

MB_ICONQUESTION -
проигрывает звук "Вопрос" (SystemQuestion)

...


вроде как это оно, однако читаю описание еще одной функции

Цитата:
Процедура Beep

Эта процедура не имеет
никаких параметров. Ее объявление выглядит довольно-таки просто:

Beep;

Суть этой процедуры -
воспроизводить стандартный звуковой сигнал, установленный в Windows,
если имеется звуковая карта и настроен стандартный звук, если же
нет, то звук поступит через динамик компьютера в виде короткого
щелчка
. Ее можно использовать, например, при вводе пользователем не
тех данных, или при закрытии формы:



вообщем суть вопроса такова:

Какую функцию ОС скорее всего использует 1С при вызове функции Сигнал() на встроенном языке ?

Зачем мне это: Дело в том что устройство AudioCard и устройство Beep - это разные устройства, и при "маппинге" в терминале клиентских устройств - у меня 1С-совская функция периодически не работает (причем избирательно не работает на Windows 2008 Server) - на support.microsoft.com, я вычитал, что изменилось поведение ОС как раз с устройством Beep.

P.S. Устройство Beep для тех кто не знает  можно посмотреть в Диспетчере устройств, при включении опции "Показывать скрытые устройства, в секции "Non Plug and Play"
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: функция 1С - Сигнал() - обертка над чем ?
Ответ #1 - 12. Января 2011 :: 08:52
Печать  
lustin писал(а) 12. Января 2011 :: 08:26:
Какую функцию ОС скорее всего использует 1С при вызове функции Сигнал() на встроенном языке ?

скорее всего MessageBeep
  

1&&2&&3
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: функция 1С - Сигнал() - обертка над чем ?
Ответ #2 - 12. Января 2011 :: 08:56
Печать  
кажется нашел сам:

скорее всего функция сигнал - это обертка над MessageBeep

проверочное приложении выглядит примерно так
Код
Выбрать все
#include <cstdlib>
#include <iostream>
#include "windows.h"

using namespace std;

int main(int argc, char *argv[])
{
    int a;

    //analog of 1C function Signal()
    MessageBeep(MB_ICONEXCLAMATION);

    //syncops - only for tests
    Beep(294, 1000/8);
    Beep(440, 1000/4);
    Beep(262*2, 1000/4);
    Beep(330*2, 1000/4);
    Beep(415, 1000/8);
    Beep(440, 1000);

    return EXIT_SUCCESS;
}
 



прикрепил exe-шник - вдруг кому-нибудь понадобиться потестировать



update: поменял чуть исходник соответствующий последнему варианту для тестирования
« Последняя редакция: 12. Января 2011 :: 10:43 - lustin »  

testMessageBeepAPI.zip ( 127 KB | Загрузки )

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: функция 1С - Сигнал() - обертка над чем ?
Ответ #3 - 12. Января 2011 :: 08:58
Печать  
trad писал(а) 12. Января 2011 :: 08:52:
lustin писал(а) 12. Января 2011 :: 08:26:
Какую функцию ОС скорее всего использует 1С при вызове функции Сигнал() на встроенном языке ?

скорее всего MessageBeep


спасибо,  Улыбка я тоже к этому склонился

прикрепил скомпилированное консольное приложение.

P.S. Пошел тестить exe-ник под Citrix'ом
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: функция 1С - Сигнал() - обертка над чем ?
Ответ #4 - 12. Января 2011 :: 09:01
Печать  
посмотрел basic.dll
точно MessageBeep
  

1&&2&&3
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: функция 1С - Сигнал() - обертка над чем ?
Ответ #5 - 12. Января 2011 :: 10:34
Печать  
lustin писал(а) 12. Января 2011 :: 08:58:
trad писал(а) 12. Января 2011 :: 08:52:
lustin писал(а) 12. Января 2011 :: 08:26:
Какую функцию ОС скорее всего использует 1С при вызове функции Сигнал() на встроенном языке ?

скорее всего MessageBeep


спасибо,  Улыбка я тоже к этому склонился

прикрепил скомпилированное консольное приложение.

P.S. Пошел тестить exe-ник под Citrix'ом


кстати - вот момент - знаю функцию MessageBeep мы можем проверить ее поиском по Citrix базе знаний

а там много интересного в том числе и ключи реестра которые отвечают за работу со звуком

например у меня выяснилось что из-за ошибки в Citrix - системный beep все равно вызывался, после чего был заблокирована вообще работа со звуком на определенных терминальных серверах по примеру:
Цитата:
Set Registry keys:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server
Name = DisableBeep
Type = DWORD
Value = 1

- And -
Name = MessageBeep
Type = DWORD
Value = 1 - (0 - включить, 1 - выключить)

Set the following Registry Key
HKEY_CURRENT_USER\Control Panel\Sound
"Beep"="no"
"ExtendedSounds"="yes"


P.S. Как полезно знать все-таки чего внутри твориться у 1С-ины; прикрепил обновленное приложение которое вызывает MessageBeep и Beep соответственно.

  

testMessageBeepAPIfor1C.zip ( 127 KB | Загрузки )

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: функция 1С - Сигнал() - обертка над чем ?
Ответ #6 - 20. Января 2011 :: 15:43
Печать  
И собственно вот чем дело закончилось:

1. в глубине форума поддержки Citrix была найдена статья http://support.citrix.com/article/CTX127372
2. был установлен тестовый сервак Windows 2008 R2

Если у вас не работают: системные звуки в удаленном рабочем столе или в опубликованной 1С-нине через Citrix не работает функция Сигнал().

Нужно:

Цитата:
необходимый порядок действий для доступности звука:

1. Добавить новую функциональность (feature) для сервера:
а) открыть System Manager (управление компьютером)
б) выбрать пункт меню Features
в) выбрать пункт Add feature
г) указать в качестве добавляемой функциональности к серверу Desktop Experience
д) отказаться от перезапуска в связи с установкой новой функциональности

2. Открыть консоль управления службами:
а) выставить службе Windows Audio вариант запуска - Автоматический

3) открыть командную строку с правами администратора
а) выполнить команду sc config beep start= auto

4) Включить запуск службы системных звуков при входе пользователя:
а) открыть Расписание заданий (Task Scheduler)
б) открыть Библиотеку заданий (Task Library)
в) перейти к разделу Microsoft/Windows/Multimedia
г) нажать правой кнопкой мыши на пункте SystemSoundService - и выбрать пункт Enabled

5) Перезагрузить сервер.

6) Для опубликованного на сервере приложения в настройках Citrix включить возможность вопроизведения звука.

Чтобы убедиться что все прошло корректно и нормально, достаточно в удаленной сессии к серверу открыть Блокнотом  любой текстовый файл и попробовать напечатать любой непечатаемый символ (Alt+<любая буквенная клавиша>) - в таком случае Windows 2008 R2 сам принудительно вызовет событие "Восклицание" и вы должны услышать звук

  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: функция 1С - Сигнал() - обертка над чем ?
Ответ #7 - 21. Января 2011 :: 06:47
Печать  
А можно в двух словах объяснить зачем нужен Citrix на Windows 2008?

Извиняюсь за ОФФ.
  
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: функция 1С - Сигнал() - обертка над чем ?
Ответ #8 - 21. Января 2011 :: 08:09
Печать  
JohnyDeath писал(а) 21. Января 2011 :: 06:47:
А можно в двух словах объяснить зачем нужен Citrix на Windows 2008?

Извиняюсь за ОФФ.


ну вопрос не ко мне конечно,а к местным админам и принимающим решения архитектоРам.

однако - у citrix есть свои фичи разные, а Windows 2008 R2 я так понимаю поставлен больше для экспериментов в качестве сервера терминалов.

моя задача стояла "защитить 1С" от нападок - дескать "1С тупая, не умеет звук проигрывать в терминале", что я с успехом и произвел.

А нафига им Citrix я честно не очень понимаю - на мой взгляд большинство проблем можно решить с помощью тонких бездисковых "клиентов" и серверов терминалов.

P.S. Тут админы людей год уже пинали - дескать нельзя из 1С звук проиграть  Улыбка
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: функция 1С - Сигнал() - обертка над чем ?
Ответ #9 - 21. Января 2011 :: 08:12
Печать  
lustin писал(а) 21. Января 2011 :: 08:09:
P.S. Тут админы людей год уже пинали - дескать нельзя из 1С звук проиграть  Улыбка

У меня была подобная ситуация с комп.фирмой - они утверждали, что в 2003 нельзя полноценно звуковушку настроить...
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: функция 1С - Сигнал() - обертка над чем ?
Ответ #10 - 21. Января 2011 :: 08:22
Печать  
lustin писал(а) 21. Января 2011 :: 08:09:
А нафига им Citrix я честно не очень понимаю - на мой взгляд большинство проблем можно решить с помощью тонких бездисковых "клиентов" и серверов терминалов.

Раньше плюс Citrix-а был в том, что он мог публиковать приложения. Сейчас в 2008-й винде это есть из коробки.
Вот и стало интересно зачем. Может есть еще какие-нибудь преимущества перед терминальным сервером 2008.
  
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: функция 1С - Сигнал() - обертка над чем ?
Ответ #11 - 21. Января 2011 :: 08:40
Печать  
JohnyDeath писал(а) 21. Января 2011 :: 08:22:
lustin писал(а) 21. Января 2011 :: 08:09:
А нафига им Citrix я честно не очень понимаю - на мой взгляд большинство проблем можно решить с помощью тонких бездисковых "клиентов" и серверов терминалов.

Раньше плюс Citrix-а был в том, что он мог публиковать приложения. Сейчас в 2008-й винде это есть из коробки.
Вот и стало интересно зачем. Может есть еще какие-нибудь преимущества перед терминальным сервером 2008.


есть такая плюшка - открытия локальных файлов с помощью приложения на сервере Citrix

есть у тебя файло локальное docx, тыкаешь по нему - а оно открывается в приложении MS Word опубликованном через Citrix.

по большому блату мне удалось добыть веселый файлик, прикладываю сюда - тут небольшое сравнение Цитрикса и RDP

P.S. Однако мои знания показывают что оно не совсем корректное в части конкурентов Цитрикса - видимо тот кто его делал хорошо знал XenAppServer, но плоховатенько знал конкурентов  Улыбка

  

XenApp6onRDS.pdf ( 829 KB | Загрузки )

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать