Вроде это -https://msdn.microsoft.com/ru-ru/library/system.windows.forms.sendkeys.send(v=vs.110).aspx
Но не непосредственно через винапи.
- msdn.microsoft.com
Вроде это -https://msdn.microsoft.com/ru-ru/library/system.windows.forms.sendkeys.send(v=vs.110).aspx
Но не непосредственно через винапи.
это если кликать по своему приложению, не стороннему, как я понимаю.. для стороннего нужно через winapi. Вот нашел более-менее внятный пример, попробую сделать..
http://ru.stackoverflow.com/questions/446899/%D0%9D%D0%B0%D0%B6%D0%B0%D1%82%D0%B8%D0%B5-%D0%BD%D0%B0-%D0%BA%D0%BD%D0%BE%D0%BF%D0%BA%D1%83-%D0%B2-toolbar-sendmessage-%D0%B2-%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B5%D0%BC-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B8
- ru.stackoverflow.com
это если кликать по своему приложению, не стороннему, как я понимаю.. для стороннего нужно через winapi. Вот нашел более-менее внятный пример, попробую сделать..
Это тоже будет работать. Вопрос только в том, как сделать приложение МТ активным, кликая в активной форме или консоли. Если кликающее приложение сделать фоновым, то все будет, но так не это нужно.(
Расскажите что получится.
Это тоже будет работать. Вопрос только в том, как сделать приложение МТ активным, кликая в активной форме или консоли. Если кликающее приложение сделать фоновым, то все будет, но так не это нужно.(
Расскажите что получится.
через SetFocus наверное, в winapi, пока не уверен
А черт его знает. Не нравится мне этот SetFocus. И не умею его готовить.) С этой имитацией клавы всегда куча проблем. ИМхо, лучше не связываться, если для конкретной работы, а не просто посмотреть.
ЗЫ Если интересует именно вопрос взаимодействия МТ с С#, то можно в личке обсудить. Вроде решил, и у людей работает. Псевдо API))А черт его знает. Не нравится мне этот SetFocus. И не умею его готовить.) С этой имитацией клавы всегда куча проблем. ИМхо, лучше не связываться, если для конкретной работы, а не просто посмотреть.
ЗЫ Если интересует именно вопрос взаимодействия МТ с С#, то можно в личке обсудить. Вроде решил, и у людей работает. Псевдо API))меня интересует вопрос именно программного нажатия кнопок, сейчас просто не получается получить идентификатор кнопки контрола, там как-то по хитрому нужно, у меня пока знаний не хватает )
- msdn.microsoft.com
А зачем именно через ВинАПИ? В С# и SetFocus есть. - https://msdn.microsoft.com/ru-ru/library/system.windows.automation.automationelement.setfocus(v=vs.110).aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1 Использовал когда-то, но только внутри приложения не выходя наружу.
потому что я хочу потом сделать dll для эксперта, что бы все было унифицировано, через UIAutomation не знаю как это реализовать
Если ДЛЛ на C# то только через перекодирование ДЛЛ в сторонней утилите. Поищу днем.
ну к чему такие сложности.. ) в С# просто удобно заниматься отладкой. сделать все через winapi, a затем просто переписать ф-ии на mql, и усе
я уже понял, что у кнопок в тулбаре нет хэндлов и их нельзя оттуда достать через FindWindow(), только если ковыряться в процессах.. или через UIAutomation. Поэтому пойдем обходным путем
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Захотел побаловаться с окнами терминала, сделать программку которая сама открывает ордер через клики по кнопкам. Нашел hwnd тулбара с кнопками, где есть кнопка newOrder (F9) в mt5, не могу сейчас понять как ее найти и сделать клик по ней. Туго идет, вообще никогда раньше не делал подобное. а дальше разберусь, думаю, по принципу и подобию..
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace ConsoleApplication1
{
class Program
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_CLOSE = 0xF060;
const int WM_LBUTTONDOWN = 0x0201;
const int WM_LBUTTONUP = 0x0202;
[DllImport("user32.dll")]
public static extern int FindWindow(
string lpClassName, // class name
string lpWindowName // window name
);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr FindWindowEx(
IntPtr hwndParent, IntPtr hwndChildAfter, string className, string windowName
);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
//Используем
static void Main(string[] args)
{
IntPtr iHandle = FindWindowEx(IntPtr.Zero, IntPtr.Zero, null, "8501757 - RoboForexEU-MetaTrader 5: Demo Account - [AUDCHF,H1]");
IntPtr standart = FindWindowEx(iHandle, IntPtr.Zero, null, "Timeframes");
IntPtr button1 = FindWindowEx(standart, IntPtr.Zero, null, "Standard");
//Тут, как я понимаю, нужно найти сейчас список кнопок контрола ToolbarWindow32, но не умею как
//SendMessage(button1, WM_LBUTTONDOWN, 00008050, 00000000);
//SendMessage(button1, WM_LBUTTONUP, 00008050, 00000000);
}
}
}