- стейт окрывается в уже существующем окне эксплорера, т.о. исчезает ранее открытая страница, нужная информация теряется
Это зависит от того как настроен браузер, используемый по умолчанию. Например, для Internet Explorer 7 достаточно в настройках
указать, чтобы внешние ссылки открывались в новой вкладке, тогда ранее открытые страницы не исчезнут.
- хотелось бы закрыть эксплориер со стейтментом, т.к. его анализ проводится др. средствами.
Например, так
#import "user32.dll" int GetDesktopWindow(); int GetWindow(int hWnd, int uCmd); int GetWindowTextA(int hWnd, string lpString, int nMaxCount); int GetWindowTextLengthA(int hWnd); int PostMessageA(int hWnd, int Msg, int wParam, int lParam); #import #define GW_HWNDNEXT 2 #define GW_CHILD 5 #define WM_CLOSE 0x0010 void start() { StatementClose(AccountNumber(), AccountName()); } //функция закрывает окно браузера с отчетом о торговой истории счета void StatementClose(int nAccountNumber, int nAccountName) { int hWnd, nMaxCount; string sWindowName = " "; hWnd = GetWindow(GetDesktopWindow(), GW_CHILD); while(hWnd!=0) { hWnd = GetWindow(hWnd, GW_HWNDNEXT); nMaxCount = GetWindowTextLengthA(hWnd); GetWindowTextA(hWnd, sWindowName, nMaxCount+1); if(StringFind(sWindowName, StringConcatenate(nAccountNumber," - ",nAccountName), 0)>=0) { PostMessageA(hWnd, WM_CLOSE, 0, 0); break; } } }
Примечание: функцию StatementClose() желательно вызывать с задержкой, чтобы окно браузера успело активизироваться.
Ильнур, спс большое за быстрый ответ!
Все работает.
Изв, возьму на себя смелость внести маленькую корректировку
void StatementClose(int nAccountNumber, s tri ng nAccountName) - вторая переменная строчная
Предполагаю, что примерно также можно закрыть опреленный файл Excel
(именно одно окно файла Excel, а не все приложение Excel), только не соображу как :)
Помоги пжл.
Заранее спасибо
Изв, возьму на себя смелость внести маленькую корректировку
void StatementClose(int nAccountNumber, s tri ng nAccountName) - вторая переменная строчная
Да верно.
M1kha1l писал(а) >>
Предполагаю, что примерно также можно закрыть опреленный файл Excel
(именно одно окно файла Excel, а не все приложение Excel), только не соображу как :)
Помоги пжл.
Заранее спасибо
Закрыть один открытый файл Excel можно, например, так
#import "user32.dll" int PostMessageA(int hWnd, int Msg, int wParam, int lParam); int ShowWindow(int hWnd, int nCmdShow); int GetLastActivePopup(int hWndOwner); int SetForegroundWindow(int hWnd); int GetDlgItem(int hDlg, int nIDDlgItem); int FindWindowA(string lpszClass, string lpszWindow); #import #define WM_CLOSE 0x0010 #define BM_CLICK 0x00F5 void start() { ExcelWindowClose("MyFile"); } //функция для закрытия одного окна Excel void ExcelWindowClose(string sFileName) { int hWnd, hDlg; hWnd = FindWindowA("XLMAIN", "Microsoft Excel - "+sFileName+".xls"); //ищем окно if(hWnd>0) { SetForegroundWindow(hWnd); //выводим окно на передний план ShowWindow(hWnd, 1); //показываем его PostMessageA(hWnd, WM_CLOSE, 0, 0); //посылаем окну сообщение на закрытие Sleep(100); hDlg = GetLastActivePopup(hWnd); //проверяем наличие окна подтверждения на сохранение if(hDlg!=hWnd) PostMessageA(GetDlgItem(hDlg, 6), BM_CLICK, 0, 0); //подтверждаем } }
Данный код не сработает при наличии других открытых окон.
Реализация задачи закрытия конкретного окна Excel, не закрывая всё приложение, намного сложнее.
Требуется изучение иерархии рабочих окон в приложении Excel и способ их взаимодействия.
К тому же нет гарантии, что код будет универсальным для всех версий программы Excel.
кто-нибудь может мне помочь ?
Как я могу получить это значение?
#define HKEY_CURRENT_USER 0x80000001 #define RRF_RT_REG_SZ 0x00000002 #define KEY_READ 0x20019 #import "Advapi32.dll" int RegOpenKeyExA (int, string, int, int , int& a[]); int RegQueryValueExA(int Key[], string, int, int, string b, int& c); string key="Software\MetaQuotes Software\MetaTrader 4\Settings"; int start() { string name = "Language"; string wert=" "; int hKey[778]; int lRet = RegOpenKeyExA(HKEY_CURRENT_USER, key, 0, KEY_READ , hKey); int d; string dwText=" "; int lpcbData; RegQueryValueExA(hKey, name, 0,0, dwText, lpcbData); Print(dwText); return(0); }
Вот рабочий вариант:
#import "advapi32.dll" int RegOpenKeyA(int hKey, string lpSubKey, int& phkResult[]); int RegQueryValueExA(int hKey, string lpValueName, int lpReserved, int& lpType[], string lpData, int& lpcbData[]); int RegCloseKey(int hKey); #import #define HKEY_CURRENT_USER 0x80000001 //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ void start() { string lpSubKey = "Software\\MetaQuotes Software\\MetaTrader 4\\Settings"; string lpValueName = "Language"; string lpData = " "; int hKey[1], lpType[1], lpcbData[1]; if (RegOpenKeyA (HKEY_CURRENT_USER, lpSubKey, hKey) == 0) { lpcbData[0] = StringLen(lpData); if (RegQueryValueExA (hKey[0], lpValueName, 0, lpType, lpData, lpcbData) == 0) { if (lpType[0] == 1 || lpType[0] == 2 || lpType[0] == 7) Print(lpData); } RegCloseKey (hKey[0]); } }
спасибо
:)

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здесь 'Автоматическое сохранение стейтмента с нескольких счетов' автор getch приводит полезный код сохраняющий стейт.
Спасибо ему за полезный код.
Но есть нюансы, которые хотелось бы довести:
- стейт окрывается в уже существующем окне эксплорера, т.о. исчезает ранее открытая страница, нужная информация теряется
- хотелось бы закрыть эксплориер со стейтментом, т.к. его анализ проводится др. средствами.
Можно эти нюансы учесть?