Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

MT4: WindowsID oder wie identifiziert man das Indikatorfenster

Geschrieben

Hallo,

 

ich hätte mal wieder eine Datailfrage. Angenommen ich habe zwei Indikatoren gleichen Typs - also gleicher Name, Wie kann ich im Indikator-Code feststellen, welche Fenster-ID meinem Indikator zugewiesen wurde?

 

Die Window-ID scheint ja nicht im init()-Prozess (was ich sehr seltsam finde) zugewiesen werden, sondern lässt sich ja wohl erst im start()-Block sinnvoll abfragen.

 

 

Normalerweise suche ich ja nach der ID über:

 

int giID=WindowFind("MeinIndikator");

 

Das Problem ist nur, wenn ich nun zwei Indikatoren mit dem gleichen Namen im Chart habe. Wie finde ich heraus welche ID zu welchem gehört???? :noidea:

 

danke

 

Wingman

Featured Replies

Geschrieben

WindowFind() sucht ja nach dem Fenster mit dem indicator-short-name. Werden bei deinem Indikator-short-name also auch die Parameter mit angegeben (z.B. ATR(14)), dann ist es einfach. Du wirst ja nicht 2x die selben Parameter eingestellt haben.

Ansonsten, wenn du den Indikatorcode hast, den Indikator dementsprechend abändern, dass IndicatorShortName() die Parameter mit enthält. Hast du den Code nicht und es werden auch die Parameter nicht ausgegeben, dann wird's schwierig...

Geschrieben
  • Autor

mmmhm... das wäre ein Lösung, ist aber wie Du sagtest nicht optimal wenn der User den Indikator mit den Defaults zuweist und erst dann die Parameter ändert. Dann gibt es doch wieder zwei Indikatoren mit der gleichen "ID"

 

Mich wundert es, dass es keine art Prozess-ID gibt für einen Indikator...

Geschrieben

mit WindowsTotal()

 

Du erhälst die Anzahl der Indikatoren Fenster beginnend mit 0 = Chartfenster , 1,2,3

 

Diese Zahlen könntest du als ID benutzten.

  • 8 Monate später...
Geschrieben
ich suche nach einem Code der mir das aktive Chartfenster angibt - ausgehend von einem EA
Geschrieben

ich suche nach einem Code der mir das aktive Chartfenster angibt - ausgehend von einem EA

 

Wenn der Code das aktive Chartfenster gefunden hat. Was soll er dir dann angeben?

Geschrieben

Wenn der Code das aktive Chartfenster gefunden hat. Was soll er dir dann angeben?

 

also die Situation ist folgende: siehe Bild

 

- es läuft ein EA (könnte vielleicht auch ein Indikator sein)

- dieser verbindet sich zu einer DLL die wiederum eine Applikation "versorgt"

- die beiden Fenster (EasyOrder) sind Scripte - die Linien (rt,ge,bl) sind Einstieg->ge SL->rt TP->bl

- der EA soll nun das aktive Fenster ermitteln und die entsprechenden Daten senden - die Linien können auch verschoben werden, so daß

die entsprechenden Daten aktualisiert gesendet werden

 

 

PS: das Bild ist zu groß - wie bekomme ich das denn als "kleinen Anhang" rein?? -als Miniatur Bild

Bearbeitet von mtbf40

Geschrieben

... was bisher geschah...book.gif sleepy.gif schreiben.gif kaffee.gif marcus.gif idea.gif

 

es funktioniert über die user32.dll -> GetWindowTextA(int hWnd,string lpString,int nMaxCount)

weiter gibt es GetActiveWindows() und ...

 

ich weis - bis jetzt - noch nicht wie ich das auslesen kann ... also weiter -> sieh oben

Geschrieben

So jetzt. Versuch mal.

 

Wichtig wenn du den Code nutzt oder deinen.

Das du dich in einer Schleife befindest. (in diesem Fall 100 ms)

Sonst prüft er ja nur bei Tick und am WE oder Offline überhaupt nicht.

 

http://i1078.photobucket.com/albums/w492/finger12/q.gif

 


//Skript

#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link	 "http://www.metaquotes.net"
#import "user32.dll"
int GetParent(int hWnd);
int SendMessageA(int hWnd,int Msg,int wParam,int lParam);
#import
#define WM_MDIGETACTIVE 0x0229
int start()
{

if (!IsDllsAllowed()) {
 MessageBox("Please turn on \"Allow DLL imports\"");
 return;
}

 while (!IsStopped())														
 {

int Parent = GetParent(GetParent(WindowHandle(Symbol(),Period())));
int MyWND = GetParent(WindowHandle(Symbol(),Period()));
int ActiveMDI = SendMessageA(Parent, WM_MDIGETACTIVE, 0, 0);

if(ActiveMDI == MyWND ){
 Comment("aktuelle Chart Fenster Aktiv");

}else{
 Comment("");
}


Sleep(100);
 }
}


int deinit()
{
Comment("");
}
//+------------------------------------------------------------------+

Geschrieben
... was bisher geschah...book.gifsleepy.gif schreiben.gif kaffee.gifmarcus.gif idea.gif

 

 

Ich arbeite als Buchbinder in einer Buchbinderei.

Der Beruf ist noch nicht ausgestorben. Stolz!

Geschrieben

... hier doch die Bilder zum Text

 

ich MUSS mit GetWindowText(...) den Text - irgendwie ermitteln...

post-2251-0-91439400-1342123750.gif

Geschrieben

Ach so! Jetzt verstehe ich was du möchtest.

Ok. Werde mich Morgen daran setzen.

 

Ich werde eine Funktion programmieren.

 

 

 

Danach spendierst du mir aber ein Bier. yep.gif

Geschrieben

Ach so! Jetzt verstehe ich was du möchtest.

Ok. Werde mich Morgen daran setzen.

 

Ich werde eine Funktion programmieren.

 

Danach spendierst du mir aber ein Bier. yep.gif

 

... oder du mir - ABER a'MAß beers.gif

 

//+------------------------------------------------------------------+
//|                                                 chart_window.mq4 |
//|                     Copyright © 2012, MetaQuotes Software Corp. |
//|                                     http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#property link     "http://www.metaquotes.net"
#include <WinUser32.mqh>
#property indicator_chart_window
#import "kernel32.dll"
void OutputDebugStringA(string msg);
#import
int start()
{
int Parent = GetParent(GetParent(WindowHandle(Symbol(),Period())));
int MyWND = GetParent(WindowHandle(Symbol(),Period()));
int ActiveMDI = SendMessageA(Parent, WM_MDIGETACTIVE, 0, 0);
int activeWND = GetActiveWindow();
string gvAdd = "                                                     ";
string wndTXT = GetWindowTextA(ActiveMDI, gvAdd, 50);
log("wndTXT="+StringTrimRight(gvAdd)); //DAS IST ES
log("Parent="+Parent);
log("activeWND="+activeWND);
log("MyWND="+MyWND);
log("ActiveMDI="+ActiveMDI);
if(ActiveMDI == MyWND ){
     Comment("Active=");
//     log("wndTXT="+wndTXT);
//     log("Parent_A="+Parent);
//     log("MyWND_A="+MyWND);
//     log("ActiveMDI_A="+ActiveMDI);
}else{
     Comment("");
//     log("Parent_N="+Parent);
//     log("MyWND_N="+MyWND);
//     log("ActiveMDI_N="+ActiveMDI);
}
return(0);
}

void log(
string s1,
string s2="",
string s3="",
string s4="",
string s5="",
string s6="",
string s7="",
string s8=""
){
string out = StringTrimRight(StringConcatenate(
     WindowExpertName(), ".mq4 ", Symbol(),
     " ", s1,
     " ", s2,
     " ", s3,
     " ", s4,
     " ", s5,
     " ", s6,
     " ", s7,
     " ", s8
));
OutputDebugStringA(out);
}

 

Achtung: <log> funktioniert nur mit DebugView von Sysinternals

Geschrieben

... so ein Problem weniger - 25 neue da schimpf.gif

 

bei den beiden Bilder oben sind doch jeweils 3 Linien zu sehen - wie bekomme ich jetzt die Werte dieser Objekte für das jeweilige aktive Fenster

Wenn ich über ObjectsTotal() gehe, nimmt er ja immer das Fenster wo der EA läuft. Ich vermute mal das da wieder die User32.dll dahinter steckt?!

Geschrieben

... so ein Problem weniger - 25 neue da schimpf.gif

 

bei den beiden Bilder oben sind doch jeweils 3 Linien zu sehen - wie bekomme ich jetzt die Werte dieser Objekte für das jeweilige aktive Fenster

Wenn ich über ObjectsTotal() gehe, nimmt er ja immer das Fenster wo der EA läuft. Ich vermute mal das da wieder die User32.dll dahinter steckt?!

 

Von wem werden die 3 Linien auf den verschiedenen Charts eigezeichnet ?

Geschrieben

Von wem werden die 3 Linien auf den verschiedenen Charts eigezeichnet ?

 

von dem EasyOrder Script

Geschrieben

Du benötigst die Werte dann in dem EA?

 

Dann müsste man in den EasyOrder Script zu programmieren:

Wenn das eigene Chartfenster aktiv, speichere die Werte der 3 Linien als Globale Variable.

 

Dein EA kann dann auf die Globale Variable im Terminal zugreifen und hat immer die Werte der 3 Linien vom aktiven Chartfenster.

 

Ist der Skript EasyOrder Opensource MQL4 ?

Geschrieben

Du benötigst die Werte dann in dem EA?

 

Dann müsste man in den EasyOrder Script zu programmieren:

Wenn das eigene Chartfenster aktiv, speichere die Werte der 3 Linien als Globale Variable.

 

Dein EA kann dann auf die Globale Variable im Terminal zugreifen und hat immer die Werte der 3 Linien vom aktiven Chartfenster.

 

Ist der Skript EasyOrder Opensource MQL4 ?

 

http://www.forexfactory.com/showthread.php?t=281772

Geschrieben

Den code vom Posting in den EasyOrder Script.

 

Wenn du das fertig hast, können wir mit dem Globalen Variablen anfangen.

Geschrieben

Den code vom Posting in den EasyOrder Script.

 

Wenn du das fertig hast, können wir mit dem Globalen Variablen anfangen.

 

 

Den code vom Posting in den EasyOrder Script... hahaha....................... war ein Scherz!!

 

ABER das mit den verdammten (Windoofs)Handles bringt mich langsam zum verzweifeln head.gif

Es gibt ja "tausende" Handles auf einem Bilschirm!! Jedes poplige Widget ist ein Handle.

Ich habe "Gott sei(s) (ge)dank" pope.gif drei Tools gefunden die mir die Dinger anzeigen - auch die hidden

 

http://kickme.to/inqsoft

http://www.softpedia.com/get/Security/Security-Related/Winspector.shtml

http://www.catch22.net/software/winspy-17

 

Im Klartext heißt das: Es gibt in einem Chart 2 Handles!! Das "obere" mit Titel (z.Bsp. EURUSD,M15) und das "untere" - der eigentliche Chart

 

EasyOrder nimmt als Handle das untere...also auf ein neues

Geschrieben

Den code vom Posting in den EasyOrder Script... hahaha....................... war ein Scherz!!

 

ABER das mit den verdammten (Windoofs)Handles bringt mich langsam zum verzweifeln head.gif

Es gibt ja "tausende" Handles auf einem Bilschirm!! Jedes poplige Widget ist ein Handle.

Ich habe "Gott sei(s) (ge)dank" pope.gif drei Tools gefunden die mir die Dinger anzeigen - auch die hidden

 

http://kickme.to/inqsoft

http://www.softpedia...inspector.shtml

http://www.catch22.n...tware/winspy-17

 

Im Klartext heißt das: Es gibt in einem Chart 2 Handles!! Das "obere" mit Titel (z.Bsp. EURUSD,M15) und das "untere" - der eigentliche Chart

 

EasyOrder nimmt als Handle das untere...also auf ein neues

 

...

Das Handle <ActiveMDI> ist das Fenster (z.Bsp. EURUSD,M15) - das Handle was EasyOrder benutzt = WindowHandle(Symbol(),0) ist der Frame im Fenster - d.h. ich benötige beide Handles

...vielleicht löst ja das mein Problem und ich komme über dieses Handle an die Daten idea.gif pray.gif

Geschrieben

...

Das Handle <ActiveMDI> ist das Fenster (z.Bsp. EURUSD,M15) - das Handle was EasyOrder benutzt = WindowHandle(Symbol(),0) ist der Frame im Fenster - d.h. ich benötige beide Handles

...vielleicht löst ja das mein Problem und ich komme über dieses Handle an die Daten idea.gif pray.gif

 

habe herausgefunden das man die Funktion EnumChildWindows(ActiveMDI, ??? , 0) aufrufen muss - aber keine Ahnung wie...

Geschrieben

habe herausgefunden das man die Funktion EnumChildWindows(ActiveMDI, ??? , 0) aufrufen muss - aber keine Ahnung wie...

 

..wer suchet der findet!!

 

Lösung: int childWND = GetWindow(ActiveMDI, GW_CHILD); dance.gif

Geschrieben

jetzt funktioniert auch der Wechsel zwischen den Pairs. Man setzte einfach das Handle des Child-Fenster aktiv und schon geht es...

hin und her und her und hin rumpel.gif

 

Aber nichts für ungut die nächsten Baustellen lauern schon...

 

Vielleicht sollte man dieser Problematik ein Kapitel im Wiki gönnen?!

Ich habe noch mal einen EA beigefügt der dieses Thema schön veranschaulicht...

!input_resizerEA.mq4

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.