|   |   | 
| 
 | Дочерние окна 1С. | ☑ | ||
|---|---|---|---|---|
| 0
    
        Raxla 28.09.11✎ 19:18 | 
        Получаю дочернее окно, но не могу получить название окна. Делаю так (упрощённо):
  var s:String;l:integer; wnd := FindWindowEx(MAINMDIHANDLE, 0, 'V8MDIClient', nil); l:=SendMessage( wnd, WM_GETTEXT, 100, lparam( @ss[ 1 ] )); ss:=Copy( ss, 1, l ); (взятие текста бралось отсюда http://www.sql.ru/forum/actualthread.aspx?bid=20&tid=624462&pg=-1) | |||
| 1
    
        Rie 28.09.11✎ 19:28 | 
        (0) Так а что получаешь? И кто такой ss?     | |||
| 2
    
        Rie 28.09.11✎ 19:29 | 
        +(1)
  Попробуй var Buf: array [0..BUFSIZE] of char; и адрес Buf передать как lParam. | |||
| 3
    
        Raxla 28.09.11✎ 19:29 | 
        в l получаю ноль     | |||
| 4
    
        Raxla 28.09.11✎ 19:31 | 
        ss AnsiString, в вар не отпечаталось :)     | |||
| 5
    
        Rie 28.09.11✎ 19:31 | 
        (4) Попробуй (2).     | |||
| 6
    
        Rie 28.09.11✎ 19:34 | 
        +(5) Ты пытаешься баловаться с динамически выделенной под строку памятью. Это уже не хорошо.     | |||
| 7
    
        Raxla 28.09.11✎ 19:39 | 
        всё равно - мусор на выходе в буфере     | |||
| 8
    
        Raxla 28.09.11✎ 19:42 | 
        из 1С вообще можно получить названия окон?     | |||
| 9
    
        Raxla 28.09.11✎ 19:44 | 
        и в любом случае, длинну-то ноль возвращает!     | |||
| 10
    
        Rie 28.09.11✎ 19:49 | 
        (7) Посмотри при помощи Spy++ (или что там у тебя имеется), какие окна есть и что с ними. Может, ты не то окно смотришь?     | |||
| 11
    
        Raxla 28.09.11✎ 19:56 | 
        Пробовал все получать,  по ClassName реально только это окно:
  class: V8ViewSplitter class: V8ViewSplitter class: V8ViewSplitter class: V8ViewSplitter class: V8AutoHideLayouter class: V8AutoHideLayouter class: V8AutoHideLayouter class: V8AutoHideLayouter class: V8CommandBar class: V8CommandBar class: V8CommandBar class: V8CommandBar class: V8CommandBar class: V8Dockbar class: V8Dockbar class: V8Dockbar class: V8Dockbar class: V8CommandBar class: V8CommandBar class: V8MDIClient | |||
| 12
    
        Raxla 28.09.11✎ 19:57 | 
        Заголовок у него русским текстом.     | |||
| 13
    
        Rie 28.09.11✎ 19:58 | 
        (12) Unicode?     | |||
| 14
    
        Raxla 28.09.11✎ 20:51 | 
        В 1с вижу назавние на русском :-)
  Если на выходе была бы не та кодировка, было бы видно, что атм не мусор, а через один символ. Возращаемая длинна не была бы равна нулю. У кого-нибудь в 1с8.1 названия дочерних окон читаются? | |||
| 15
    
        smaharbA 28.09.11✎ 20:59 | 
        читаются     | |||
| 16
    
        Raxla 28.09.11✎ 21:13 | 
        SPY++ показывает, что названия нету, а есть у подчинённого окну V8MDLocalFrame :-)
  А в фрейме есть ещё V8Window, тоже без названия... Наплевать и забыть, или парсить подчинённые окна дальше? | |||
| 17
    
        orefkov 28.09.11✎ 21:46 | 
        Перебирай подчиненные окна, пока заголовок не найдешь.
  Ну и ессесно, лучше заюзать юникодные версии апишных функций. | |||
| 18
    
        Raxla 28.09.11✎ 21:58 | 
        У меня вообще такое подзрение, что как окно будет отзываться только V8MDIClient, а всё остальное будет игнорить стандартные виндовые механизмы, по крайней мере, пока что у меня нулевой результат. Народ, киньте пример, чтения заголовков окон в 1С8.1     | |||
| 19
    
        Raxla 28.09.11✎ 22:03 | 
        А не, с локал фремами всё работает и коордиаты и заголовок     | |||
| 20
    
        H A D G E H O G s 28.09.11✎ 22:03 | 
        Я перебирал (но фактически искал) через
  EnumChildWindows() FindWindowEx() у меня чето-не взлетел. | |||
| 21
    
        smaharbA 28.09.11✎ 22:04 | 
        нафиг не надо енумеровать, есть дедовский метод через некствиндов и рекурсию     | |||
| 22
    
        H A D G E H O G s 28.09.11✎ 22:07 | 
        (21) Почему не надо?
  Это вы VBA-шники поди шугаетесь получения адреса функции, как черт ладана? | |||
| 23
    
        Raxla 28.09.11✎ 22:13 | 
        Кстати. окна вполне себе виндовые. обычный GetWindowText на этот локал фрейм прокатил, хотя для Child окон, как раз это совсем не гарантируется и говорят, что очень мало где работает. Нверное и регион можно дырявым сделать, и вообще поизвращатсья надо окнами :-)))
  Надо будет попробовать, как время будет | |||
| 24
    
        smaharbA 28.09.11✎ 22:15 | 
        (22) нет, адресоф работает всюду, просто с рекурсией все прозрачнее     | |||
| 25
    
        H A D G E H O G s 28.09.11✎ 22:17 | 
        (23) Не знаю как насчет "дырявости", а вот порисовать тебе на контексте окна 1С ка не даст :-)     | |||
| 26
    
        H A D G E H O G s 28.09.11✎ 22:19 | 
        А вот прозрачность (альфа-канал) через SetWindowLong() вполне себе пожалуйста.     | |||
| 27
    
        smaharbA 28.09.11✎ 22:22 | 
        (26) и направление текста и меню     | |||
| 28
    
        Raxla 28.09.11✎ 22:23 | 
        То есть и вот это должно сработать: http://club.shelek.ru/viewart.php?id=181
  Интересно, а сделать невидимой панель инструментов - сложно? (где хелп значёк остаётся) | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |