header in C# einbinden

budili

Mitglied
Moin Leutz,

ich arbeite z.Z. mit C# und würde nun gerne ShellExecute(...) benutzen.

Also normalerweise würde ich ja nun einfach den Header inkludieren:
Code:
#include <shellapi.h>

Da aber C# keine Header hat, sondern nur usings (Namensräume) verwendet,
wie mache ich das da

bzw. welcher Using enthält die "ShellExecute"
 
Zuletzt bearbeitet:
die shellexecute wird doch nur verwendet um dateien aufzurufen, oder?

das kannst du in c# mit System.Process.Start(...) erledigen.
 
Hm naja, mit der "ShellExecute" hat man die Möglichkeit,
Dateien auszuführen, Explorer öffnen, Dateien zu drucken etc.

Ich wollte nur mal was testen und aus meiner Anwendung was drucken,
mit der Shell ginge das relativ einfach:

Code:
ShellExecute(Handle,"print","C:\\test.txt",NULL, NULL, SW_NORMAL);

Aber um "Unmanaged Code" zu vermeiden und um "Portierbar" zu bleiben,
muss ich auf die .NET Funktionen zurück greifen.

Mit "System.Diagnostics.Process" soll es anscheinend genauso gut gehen ...
 
Hm also ich habs jetzt etwas umständlicher gemacht,
aber es funktioniert :)

Hab ne extra Klasse dafür erstellt.
Falls jemand den Code haben/sehen möchte, dann meldet euch.

Gruß
Budi
 
klar, stell die klasse doch einfach hier rein. ist immer gut keine "unvollständig" abgeschlossenen beiträge im forum zu haben ;)
 
Okay ...

Code:
class print
    {
        // Win Fehlercodes
        const int ERROR_FILE_NOT_FOUND = 2;
        const int ERROR_ACCESS_DENIED = 5;

        public void PrintData()
        {
            Process printProcess = new Process();

            try
            {
                // Dateipfad der Datei, die gedruckt werden soll
                string printData = "c:\\lang.txt";               

                // Prozessressourcen werden bestimmt
                // diese Ressourcen werden an den Prozess übergeben
                printProcess.StartInfo.FileName = printData;
                printProcess.StartInfo.Verb = "Print";
                printProcess.StartInfo.CreateNoWindow = true;
                
                //Prozess ausgeführt
                printProcess.Start();             
            }
            
            // Ausnahmen
            catch (Win32Exception e)
            {
                if (e.NativeErrorCode == ERROR_FILE_NOT_FOUND)
                {
                    MessageBox.Show(e.Message + ". Pruefen Sie den Pfad nochmal!");
                }

                else if (e.NativeErrorCode == ERROR_ACCESS_DENIED)
                {
                    
                    MessageBox.Show(e.Message +
                        ". Sie haben nicht die Rechte um diese Datei zu Drucken.");
                }
            }
        }
    }

anstatt den String printData statisch zu deklarieren, müsste man noch
ein kleines Fenster erstellen, in dem der Benutzer eine Datei wählt.
(OpenFileDialog, printDialog etc. )
 

Neue Beiträge

Zurück