Внешняя компонента на C#. Как получить хэндл окна 1С ? #336204


#0 by MTM777
Без использования FindWindow.. Хочу посылать окну сообщения всякие, разные..) ???
#1 by MTM777
не густо...
#2 by MTM777
Все таки пришлось сделать через GetForegroundWindow..
#3 by romix
Ну можно по заголовку искать окно, по классу, а можно дерево подчиненных окон проанализировать относительно известного окна (там несколько ф-й WinAPI не очень сложных). В составе VC++ есть утилитка SPYXX.exe которая позволяет демонстрировать имя класса, текст окна, какие там идут сообщения. Чтобы ей воспользоваться надо нажать на пимпочку Поиск, там есть фишка типа прицела (кружок с крестиком), его перетащить мышью на нужное окно, и программа отобразит сведения по окну.
#4 by Hadgehogs
Как учил Конфуций - есть 3 пути: подражание - самый легкий, ошибок - самый болезненный, размышления - самый благородный.
#5 by Hadgehogs
Легкий - GetForegroundWindow
#6 by Hadgehogs
GetWindowThreadProcessId(WND,@PID); if PID=GetCurrentProcessId then begin GetClassName(WND,@Buffer,255); if UpperCase(String(Buffer))='V8TOPLEVELFRAME' then begin Result:=false;
#7 by Hadgehogs
Благородный:    function GetAppMainFrame(var hwnd: HWND): HResult; stdcall;    function GetAppMDIFrame(var hwnd: HWND): HResult; stdcall;    function CreateAddInWindow(const bstrProgID: WideString; const bstrWindowName: WideString;                             Flags: Integer; var pHwnd: HWND; var pDisp: IDispatch): HResult; stdcall;  end; function AddInWindows.CallAsFunc(lMethodNum: Integer; var pvarRetValue: OleVariant; var paParams: PSafeArray): HResult; stdcall; begin if MAINHANDLE=0 then begin
#8 by Hadgehogs
Только в C# как не скажу. И не забывайте, что ОКНО доступно только в ПриНачалеРаботыСистемы но не раньше. Удачи, сегун.
#9 by MTM777
Спасибо Romix, Hadgehogs за советы! Про SpyXXX я знаю, юзал както.. Только я пока не въеду как на форме (главной, которую я уже отловил) находить нужные мне элементы (поле ввода и все такое). Щас стоит задача отлавливать попадание фокуса на элемент формы, узнать его )), а потом переключить расскладку клавы на нужную. Был бы рад если чего нить подсказал. Ну дык я с самого начала попыткался в благородство играть..)) тока не получилось перевести дельфийский код в шарповский. Вот и пришлось сделать через подражание..)) Спасибо еще раз!
#10 by MTM777
to Romix...
#11 by Hadgehogs
Делай болезненный. Он наверняка сработает.
#12 by MTM777
))) осталось только его на шарп перевеси..
#13 by Hadgehogs
В шарпе адрес функции узнать можно?
#14 by MTM777
да наверное, я на него недавно подсел..
#15 by MTM777
к вопросу, который я Romix-у задал - щас смотрю через Spy++, у всех элементов формы класс назыввается "V8FormElement", а вот теперь как их ФИО узнать ? вот в чем вопрос... а потом еще нужно отловить попадание на него фокуса..
#16 by MTM777
+ надо наверное какой нить глобальный хук на главную форму наложить, там и отслеживать фокус.., но как..?
#17 by Hadgehogs
ВОТ и ты узнал сакральный смысл восьмерки :-)
#18 by Hadgehogs
Если формы еще по Заголовку можно поймать, то их элементы курят в сторонке.
#19 by MTM777
ага...) ну шожь, бум иба...я дальше..
#20 by Hadgehogs
(шепотом) И даже ЦветФона ОНИ вне Brush-а окна хранят...
#21 by MTM777
тихонько посмеюсь... )))))))))))))))))))))))))))))))))))))))))))
#22 by TormozIT
Друзья, буду очень благодарен, если кто то напишет мне компоненту для получения координат курсора в поле текстового документа отностельно левого верхнего угла главного окна приложения(!) Это нужно мне для более удобного позиционирования окно контекстной подсказки. Сразу скажу, что задача довольно непростая, но может кто то сумеет таки.
#23 by AmoreMe
На С++ (MFC) или WinAPI это решается очень просто... Думаю на С# не сложней скорее ещё проще!Получаем описатель окна, получаем координаты клиентской области,определяем попадает ли щелчок правой кнопки мышки (отпускание) в область... Если да выводим контекстное меню (или передаем управление 1С). Кстати контролы на форме такие же окна (дочерние) с ними все что угодно творить можно имея описатель окна.
#24 by MTM777
как только, так сразу! но пока не скоро..)) в теории вроде бы все понятно, осталось тока сделать..))
#25 by AmoreMe
Можно DLL написать и загружать её в адресное пространство процесса 1С ("Известные DLL"), функции экспортируемые из этой DLL могут выполнять всю работу т.к. разделят одно адресное пространство с процессом 1С
#26 by romix
>если не затруднит, пример на любом языке. * vk_windows.rar (90K) - Внешняя компонента для работы с окнами Windows. Там есть методы:    (    ('FindWindow','НайтиОкно','1'), цифра - число параметров метода.
#27 by MTM777
спасибо конечно большое !!! но файла там нету...
#28 by MTM777
+ не качается, пишет "Отсутсвует ресурс"
#29 by MTM777
может на мыло скинешь  mtm999@inbox.ru ?
#30 by romix
Ой сорри исправил.
#31 by romix
Там название файла было не в том регистре.
#32 by MTM777
все, скачал. Спасибо!!!
#33 by TormozIT
Имеется ввиду курсор в тексте, а не мышки
#34 by MTM777
надо Romix`а очень хорошо попросить, он на такие дела мастер (ИМХО).
#35 by TormozIT
К сожалению, сдается мне, что задачка трудно решаема без глубокого изучения внутренней жизни 1с8 окон
#36 by Hadgehogs
Счаст гляну
#37 by Hadgehogs
Немного не понятно уточнение "отностельно левого верхнего угла главного окна приложения(!) " Как будто действительно для курсора мыша, а не клавиатуры...
#38 by Hadgehogs
Не, чегото лом. Я лучше парню из соседней ветки калькулятор в 1С помогу написать :-)
#39 by TormozIT
Ну есть у меня поле текстового документа. В нем есть скроллбары. Я куда то их подвигал и вижу курсор в тексте. Теперь юзер жмет CTRL+SPACE. Мне нужно открыть форму с подсказкой чуть ниже места на экране, где собственно находится текстовый курсор.
#40 by MTM777
))) жжёшь!
#41 by MTM777
почитал , еле-еле в себя пришел..)))))
#42 by Hadgehogs
Делов то, щас сделаю.
#43 by Hadgehogs
в конфе обработка "Работа с клавиатурой" аська и почта в личке.
#44 by TormozIT
Спасибо. Но в обработке "Работа с клавиатурой" все работает с элементом управления "ПолеВвода", а мне "ПолеТекстовогоДокумента" нужно.
#45 by MTM777
Красавчег!
#46 by Hadgehogs
Ты про мою фотку из обработки "Работа с буфером обмена" :-)
#47 by MTM777
да нет, ты не в моем вкусе..))) мне больше девки нравятся))) я про ВК.
#48 by MTM777
может исходниками поделишься ? ;)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С