Andrey Pogoreltsev:
Странно, что до сих пор не сделали метода в mql5 для сабжа, но не работает даже обходной путь через WinAPI:
GlobalLock возвращает NULL, GetLastError: ERROR_HOST_NODE_NOT_RESOURCE_OWNER.
При попытке аллоцировать
память через GMEM_FIXED (грязный хак), SetClipboardData также возвращает GetLastError:
ERROR_HOST_NODE_NOT_RESOURCE_OWNER
Странно, но на форуме писали что вроде работает этот способ. Может чего поменяли недавно в плане управления процессами выполнения?
Хотите парсить буфер обмена пользователя?
Andrey Pogoreltsev:
приведите весь код, который сразу запустить можно
Все работает
#property copyright "Copyright 2013, TheXpert" #property link "http://www.trend-lab.ru/" #import "user32.dll" int OpenClipboard(int notUsed); // BOOL int CloseClipboard(); // BOOL int EmptyClipboard(); // BOOL int SetClipboardData(int format, long hMem); // HANDLE #import "ntdll.dll" long memcpy(long dst, uchar& src[], int cnt); int RtlGetLastWin32Error(); int RtlSetLastWin32Error(int dwErrCode); #import "kernel32.dll" long GlobalAlloc(int uFlags, int dwBytes); // HGLOBAL long GlobalLock(long hMem); // void* int GlobalUnlock(long hMem); // HGLOBAL int GlobalFree(long hMem); // HGLOBAL #import #define GMEM_MOVEABLE 2 #define GMEM_ZEROINIT 64 #define CF_TEXT 1 void PlaceToClipboard(string toCopy) { uchar buffer[]; StringToCharArray(toCopy, buffer); int size = ArraySize(buffer); RtlSetLastWin32Error(0); long hMem = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, size); if (hMem == 0) { Print("Alloc failed, error #", RtlGetLastWin32Error()); return; } RtlSetLastWin32Error(0); long ptr = GlobalLock(hMem); if (ptr == 0) { Print("Memory lock failed, error #", RtlGetLastWin32Error()); return; } memcpy(ptr, buffer, size); GlobalUnlock(hMem); // now prepare clipboard long res = OpenClipboard(0); if (res == 0) { Print("Open clipboard failed"); return; } res = EmptyClipboard(); if (res == 0) { Print("Empty clipboard failed"); CloseClipboard(); return; } RtlSetLastWin32Error(0); res = SetClipboardData(CF_TEXT, hMem); if (res == 0) { Print("Set Data failed, error #", RtlGetLastWin32Error()); } CloseClipboard(); } void OnStart() { string toClipboard = "toClipboard"; PlaceToClipboard(toClipboard); }

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Странно, что до сих пор не сделали метода в mql5 для сабжа, но не работает даже обходной путь через WinAPI:
GlobalLock возвращает NULL, GetLastError: ERROR_HOST_NODE_NOT_RESOURCE_OWNER.
При попытке аллоцировать память через GMEM_FIXED (грязный хак), SetClipboardData также возвращает GetLastError: ERROR_HOST_NODE_NOT_RESOURCE_OWNER
Странно, но на форуме писали что вроде работает этот способ. Может чего поменяли недавно в плане управления процессами выполнения?