WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Externe Fenster / Figure detektieren?

 

L_Lars
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 13.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2012, 10:04     Titel: Externe Fenster / Figure detektieren?
  Antworten mit Zitat      
Hallo goMatlab Gemeinde!

Ich versuche einen Messablauf zu automatisieren. Dafür habe ich eine GUI erstellt, die alte nötigen Befehle abfeuert, externe Programme startet/schließt und Tastaturbefehle emuliert.

Nun ist dies ein relativ starrer Ablauf. Ein externes Programm welches sich öffnet, kann unter Umständen eine Fehlermeldung in Form eines Pop-Ups ausgeben. Ich arbeite mit Delays, sodass ein Fehler im externen Programm den ganzen Ablauf durcheinander bringen.

Daher die Frage:
Ist es möglich, dass Matlab erkennt, wenn ein externes Pop-Up-Fenster sich öffnet? Ich würde diese Information dann als Abbruchdefinition verwenden.

Eventuell über etwas in der Art exist(figure), oder Ähnliches?!

Vielen Dank schonmal für hoffentlich hilfreiche Tipps!

Grüße aus K
LL
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.11.2012, 10:37     Titel: Re: Externe Fenster / Figure detektieren?
  Antworten mit Zitat      
Hallo L_Lars,

Da dies sicherlich über das Betriebssystem erledigt werden muss, müssten wir noch wissen, welches Du einsetzt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
L_Lars
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 13.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2012, 12:25     Titel:
  Antworten mit Zitat      
Hallo Jan!

Das ganze soll auf einer Windows 7 Maschine laufen.

Gruß
lars
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 18.11.2012, 14:10     Titel: Re: Externe Fenster / Figure detektieren?
  Antworten mit Zitat      
Hallo L_Lars,

Zitat:
Ist es möglich, dass Matlab erkennt, wenn ein externes Pop-Up-Fenster sich öffnet? Ich würde diese Information dann als Abbruchdefinition verwenden.

Dies reagiert dann auch auf Mitteilungen von der Firewall, Virus-Checker, Update-Benachrichtigungen etc. Es wäre also sinnvoll nach einem Fenster mit einem bestimmten Namen zu suchen. Per Windows-API ist das nicht schwierig und möglicherweise sogar ohne Compilierung machbar:
Code:
function Found = checkWindow(Name)
if ~libisloaded(mfilename);
    loadlibrary('user32.dll',@userproto,'alias',mfilename);
end
h = calllib(mfilename, 'FindWindowA', [], Name);
Found = ~isempty(h);

function [fcns, structs, enuminfo] = userproto
fcns=[]; structs=[]; enuminfo=[]; fcns.alias={};

fcns.name{1} = 'FindWindowA';
fcns.calltype{1} = 'cdecl';
fcns.LHS{1} = 'voidPtr';
fcns.RHS{1} = {'int8Ptr',  'string'};

Allerdings ist LOADLIBRARY nicht unbedingt zukunftssicher. Ich bekommen öfter Warnungen, die mir nicht wirklich weiterhelfen. Man benötigt zudem einen installierten Compiler. Deshalb würde ich mich lieber auf ein C-Mex-File verlassen:
Code:
// WindowExist.c
// Author: Jan Simon, Heidelberg, (C) 2012
// License: BSD (use/copy/change/redistribute on own risk, mention the author) $

#include <windows.h>
#include "mex.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
  char *NameC;
  HWND OSWindowHandle;
 
  if (nrhs < 1) {
     mexErrMsgIdAndTxt("JSimon:ExistWindow:BadNInput",
                       "ExistWindow.mex: 1 input required.");
  }
 
  // Copy string:
  NameC = mxArrayToString(prhs[0]);
  if (NameC == NULL || NameC[0] == '\0') {
     mexErrMsgIdAndTxt("JSimon:ExistWindow:BadTypeInput1",
                      "ExistWindow.mex: 1st input must be a non-empty string.");
  }
 
  // Find window handle:
  OSWindowHandle = FindWindowA(NULL, NameC);
 
  // Create reply:
  plhs[0] = mxCreateLogicalScalar((mxLogical) (OSWindowHandle != 0));
 
  // Cleanup:
  mxFree(NameC);
 
  return;
}

Dies als "ExistWindow.c" abspeichern und mit "mex" compilieren.

Da aber alle möglichen Programme Fenster öffnen, die z.B. "Help" heißen, wäre es noch praktisch, den Namen des dazugehörigen Programms zu testen oder mitauszugeben. Das ist allerdings etwas umfangreicher und müsste ausgiebig getestet werden.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
L_Lars
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 13.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2012, 15:47     Titel:
  Antworten mit Zitat      
Hallo Jan!

Danke schonmal für die ausführliche Antwort. Ich werde mich in den nächsten Tagen damit auseinander setzen und schauen, ob es für mich passt Smile

besten dank nochmal und grüße
Lars
Private Nachricht senden Benutzer-Profile anzeigen
 
L_Lars
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 13.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2012, 12:39     Titel:
  Antworten mit Zitat      
Hallo Jan!

Da ich weiß wie das Fehler Fenster heißt, kann ich dies einfach einsetzen!

Ich habe deine c Funktion gerade getestet und es funktioniert wunderbar!!!

Vielen Dank dafür, das bringt mich wirklich gut weiter!

Gruß
Lars[/quote]
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.