Переделал в виде функции класса (есть у меня спец.класс по имени "СистемныеФункции")
Процедура ВвестиПароль_ИзменитьСтильОкна() Экспорт
ScrptCtrl = ВвестиПароль_ScrptCtrl;
Таймер = клГлобал.Получить("ВвестиПароль_Таймер");
hWnd = ScrptCtrl.Run("FindWindowEx", ВвестиПароль_Заголовок);
If hWnd = 0 Then Возврат; EndIf;
Таймер.Остановить();
ScrptCtrl.Run("SendMessage", hWnd);
КонецПроцедуры
//======================================================================
Функция ВвестиПароль(Пароль, Заголовок, Длина, Таймаут = 0) Экспорт
Если ПустоеЗначение(ВвестиПароль_ScrptCtrl) = 1 Тогда
ТекстМодуля = "
|Public Const ES_PASSWORD = &h20
|Public Const EM_SETPASSWORDCHAR = &hCC
|Public Const GW_CHILD = &h5
|Public Const GW_OWNER = &h4
|
|Public Wrap
|Public h1C
|
|Set Wrap = CreateObject(""DynamicWrapperX"")
|Wrap.Register ""user32"", ""SendMessage"" , ""i=hull"" , ""r=l""
|Wrap.Register ""user32"", ""FindWindowEx"", ""i=hhss"", ""r=h""
|Wrap.Register ""user32"", ""GetWindow"", ""i=hu"", ""r=h""
|Wrap.Register ""kernel32"", ""GetProcAddress"" , ""i=hl"", ""r=u""
|Wrap.Register ""kernel32"", ""LoadLibrary"" , ""i=s"", ""r=h""
|
|'Хендл главного окна
|handle = Wrap.LoadLibrary(""mfc42"")
|func = Wrap.GetProcAddress(handle, 6575) 'AfxGetMainWnd(void)
|Wrap.RegisterAddr func, ""AfxGetMainWnd"", ""r=l""
|h1C = Wrap.NumGet(Wrap.AfxGetMainWnd(), &h20)
|
|Public Function FindWindowEx(Capt)
| FindWindowEx = 0
| hWnd = Wrap.FindWindowEx(0, 0, ""#32770"", Capt)
| ohWnd = Wrap.GetWindow(hWnd, GW_OWNER)
| If ohWnd = h1C Then
| FindWindowEx = Wrap.GetWindow(hWnd, GW_CHILD)
| End If
|End Function
|
|Public Function SendMessage(hWnd)
| res = Wrap.SendMessage (hWnd, EM_SETPASSWORDCHAR, 42, 0)
|End Function
|";
ScrptCtrl = СоздатьОбъект("MSScriptControl.ScriptControl");
ScrptCtrl.Language = "vbscript";
Попытка
ScrptCtrl.AddCode(ТекстМодуля);
Исключение
Message(ScrptCtrl.Error.Description);
Message(ScrptCtrl.Error.Source);
Message(ScrptCtrl.Error.Text);
Возврат 0;
КонецПопытки;
ВвестиПароль_ScrptCtrl = ScrptCtrl;
Иначе
ScrptCtrl = ВвестиПароль_ScrptCtrl;
КонецЕсли;
ВвестиПароль_Заголовок = Заголовок;
Таймер = СоздатьОбъект("Таймер");
Таймер.ЗадатьОбработчикВОбъекте(Контекст, "ВвестиПароль_ИзменитьСтильОкна");
клГлобал.Установить("ВвестиПароль_Таймер", Таймер);
Таймер = клГлобал.Получить("ВвестиПароль_Таймер");
Таймер.Запустить(100);
Рез = ВвестиСтроку(Пароль, Заголовок, Длина,, Таймаут);
клГлобал.Установить("ВвестиПароль_Таймер", "");
Возврат Рез;
КонецФункции // ВвестиПароль
Примечания:
Перем ВвестиПароль_ScrptCtrl, ВвестиПароль_Заголовок; //Локальные переменные класса
клГлобал - список значений, объявленный и созданный в глобальном модуле.