forked from airat77786/MQL5Book
126 lines
4.4 KiB
MQL5
126 lines
4.4 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| EnvPermissions.mq5 |
| |||
//| Copyright 2021, MetaQuotes Ltd. |
| |||
//| https://www.mql5.com |
| |||
//+------------------------------------------------------------------+
| |||
#include "..\..\Include\PRTF.mqh"
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Draft for requesting permissions |
| |||
//| (will be completed with applied stuff) |
| |||
//+------------------------------------------------------------------+
| |||
class Permissions
| |||
{
| |||
public:
| |||
static bool isTradeOnSymbolEnabled(const string symbol, const datetime session)
| |||
{
| |||
// TODO: refine this method, this is a stub now
| |||
return symbol == NULL;
| |||
}
| |||
| |||
static bool isTradeEnabled(const string symbol = NULL, const datetime session = 0)
| |||
{
| |||
return PRTF(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
| |||
&& PRTF(MQLInfoInteger(MQL_TRADE_ALLOWED))
| |||
&& isTradeOnSymbolEnabled(symbol, session);
| |||
}
| |||
| |||
static bool isDllsEnabledByDefault()
| |||
{
| |||
return (bool)PRTF(TerminalInfoInteger(TERMINAL_DLLS_ALLOWED));
| |||
}
| |||
| |||
static bool isDllsEnabled()
| |||
{
| |||
return (bool)PRTF(MQLInfoInteger(MQL_DLLS_ALLOWED));
| |||
}
| |||
| |||
static bool isEmailEnabled()
| |||
{
| |||
return (bool)PRTF(TerminalInfoInteger(TERMINAL_EMAIL_ENABLED));
| |||
}
| |||
| |||
static bool isFtpEnabled()
| |||
{
| |||
return (bool)PRTF(TerminalInfoInteger(TERMINAL_FTP_ENABLED));
| |||
}
| |||
| |||
static bool isPushEnabled()
| |||
{
| |||
return (bool)PRTF(TerminalInfoInteger(TERMINAL_NOTIFICATIONS_ENABLED));
| |||
}
| |||
| |||
static bool isSignalsEnabled()
| |||
{
| |||
return (bool)PRTF(MQLInfoInteger(MQL_SIGNALS_ALLOWED));
| |||
}
| |||
};
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Facultative study: |
| |||
//| DLL binding to show DLL-related permissions in action. |
| |||
//| Clipboard reading is the task implemented by DLLs. |
| |||
//+------------------------------------------------------------------+
| |||
#include <WinApi/winuser.mqh>
| |||
#include <WinApi/winbase.mqh>
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| We need this define and import for accessing Windows clipboard |
| |||
//+------------------------------------------------------------------+
| |||
#define CF_UNICODETEXT 13 // one of standard clipboard formats
| |||
#import "kernel32.dll"
| |||
string lstrcatW(PVOID string1, const string string2);
| |||
#import
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Example function to use DLL for reading Windows clipboard |
| |||
//+------------------------------------------------------------------+
| |||
void ReadClipboard()
| |||
{
| |||
if(OpenClipboard(NULL))
| |||
{
| |||
HANDLE h = GetClipboardData(CF_UNICODETEXT);
| |||
PVOID p = GlobalLock(h);
| |||
if(p != 0)
| |||
{
| |||
const string text = lstrcatW(p, "");
| |||
Print("Clipboard: ", text);
| |||
GlobalUnlock(h);
| |||
}
| |||
CloseClipboard();
| |||
}
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Script program start function |
| |||
//+------------------------------------------------------------------+
| |||
void OnStart()
| |||
{
| |||
Permissions::isTradeEnabled();
| |||
Permissions::isDllsEnabledByDefault();
| |||
Permissions::isDllsEnabled();
| |||
Permissions::isEmailEnabled();
| |||
Permissions::isPushEnabled();
| |||
Permissions::isSignalsEnabled();
| |||
| |||
// Facultative study:
| |||
// uncomment the next instruction to see how DLLs affect the program:
| |||
// we need to call the function in order to activate the import
| |||
// (if the function is not called, it's not compiled, and hence
| |||
// there would be no DLL dependency)
| |||
// ReadClipboard();
| |||
}
| |||
//+------------------------------------------------------------------+
| |||
/*
| |||
example output
| |||
| |||
TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)=1 / ok
| |||
MQLInfoInteger(MQL_TRADE_ALLOWED)=1 / ok
| |||
TerminalInfoInteger(TERMINAL_DLLS_ALLOWED)=0 / ok
| |||
MQLInfoInteger(MQL_DLLS_ALLOWED)=0 / ok
| |||
TerminalInfoInteger(TERMINAL_EMAIL_ENABLED)=0 / ok
| |||
TerminalInfoInteger(TERMINAL_NOTIFICATIONS_ENABLED)=0 / ok
| |||
MQLInfoInteger(MQL_SIGNALS_ALLOWED)=0 / ok
| |||
| |||
*/
| |||
//+------------------------------------------------------------------+
|