# exe aus CODESYS TargetVisu heraus starten



## Simel (4 Dezember 2014)

Hallo 

Habe schon gegoogelt und auch sonst nichts gefunden. 
Gibt es eine Möglichkeit, aus der CODESYS TargetVisu ein beliebiges anderes Windows Programm zu starten?

Vielen Dank für einen Tipp.


----------



## oliver.tonn (4 Dezember 2014)

V2 oder V3


----------



## Simel (5 Dezember 2014)

Es wird V3 verwendet.


----------



## oliver.tonn (6 Dezember 2014)

Hallo Simel,
richtig gut kenne ich mich nur mit der Visu von V2 aus, wobei ich mittlerweile wohl eher kannte sagen muss. Ich habe bei der ABB Tests mit der Visu durchgeführt und die Benutzerdoku geschrieben. Mit der Visu von V3 habe ich praktisch noch nicht gearbeitet. Da mich die Sache jedoch interessiert habe ich Dir etwas Arbeit abgenommen und mal selber recherchiert. Es geht, es gibt sogenannte interne Kommandos bei Buttons (vielleicht auch noch bei anderen Elementen) die unter anderem das können.


----------



## brub (6 Dezember 2014)

Hallo,
aus der Visu selber heraus weiß ich direkt leider keinen Weg, allerdings könntest du den Umweg über die Software gehen.
Ich habe mal , allerdings unter einer Linux-Umgebung, über die Funktion "*SysProcessExecuteCommand*" aus der Bibliothek SysProcess ein externes Skript gestartet, das sollte theoretisch auch in einer Windows-Umgebung mit z.B einer .exe machbar sein.


----------



## Simel (7 Dezember 2014)

Vielen Dank oliver.tom und brub!

Es ist die Funktion "Internes Kommando/Programm beim Client ausführen", das den gewünschten Effekt hat.
Dort dann als ersten Parameter eine STRING(255) Variable angeben, in welchem der Pfad und Programmname steht (z.B. 'c:/tools/tool1.exe') und es funktioniert.
Eigenartigerweise wird die Einstellung "Programm beim Client ausführen" beim wiederholten öffnen wieder nicht mehr angezeigt. Der Parameter bleibt und auf den kommts offenbar an..

Und vielleicht hilft es ja noch jemand anderem, auch wenn es natürlich das falsche Forum ist, sorry, aber es gehört zu meinem Problem hier: Mein Tool soll nur einmal gestartet werden und bei jedem Start über diesen Button wieder zum Vorschein kommen.
Es ist in C# geschrieben und dazu habe ich auf stackoverflow das richtige gefunden:

http://stackoverflow.com/questions/...ms-application-and-how-to-get-reference-on-it
http://stackoverflow.com/questions/...to-foreground-when-it-has-showintaskbar-false

und das sieht bei mir jetzt so aus und funktioniert:

```
namespace IW.Test
{
    using System;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;

    static class Program
    {
        [DllImport("USER32.DLL")]
        public static extern bool SetForegroundWindow(IntPtr hWnd);

[STAThread]
        static void Main()
        {
            // Singleton App : Es soll nur eine geben..
            Process thisProcess = Process.GetCurrentProcess();
            Process[] allProcesses = Process.GetProcessesByName(thisProcess.ProcessName);
            Process otherProcess = null;
            foreach (Process p in allProcesses)
            {
                if ((p.Id != thisProcess.Id) && (p.MainModule.FileName == thisProcess.MainModule.FileName))
                {
                    otherProcess = p;
                    break;
                }
            }

            if (otherProcess != null)
            {
                //note IntPtr expected by API calls.
                IntPtr hWnd = otherProcess.MainWindowHandle;
               
                // Verify that it is a running process.
                if (hWnd != IntPtr.Zero)
                {
                    // Make existing process the foreground application
                    SetForegroundWindow(hWnd);

                    // and kill this one
                    thisProcess.Kill();
                }
            }
            else
            {
                //run your app here
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new MainWindow());
            }
        }       
    }
}
```


----------



## rKtiC (26 Januar 2016)

Hallo zusammen,

ich schließe mich hier mal an, da ich das gleiche Problem habe.

Ich möchte Skype über die Webvisualisierung starten. Dazu habe ich eine Schaltfläche erstellt und in den Eigenschaften unter "Eingabekonfiguration" unter "OnMouseClick" "Internes Kommando" gewählt.
Dort habe ich den von Simel vorgeschlagenen Befehlt "Programm beim Client ausführen" probiert und als 1. Parameter den Pfad "C:\Program Files (x86)\Skype\Phone\Skype.exe" gewählt.



Wenn ich jetzt meinen Laptop mit der SPS (HBM PMX) verbinde, um mein Codesys-Programm (Codesys 3.5) zu aktualisieren, kann ich Skype über die Schaltfläche in der Visualisierung in Codesys starten.
Von einem anderen Gerät im Netzwerk (Skype ist im gleichen Verzeichnis installiert) funktioniert der Start von Skype nicht.

Was mache ich falsch?

Gruß rKtiC


----------

