|
Внешняя компонента на C#. Как получить хэндл окна 1С ? | ☑ | ||
|---|---|---|---|---|
|
0
MTM777
23.04.08
✎
21:24
|
Без использования FindWindow..
Хочу посылать окну сообщения всякие, разные..) ??? |
|||
|
1
MTM777
23.04.08
✎
21:34
|
не густо...
|
|||
|
2
MTM777
23.04.08
✎
23:03
|
Все таки пришлось сделать через GetForegroundWindow..
|
|||
|
3
romix
модератор
23.04.08
✎
23:31
|
Ну можно по заголовку искать окно, по классу, а можно дерево подчиненных окон проанализировать относительно известного окна (там несколько ф-й WinAPI не очень сложных).
В составе VC++ есть утилитка SPYXX.exe которая позволяет демонстрировать имя класса, текст окна, какие там идут сообщения. Чтобы ей воспользоваться надо нажать на пимпочку Поиск, там есть фишка типа прицела (кружок с крестиком), его перетащить мышью на нужное окно, и программа отобразит сведения по окну. |
|||
|
4
Hadgehogs
24.04.08
✎
00:36
|
Как учил Конфуций - есть 3 пути: подражание - самый легкий, ошибок - самый болезненный, размышления - самый благородный.
|
|||
|
5
Hadgehogs
24.04.08
✎
00:37
|
Легкий - GetForegroundWindow()
|
|||
|
6
Hadgehogs
24.04.08
✎
00:38
|
Болезненный (путь самурая)
function EnumProc(WND:Cardinal;Param:WORD):Boolean;STDCALL; var PID:Cardinal; Buffer:Array[0..255] of char; Begin Result:=true; PID:=0; GetWindowThreadProcessId(WND,@PID); if PID=GetCurrentProcessId then begin ZeroMemory(@Buffer,255); GetClassName(WND,@Buffer,255); if UpperCase(String(Buffer))='V8TOPLEVELFRAME' then begin Result:=false; MainHandle:=WND; end; end; End; function _GetMainHandle():Cardinal; begin //ShowMessage('Попытка получения кривого дескриптора'); MainHandle:=0; EnumWindows(@EnumProc,0); Result:=MainHandle; end; |
|||
|
7
Hadgehogs
24.04.08
✎
00:42
|
Благородный:
{ IExtWndsSupport Interface } IExtWndsSupport = interface(IUnknown) ['{EFE19EA0-09E4-11D2-A601-008048DA00DE}'] function GetAppMainFrame(var hwnd: HWND): HResult; stdcall; function GetAppMDIFrame(var hwnd: HWND): HResult; stdcall; function CreateAddInWindow(const bstrProgID: WideString; const bstrWindowName: WideString; dwStyles: Integer; dwExStyles: Integer; var rctl: RECT; Flags: Integer; var pHwnd: HWND; var pDisp: IDispatch): HResult; stdcall; end; var iExtWindows: IExtWndsSupport; function AddInWindows.CallAsFunc(lMethodNum: Integer; var pvarRetValue: OleVariant; var paParams: PSafeArray): HResult; stdcall; begin if MAINHANDLE=0 then begin iExtWindows.GetAppMainFrame(HWND(MAINHANDLE)); iExtWindows.GetAppMDIFrame(HWND(MAINMDIHANDLE)); end; end; |
|||
|
8
Hadgehogs
24.04.08
✎
00:44
|
Только в C# как не скажу. И не забывайте, что ОКНО доступно только в
ПриНачалеРаботыСистемы() но не раньше. Удачи, сегун. |
|||
|
9
MTM777
24.04.08
✎
11:43
|
Спасибо Romix, Hadgehogs за советы!
(3) Про SpyXXX я знаю, юзал както.. Только я пока не въеду как на форме (главной, которую я уже отловил) находить нужные мне элементы (поле ввода и все такое). Щас стоит задача отлавливать попадание фокуса на элемент формы, узнать его )), а потом переключить расскладку клавы на нужную. Был бы рад если чего нить подсказал. (7) Ну дык я с самого начала попыткался в благородство играть..)) тока не получилось перевести дельфийский код в шарповский. Вот и пришлось сделать через подражание..)) Спасибо еще раз! |
|||
|
10
MTM777
24.04.08
✎
17:36
|
to Romix...
|
|||
|
11
Hadgehogs
24.04.08
✎
17:39
|
Делай болезненный. Он наверняка сработает.
|
|||
|
12
MTM777
24.04.08
✎
17:41
|
(11) )))
осталось только его на шарп перевеси.. |
|||
|
13
Hadgehogs
24.04.08
✎
17:42
|
В шарпе адрес функции узнать можно?
|
|||
|
14
MTM777
24.04.08
✎
17:42
|
да наверное, я на него недавно подсел..
|
|||
|
15
MTM777
24.04.08
✎
17:45
|
(13) к вопросу, который я Romix-у задал -
щас смотрю через Spy++, у всех элементов формы класс назыввается "V8FormElement", а вот теперь как их ФИО узнать ? вот в чем вопрос... а потом еще нужно отловить попадание на него фокуса.. |
|||
|
16
MTM777
24.04.08
✎
17:47
|
(15)+
надо наверное какой нить глобальный хук на главную форму наложить, там и отслеживать фокус.., но как..? |
|||
|
17
Hadgehogs
24.04.08
✎
17:49
|
(17) ВОТ и ты узнал сакральный смысл восьмерки :-)
|
|||
|
18
Hadgehogs
24.04.08
✎
17:51
|
Если формы еще по Заголовку можно поймать, то их элементы курят в сторонке.
|
|||
|
19
MTM777
24.04.08
✎
17:52
|
(18) ага...)
ну шожь, бум иба...я дальше.. |
|||
|
20
Hadgehogs
24.04.08
✎
17:59
|
(шепотом)
И даже ЦветФона ОНИ вне Brush-а окна хранят... |
|||
|
21
MTM777
24.04.08
✎
18:01
|
(20) тихонько посмеюсь... )))))))))))))))))))))))))))))))))))))))))))
|
|||
|
22
TormozIT
гуру
24.04.08
✎
18:53
|
Друзья, буду очень благодарен, если кто то напишет мне компоненту для получения координат курсора в поле текстового документа отностельно левого верхнего угла главного окна приложения(!) Это нужно мне для более удобного позиционирования окно контекстной подсказки.
Сразу скажу, что задача довольно непростая, но может кто то сумеет таки. |
|||
|
23
AmoreMe
24.04.08
✎
19:18
|
На С++ (MFC) или WinAPI это решается очень просто... Думаю на С# не сложней скорее ещё проще!Получаем описатель окна, получаем координаты клиентской области,определяем попадает ли щелчок правой кнопки мышки (отпускание) в область... Если да выводим контекстное меню (или передаем управление 1С). Кстати контролы на форме такие же окна (дочерние) с ними все что угодно творить можно имея описатель окна.
|
|||
|
24
MTM777
24.04.08
✎
19:22
|
(22) как только, так сразу! но пока не скоро..))
(23) в теории вроде бы все понятно, осталось тока сделать..)) |
|||
|
25
AmoreMe
24.04.08
✎
19:30
|
Можно DLL написать и загружать её в адресное пространство процесса 1С ("Известные DLL"), функции экспортируемые из этой DLL могут выполнять всю работу т.к. разделят одно адресное пространство с процессом 1С
|
|||
|
26
romix
модератор
24.04.08
✎
19:38
|
(0)
>если не затруднит, пример на любом языке. http://x-romix.narod.ru/ * vk_windows.rar (90K) - Внешняя компонента для работы с окнами Windows. Там есть методы: ( ('FindWindow','НайтиОкно','1'), ('SelectWindows','ВыбратьОкна','1'), ('GetNextWindow','ПолучитьСледующееОкно','0'), ('GetOwnerWindow','ПолучитьВышестоящееОкно','0'), ('PressButton','НажатьКнопку','1'), ('GetText','ПолучитьТекст','2'), ('SetText','УстановитьТекст','2'), ('GetDeskTopWindow','ПолучитьОкноРабочегоСтола','0'), ('GetWindowByHWND','ПолучитьОкноПоНомеру','1') ); цифра - число параметров метода. |
|||
|
27
MTM777
24.04.08
✎
19:41
|
(26) спасибо конечно большое !!!
но файла там нету... |
|||
|
28
MTM777
24.04.08
✎
19:42
|
(27)+ не качается, пишет "Отсутсвует ресурс"
|
|||
|
29
MTM777
24.04.08
✎
19:48
|
(26) может на мыло скинешь mtm999@inbox.ru ?
|
|||
|
30
romix
модератор
24.04.08
✎
19:49
|
(28) Ой сорри исправил.
|
|||
|
31
romix
модератор
24.04.08
✎
19:49
|
Там название файла было не в том регистре.
|
|||
|
32
MTM777
24.04.08
✎
19:51
|
(31) все, скачал. Спасибо!!!
|
|||
|
33
TormozIT
гуру
24.04.08
✎
20:50
|
(23) Имеется ввиду курсор в тексте, а не мышки
|
|||
|
34
MTM777
24.04.08
✎
20:57
|
(33) надо Romix`а очень хорошо попросить, он на такие дела мастер (ИМХО).
|
|||
|
35
TormozIT
гуру
24.04.08
✎
21:06
|
(34) К сожалению, сдается мне, что задачка трудно решаема без глубокого изучения внутренней жизни 1с8 окон
|
|||
|
36
Hadgehogs
24.04.08
✎
21:32
|
(35) Счаст гляну
|
|||
|
37
Hadgehogs
24.04.08
✎
21:36
|
Немного не понятно уточнение "отностельно левого верхнего угла главного окна приложения(!) " Как будто действительно для курсора мыша, а не клавиатуры...
|
|||
|
38
Hadgehogs
24.04.08
✎
21:43
|
Не, чегото лом. Я лучше парню из соседней ветки калькулятор в 1С помогу написать :-)
|
|||
|
39
TormozIT
гуру
24.04.08
✎
21:48
|
(38) Ну есть у меня поле текстового документа. В нем есть скроллбары. Я куда то их подвигал и вижу курсор в тексте. Теперь юзер жмет CTRL+SPACE. Мне нужно открыть форму с подсказкой чуть ниже места на экране, где собственно находится текстовый курсор.
|
|||
|
40
MTM777
24.04.08
✎
21:50
|
(38) ))) жжёшь!
|
|||
|
41
MTM777
24.04.08
✎
21:59
|
(38) почитал Как написать калькулятор в 1с? Хелп ПЛИЗ!, еле-еле в себя пришел..)))))
|
|||
|
42
Hadgehogs
24.04.08
✎
22:34
|
(39) Делов то, щас сделаю.
|
|||
|
43
Hadgehogs
24.04.08
✎
23:02
|
(39)
http://infostart.ru/profile/21242/projects/1737/ в конфе обработка "Работа с клавиатурой" аська и почта в личке. |
|||
|
44
TormozIT
гуру
24.04.08
✎
23:21
|
(43) Спасибо. Но в обработке "Работа с клавиатурой" все работает с элементом управления "ПолеВвода", а мне "ПолеТекстовогоДокумента" нужно.
|
|||
|
45
MTM777
25.04.08
✎
12:16
|
(43) Красавчег!
|
|||
|
46
Hadgehogs
25.04.08
✎
12:18
|
(45) Ты про мою фотку из обработки "Работа с буфером обмена" :-)
|
|||
|
47
MTM777
25.04.08
✎
14:05
|
(46) да нет, ты не в моем вкусе..))) мне больше девки нравятся)))
я про ВК. |
|||
|
48
MTM777
25.04.08
✎
14:06
|
(46) может исходниками поделишься ? ;)
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |