Господа посредством MQL можно получить Handle окна без сторонних библиотек?
случем не это имеется ввиду ? |
Мне нужен Handle, при котором я смогу послать горячую клавишу(на скрипт) сейчас проверю. Не обратил внимания.
Точно так же можно получить handl окна API вызовом
а имя окна где произошло событи одной из DLL
#import "IdleLib.dll"
int GetLastKeyWP();
int GetLastMouseWP();
int IdleLibInit();
int IdleLibUnInit();
string GetActiveWndName();
#import
string lastwnd=GetActiveWndName();//Имя окна MetaTrader где произошло событие
библиотека лежит тут на форуме в теме визуальное тестирование
Нет не то ((( очень жаль . Тут ситуация интересная, я с помощью програмульки нашел Handle основной окна и окно активируется но клавиша не посылается. Кто знает какое окно должно быть активировано для этого?
Мне нужен Handle, при котором я смогу послать горячую клавишу(на скрипт) сейчас проверю. Не обратил внимания.
Точно так же можно получить handl окна API вызовом
а имя окна где произошло событи одной из DLL
#import "IdleLib.dll"
int GetLastKeyWP();
int GetLastMouseWP();
int IdleLibInit();
int IdleLibUnInit();
string GetActiveWndName();
#import
string lastwnd=GetActiveWndName();//Имя окна MetaTrader где произошло событие
библиотека лежит тут на форуме в теме визуальное тестирование
Нет господа не подходит для моей задачи... тут интерес возник в Дельфях все получается если через делфи приложение вызывать, а если скриптом библиотеку вызываешь то нифига. Уже голову сломал. Первый раз такое уже не одну библиотеку под MQL и на тебе…
Вот код dll на Delphi:
unit dll_unit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; function ed_ShowByName (EsName: pChar): integer; stdCall; // returns handle, otherwise '-1' function ed_ShowByClass (EsClass: pChar): integer; stdCall; // returns handle, otherwise '-1' procedure ed_pressWithShift(EsKey: char); stdCall; // requires window to be foreground procedure ed_pressWithCtrl(EsKey: char); stdCall; procedure ed_sendString(Ewnd: hwnd;EsText: pChar); stdCall; // allow send to minimized window implementation procedure ed_pressWithCtrl(EsKey: char); begin keybd_event(VK_CONTROL, 0, 0, 0); keybd_event(Ord(UpCase(EsKey)), 0, 0, 0); keybd_event(Ord(UpCase(EsKey)), 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); end; procedure ed_pressWithShift(EsKey: char); begin keybd_event(VK_SHIFT, 0, 0, 0); keybd_event(Ord(UpCase(EsKey)), 0, 0, 0); keybd_event(Ord(UpCase(EsKey)), 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); end; procedure ed_sendString(Ewnd: hwnd; EsText: pChar); var q: integer; begin for q := 0 to Length(EsText) do SendMessage(Ewnd, WM_CHAR, Word(EsText[q]), 0); end; function ed_ShowByClass(EsClass: pChar): integer; var vhTemp: hwnd; begin Result:=-1; vhTemp:=FindWindow(EsClass,nil); if vhTemp>0 then begin try ShowWindow(vhTemp,SW_NORMAL); BringWindowToTop(vhTemp); Result:=vhTemp; except // чтобы не падал end; end end; function ed_ShowByName(EsName: pChar): integer; var vhTemp: hwnd; begin Result:=-1; vhTemp:=$0D0282; // FindWindow(nil,EsName); if vhTemp>0 then begin try ShowWindow(vhTemp,SW_NORMAL); BringWindowToTop(vhTemp); Result:=vhTemp; except // чтобы не падал end; end end; end.
здесь vhTemp это Handle видимого окна терминала (естественно в текущий
момент был взят)
А вот код вызова этой Dll из приложения на Delhi:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; function ed_ShowByName (EsName: pChar): integer; stdCall; external 'dll_keys.dll'; function ed_ShowByClass (EsClass: pChar): integer; stdCall; external 'dll_keys.dll'; procedure ed_pressWithShift(EsKey: char); stdCall; external 'dll_keys.dll'; procedure ed_pressWithCtrl(EsKey: char); stdCall; external 'dll_keys.dll'; procedure ed_sendString(Ewnd: hwnd;EsText: pChar); stdCall; external 'dll_keys.dll'; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ed_ShowByClass('notepad'); ed_pressWithCtrl('s'); end; procedure TForm1.Button2Click(Sender: TObject); begin ed_ShowByClass('notepad'); ed_pressWithShift('s'); end; procedure TForm1.Button3Click(Sender: TObject); var a: THandle; begin a:=ed_ShowByClass('notepad'); a:=FindWindowEx(a, 0, 'Edit', nil); ed_sendString(a,'i send this shit'); end; procedure TForm1.Button4Click(Sender: TObject); begin ed_ShowByName('MT3'); ed_pressWithCtrl('J'); end; end.
Нажымаем кнопочку и все работает и васе находиться. Вызываю
Dll из скрипта послылает зараза.... может кто подскажет ? Первый
раз такое.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Господа посредством MQL можно получить Handle окна без сторонних библиотек?