Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2017, 10:43   #1
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию Доступ к TabControl

Здравствуйте. Подскажите пожалуйста какими методами можно добраться до страниц TabControl??
В перечислении окон этот контрол не попадает. В дочерних тоже не нашел.

Задача стоит программно переключать вкладки в чужой программе. То есть нужно еще и координаты получить чтобы мышку навести и щелкнуть.
Или можно каким нибудь другим способом??
Изображения
Тип файла: jpg tabwin.jpg (66.7 Кб, 80 просмотров)
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 29.08.2017, 11:40   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А то что показано? Там же TPageControl с закладками TTabSheet
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.08.2017, 12:18   #3
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А то что показано? Там же TPageControl с закладками TTabSheet
Ну пусть так. Как добраться до него?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 29.08.2017, 12:23   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Как добраться до него?
http://www.delphisources.ru/pages/fa...r_windows.html
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.08.2017, 13:52   #5
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Список то функций у меня итак известен. Ссылка малополезная.



Вот что налепил с MSDN. Кривовато но в целом работает. Утечек не наблюдается.

Код:
 static string GetPageCaption(IntPtr pageHWND, int TabIndex)
        {
            const int TCIF_STATE = 0x10;
            const int TCIF_TEXT = 0x1;
            const int size = 512;

            IntPtr hProcess;
            uint ProcessID;
            TCITEM tcitem = new TCITEM();
            IntPtr pszTextPtr;
            IntPtr tcitemPtr;
            int BytesWriten;
            string L_capbuf = "";
            GetWindowThreadProcessId(pageHWND, out  ProcessID);
            hProcess = OpenProcess(ProcessAccessFlags.All, true, (int)ProcessID);
            if (hProcess != IntPtr.Zero)
            {
                pszTextPtr = VirtualAllocEx(hProcess, IntPtr.Zero, size, AllocationType.Commit, MemoryProtection.ReadWrite);
                if (pszTextPtr != IntPtr.Zero)
                {
                    tcitemPtr = VirtualAllocEx(hProcess, IntPtr.Zero, (uint)Marshal.SizeOf(typeof(TCITEM)), AllocationType.Commit, MemoryProtection.ReadWrite);

                    tcitem.mask = TCIF_STATE | TCIF_TEXT;
                    tcitem.size = size;
                    tcitem.text = pszTextPtr;

                    if (pszTextPtr != IntPtr.Zero)
                    {
                        IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(tcitem));
                        Marshal.StructureToPtr(tcitem, ptr, true);
                        tcitem.size = 1;
                        if (WriteProcessMemory(hProcess, tcitemPtr, ptr, Marshal.SizeOf(typeof(TCITEM)), IntPtr.Zero))
                        {
                            Marshal.FreeHGlobal(ptr);
                            if (SendMessage(pageHWND, TCM_GETITEMA, (uint)TabIndex, tcitemPtr))
                            {
                                ptr = Marshal.AllocHGlobal(size);
                                if (ReadProcessMemory(hProcess, pszTextPtr, ptr, size, out BytesWriten))
                                {
                                    L_capbuf = Marshal.PtrToStringAnsi(ptr);
                                    Marshal.FreeHGlobal(ptr);
                                }
                            }
                        }
                    }
                    VirtualFreeEx(hProcess, tcitemPtr, 0, AllocationType.Release);
                }
                VirtualFreeEx(hProcess, pszTextPtr, 0, AllocationType.Release);
            }
            CloseHandle(hProcess);
            return L_capbuf;
        }
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TabControl Serebah Общие вопросы Delphi 5 28.12.2011 15:51
TabControl evgenrpo Общие вопросы .NET 3 12.07.2011 01:34
TabControl vipbobik C++ Builder 0 20.05.2011 17:36
tabControl C# Namolem Помощь студентам 0 14.06.2010 15:46