Как можно получить Handle окна без сторонних библиотек?

 

Господа посредством MQL можно получить Handle окна без сторонних библиотек?

 
Mike:

Господа посредством MQL можно получить Handle окна без сторонних библиотек?


int WindowHandle( string symbol, int timeframe)
Возвращает системный дескриптор окна (window handle), содержащего указанный график. Если график с symbol и timeframe на момент вызова функции не открыт, то возвращается 0.

случем не это имеется ввиду ?
 
Mike:

Мне нужен Handle, при котором я смогу послать горячую клавишу(на скрипт) сейчас проверю. Не обратил внимания.


Точно так же можно получить handl окна API вызовом

а имя окна где произошло событи одной из DLL


#import "IdleLib.dll"
int GetLastKeyWP();
int GetLastMouseWP();
int IdleLibInit();
int IdleLibUnInit();
string GetActiveWndName();
#import

string lastwnd=GetActiveWndName();//Имя окна MetaTrader где произошло событие

библиотека лежит тут на форуме в теме визуальное тестирование


 

Нет не то ((( очень жаль . Тут ситуация интересная, я с помощью програмульки нашел Handle основной окна и окно активируется но клавиша не посылается. Кто знает какое окно должно быть активировано для этого?

 
YuraZ:
Mike:

Мне нужен 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 из скрипта послылает зараза.... может кто подскажет ? Первый раз такое.

Причина обращения: