Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

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.

Empfohlene Antworten

Veröffentlicht

Hallo,

ich benutze ShellExecute so:


if(!ShellExecute(NULL, "open", path, NULL, NULL, SW_SHOWNORMAL))
AfxMessageBox("Fehler : Datei nicht gefunden",MB_OK | MB_ICONEXCLAMATION);

[/PHP]

Aber es funk nicht richtig.

Wie kann ich eigentlich überprüfen ob die Datei durch ShellExecute ausführbar ist

Bzw. sich im diesem Verzeichnis befindet.

  • Autor
Original geschrieben von Klotzkopp

Der Rückgabewert von ShellExecute ist nicht BOOL.

MSDN:

Return Value

Returns a value greater than 32 if successful, or an error value that is less than or equal to 32 otherwise. The following table lists the error values.

...

merci Klotzkopp :bimei

  • Autor

aber trozdem komme ich nicht weiter :(

da code


HINSTANCE hst = ShellExecute(NULL, "open", path, NULL, NULL, SW_SHOWNORMAL);
if(hst == 32 )
AfxMessageBox("Fehler : Datei nicht gefunden",MB_OK | MB_ICONEXCLAMATION);

[/PHP]

  • Autor
Original geschrieben von FinalFantasy

Und was ist der Fehler? Bzw. was funtkioniert nicht wie es soll?

error C2446: '==' : Keine Konvertierung von 'const int' in 'struct HINSTANCE__ *'

Original geschrieben von FinalFantasy

Warum nimmst du als Returnwert für ShellExecute HINSTANCE und nicht einfach einen int?

etwa so:


int hst = ShellExecute(NULL, "open", path, NULL, NULL, SW_SHOWNORMAL);
[/PHP]

dann:

error C2440: 'initializing' : 'struct HINSTANCE__ *' kann nicht in 'int' konvertiert werden

Ahja, dann ist eigentlich alles klar. ShellExecute gibt eine Struktur vom Typ HINSTANCE zurück. Die Struktur kannst du natürlich nicht einfach mit 32 Vergleichen, aus genau dem selben Grund, kann die Struktur nicht einfach in einen int umgewandelt werden.

Da wirst du dir mal den Aufbau der Struktur anschauen müssen, ob da vielleicht ein Returnwert irgendwo drinsteckt.

Ausserdem hinkt dein Vergleich sowieso. HINSTANCE gibt einen Wert kleiner gleich 32 zurück, für den Fehlerfall, also sollte der Vergleich auch (hst <= 32) heissen.

Hab jetzt auf die Schnelle keine Infos zum HINSTANCE Typ in der MSDN gefunden, sollte aber beim Debuggen, oder im VStudio relativ leicht zum rausfinden sein.

Ansonsten würde ich Vorschlagen, die Funktionen WinExec() oder system() statt deinem ShellExecute zu benutzen. Die sind wesentlich einfacher, und soweit ich das erkennen nutzt du nichts von ShellExecute, dass die anderen beiden nicht auch könnten.

HINSTANCE ist ein Handle-Typ. Handles können Strukturen, Zeiger oder was auch immer sein, das soll den Programmierer nicht interessieren.

Handles sind als opak anzusehen, d.h. die innere Repräsentation ist nicht relevant, und kann sich ändern.

In diesem Fall ist es wirklich so, dass ShellExecute kein richtiges HINSTANCE zurückgibt. Das sagt übrigens auch die MSDN, hätte ich vielleicht noch mit zitieren sollen.

Also:

int seresult = reinterpret_cast<int>(ShellExecute(...

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

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.