脚本: 透视 MetaTrader 5 - 页 2

 

版本更改:

版本 1.20:重新加入图表时,终端再次变得不透明。

目前,1.2 版已送审。

 
你好!请帮我找到一个 mt5 设置止损的脚本。
 

中的更改:

版本 1.20: 重新加入计划表时,终端变得不透明。

 

Версия 1.10: Поддержка Windows XP 32-bit.

你破坏了一切。

你不得不为 32 和 64 的句柄/指针制作两种调用 DLL 函数的变体

示例

 

barabashkakvn:

版本 1.10:支持 Windows XP 32 位。

sergeev:

你破坏了一切。

你必须为 32 和 64 的句柄/指针调用两种不同的 DLL 函数

示例

感谢您提供的示例!我不能保证马上就能解决这个问题,因为我需要解决这样一个问题:从 Windows XP 到 Windows 8.1 的操作系统中,user32.dll 库都包含哪些函数?
 
我怀疑 MT5 版本 900 或 910 中调用 DLL 的机制被破坏了。服务台中的应用程序 #976227。崩溃可能与此有关。各位开发人员,请查看....。
 
非常有趣!)
 
micle:
我怀疑 MT5 版本 900 或 910 中调用 DLL 的机制被破坏了。服务台中的应用程序 #976227。崩溃可能与此有关。各位开发人员,请看这里...
我的问题是通过另一个函数声明解决的...活到老,学到老 )
 
barabashkakvn:

中的更改:

版本 1.20:重新加入日程表时,终端变得不透明。

在英文代码库中,可用版本仍为 1.10。
 

版本 1.20

//+------------------------------------------------------------------+
//|透明度。mq5
//|版权 © 2014, 弗拉基米尔-卡尔普托夫 ||
//|http://wmua.ru/slesar/ | |
//+------------------------------------------------------------------+
#property copyright "版权归弗拉基米尔-卡尔普托夫所有,2014 年
#property link      "http://wmua.ru/slesar/"
#property version   "1.20"
#import "user32.dll"
//+------------------------------------------------------------------+
//| GetAncestor(获取祖先)。读取对象祖先的句柄。
//| 指定窗口。Извлекает дескриптор предка заданного окна ||
//+------------------------------------------------------------------+
int GetAncestor(int hwnd,int gaFlags);
//+------------------------------------------------------------------+
//| GetWindowLongW.读取指定窗口的信息
//| window.Получает информацию об указанном окне ||
//+------------------------------------------------------------------+
int GetWindowLongW(
                   int hWnd,
                   int nIndex          // GWL_EXSTYLE
                   );
//+------------------------------------------------------------------+
//| SetWindowLongW.Изменяет атрибут заданного окна | |
//+------------------------------------------------------------------+
int SetWindowLongW(
                   int hWnd,
                   char nIndex,        // GWL_EXSTYLE
                   int dwNewLong       // ws_ex_layered
                   );
//+------------------------------------------------------------------+
//| SetLayeredWindowAttributes(设置分层窗口属性)。设置分层窗口的不透明度和透明度
//| 分层窗口的色键。Устанавливает светопроницаемость ||
//| и прозрачность окраски многослойного окна |
//+------------------------------------------------------------------+
bool SetLayeredWindowAttributes(
                                int hwnd,// 分层窗口的句柄
                                int crKey,   // 0
                                int bAlpha,  // степень непрозрачности 0-255
                                int dwFlags  // 0x00000002
                                );
#import
#define   GA_ROOT           0x0002      // 通过遍历父窗口链检索根窗口。
#define   GWL_EXSTYLE       -20               // 设置新的扩展窗口样式
#define   WS_EX_LAYERED     0x00080000        // 风格。窗口是分层窗口。 
#define   LWA_ALPHA         0x00000002        // 使用 bAlpha 来确定分层窗口的不透明度。
//+------------------------------------------------------------------+
//| 脚本程序启动功能|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long  mainChartID=ChartID();         // возвращает идентификатор текущего графика
   int   hdlmainChartID=ChartWindowsHandle(mainChartID);
   int   hdlRoot=GetAncestor(hdlmainChartID,GA_ROOT);
   int   SetWindowLongW_func;
   if(GetWindowLongW(hdlRoot,GWL_EXSTYLE)&WS_EX_LAYERED)
     {
      // У окна уже есть стиль WS_EX_LAYERED。Удалим WS_EX_LAYERED из этого окна стилей.
      // 窗口已有 WS_EX_LAYERED 样式。从该窗口样式中删除 WS_EX_LAYERED。
      SetWindowLongW_func=SetWindowLongW(hdlRoot,GWL_EXSTYLE,
                                         GetWindowLongW(hdlRoot,GWL_EXSTYLE)&~WS_EX_LAYERED);
      return;
     }
// Устанавливаем WS_EX_LAYERED на ROOT окно
   SetWindowLongW_func=SetWindowLongW(hdlRoot,GWL_EXSTYLE,
                                      GetWindowLongW(hdlRoot,GWL_EXSTYLE)|WS_EX_LAYERED);
   SetLayeredWindowAttributes(hdlRoot,0,(255*70)/100,LWA_ALPHA);
   return;
  }
//+------------------------------------------------------------------+
//| 函数获取句柄图形|
//| Функция получает хэндл графика|
//+------------------------------------------------------------------+
int ChartWindowsHandle(long chart_ID)
  {
//--- 准备变量以获取属性值
//--- подготовим переменную для получения значения свойства
   long result=-1;
//-- 重置错误值
//--- сбросим значение ошибки
   ResetLastError();
//--- 接收属性值
//--- получим значение свойства
   if(!ChartGetInteger(chart_ID,CHART_WINDOW_HANDLE,0,result))
     {
      //--- 在专家日志中显示错误信息
      //--- выведем сообщение об ошибке в журнал "Эксперты"
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- 返回图表属性的值
//--- вернем значение свойства графика
   return((int)result);
  }
//+------------------------------------------------------------------+