← Zurück

управление окнами терминала QUIK

Добрый день! Оценил вашу библиотеку, здорово вышло, очень полезная...Щас пытаюсь на ее основе накодить робота. Интересен еще тот факт, что программно запускается экспорт DDE в квике. Очень интересно, как это реализовано, если есть возможность, то просьба дать исходник...

Заранее спасибо и огромный вам респект!

War dieses Thema hilfreich?

Thema teilen

Kommentare (9)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov

А в чем проблема просто использовать библиотеку? Нет каких-то возможностей?

Alex Lable
Alex Lable Autor

Да нет, все хватает, все отлично...Это так сказать для собственного развития, интересно, как это реализовано...или если есть возможно, то пожалуйста поделитесь ссылкой, где об этом можно почитать.

Mikhail Sukhov
Mikhail Sukhov

Да без проблем. Хоть конкурента пишите =) Вот ссылка

http://msdn.microsoft.com/en-us/library/ms632590%28VS.85%29.aspx

Alex Lable
Alex Lable Autor

Еще раз здравствуйте! Я тут написал утилиту на QPILE по обработке текущих данных, которые уже представлены мне в нужном виде, получилось что-то похожее на таблицу текущих параметров, но видоизмененная...Теперь, при запуске робота нужно данные выводить в DDE, пытаюсь смоделировать сочетание клавиш ctrl+L. Получаю дескриптор окна утилиты, перевожу фокус на него, потом получаю дескриптор таблицы,, нажимаю программно сочетание клавиш, но все равно не работает:

IntPtr lK = (IntPtr)17; //код CTRL IntPtr rK = (IntPtr)65; //код L

retValue = SendMessage(hWnd, WM_KEYDOWN, IntPtr.Zero, IntPtr.Zero); retValue = SendMessage(hWnd, WM_CHAR, lK, IntPtr.Zero); retValue = SendMessage(hWnd, WM_KEYDOWN, IntPtr.Zero, IntPtr.Zero); retValue = SendMessage(hWnd, WM_CHAR, rK, IntPtr.Zero); retValue = SendMessage(hWnd, WM_KEYUP, lK, IntPtr.Zero); retValue = SendMessage(hWnd, WM_KEYUP, lK, IntPtr.Zero);

Просьба помочь, а то уже третий день с этими кнопками маюсь...

Mikhail Sukhov
Mikhail Sukhov

С этим надо разбираться. А времени свободного сейчас нет катастрофически (хотя когда оно бывает). Лучше задать на программерском форуме вопрос. Или ждите, когда я освобожусь (думаю, после середины след. недели).

Alex Lable
Alex Lable Autor

Да мне объяснять не надо..мне бы только кусок кода, где в вашей библиотеке идет нажатие клавиш ctrl+L, очень бы помогли этим.

Mikhail Sukhov
Mikhail Sukhov

QuikTrader.StardDde =)

А если без шуток, то опять же, нужно влазить в код, открывать исходник, смотреть, где оно там. Это время, которое я берегу для новой версии. Тут не все так просто. Это в Вашем примере все строчки идут друг за другом. А в чуть сложных программах появляется инкапсуляция, абстракция, и все может быть размыто на несколько сотен строк. Весь код отдавать по этическим соображениям не могу - на S# построены другие проекты, где я не единственный автор. Библиотека такая, какая она есть сейчас (и такая останется). Бесплатная, без ограничений в использовании, но с закрытым кодом.

Igor Sukhov
Igor Sukhov

SendMessage это я так понимаю interop? Попробуй тогда keybd_event - она попроще в использовании.

Alex Lable
Alex Lable Autor

Вот реализация, но почему то она тоже не работает, хотя фокус на таблице.

keybd_event(VK_CONTROL, 0, 0, 0); keybd_event((byte)'L', 0, 0, 0); keybd_event((byte)'L', 0, WM_KEYUP, 0); keybd_event(VK_CONTROL, 0, WM_KEYUP, 0);

Попробовал также чере SendKeys.Send(), для таблицы текущих параметров работает только SendKeys.Send("") - выставление новой заявки, а вот сочетание Ctrl+L SendKeys.Send("^L") не хочет(((