QUIK 7. Начать экспорт таблиц по DDE

Страницы: 1
RSS
QUIK 7. Начать экспорт таблиц по DDE, поиск кнопки меню
 
День добрый!
В версии 6 нажимал кнопку экспорта данных "Начать экспорт таблиц по DDE" таким образом:
   
IntPtr mainMenu = GetMenu(quikWindow);
int exportMenuIndex = (int)FindMenuItemByPart(mainMenu, _exportMenuKey);
IntPtr exportMenu = GetSubMenu(mainMenu, exportMenuIndex);
uint menuItem = GetMenuItemID(exportMenu, 6);
PostMessage(quikWindow, 0x111, (IntPtr)menuItem, (IntPtr)0);

В версии 7 Квика, когда начинаю пробегать по списку меню "Сервисы", чтобы найти подменю "Экспорт/импорт данных" все подвисает.
Все остальные меню и подменю работают нормально, кроме этого. В чем может быть проблема, как нажать нужную кнопку?
 
Здравствуйте!
К сожалению, пока не удалось воспроизвести проблему.
Сообщите полный номер версии рабочего места, а так же используются ли у Вас какие-нибудь скрипты на QLUA/QPILE?
 
Квик версии 7.0.1.5. Никаких скриптов не запущено. Можете подсказать рабочий вариант порядка поиска данной кнопки в виде моего примера с GetMenuItemID() и PostMessage()?
 
Добрый день.

К сожалению, мы не поддерживаем вопросы касающиеся WinApi.
 
Ясно. Я уже разобрался. Сделал следующим образом:

 IntPtr mainMenu = GetMenu(quikWindow);
 uint serviceMenuIndex = FindMenuItemByPart(mainMenu, "С&ервисы");
 IntPtr serviceMenu = GetSubMenu(mainMenu, (int)serviceMenuIndex);
 IntPtr exportMenu = GetSubMenu(serviceMenu, 3);
 int menuItem = (int)GetMenuItemID(exportMenu, 2);
 PostMessage(quikWindow, 0x111, (IntPtr)menuItem, (IntPtr)0);

То есть пришлось немного лишить программу универсальности, когда можно ходить по меню и искать подменю по названию.
Все не по порядку в 7-ой версии Квика, При проходе по меню и явном поиске вылетает ошибка типа:
 
Цитата
quiker пишет:
Ясно. Я уже разобрался. Сделал следующим образом:

IntPtr mainMenu = GetMenu(quikWindow);
uint serviceMenuIndex = FindMenuItemByPart(mainMenu, "С&ервисы");
IntPtr serviceMenu = GetSubMenu(mainMenu, (int)serviceMenuIndex);
IntPtr exportMenu = GetSubMenu(serviceMenu, 3);
int menuItem = (int)GetMenuItemID(exportMenu, 2);
PostMessage(quikWindow, 0x111, (IntPtr)menuItem, (IntPtr)0);

То есть пришлось немного лишить программу универсальности, когда можно ходить по меню и искать подменю по названию.
Все не по порядку в 7-ой версии Квика, При проходе по меню и явном поиске вылетает ошибка типа:
В среде выполнения обнаружена критическая ошибка. Ошибка произошла по адресу 0x6929a84e в потоке 0xfa0. Код ошибки 0xc0000005. Она может быть вызвана ошибкой в CLR или в небезопасных либо не поддающихся проверке фрагментах пользовательского кода. Обычно источниками таких ошибок бывают ошибки упаковки, допускаемые пользователями при COM-взаимодействии, либо PInvoke, повредивший стек.
 
Я понял свою ошибку. Дело не в Квике.
 
Надо делать так:

IAsyncResult ar = BeginInvoke(new Action(() =>{StartDDE();}));
public StartDDE()
{
             IntPtr quikWindow = FindQuikWindow();
      IntPtr mainMenu = GetMenu(quikWindow);
 uint serviceMenuIndex = FindMenuItemByPart(mainMenu, "С&ервисы");
 IntPtr serviceMenu = GetSubMenu(mainMenu, (int)serviceMenuIndex);
 int exportMenuIndex = (int)FindMenuItemByPart7(serviceMenu, "&Экспорт/импорт данных");
 IntPtr exportMenu = GetSubMenu(serviceMenu, exportMenuIndex);
 int menuItem = (int)GetMenuItemID(exportMenu, 2);
 PostMessage(quikWindow, 0x111, (IntPtr)menuItem, (IntPtr)0);
}

Тогда вылетать ничего не будет и можно бегать по меню и подменю!!!
 
Quiker, ты крут я тоже так делаю.
Но мне не нравится как приходится вызывать стакан опционов из доски опционов. Ну типа имитирую дабл клик на путовой или колловой половине в нужной строке. Но как-то мутно это, иногда не срабатывает. Может как-то по другому лучше? Пока не нашёл как...
Страницы: 1
Читают тему
Наверх