none
WinExec Pfad vom Benutzer eingeben lassen RRS feed

  • Frage

  • Ich würde es gern so machen das der Benutzer einen Befehl in ein Editcontrol eingibt aund dann auf Ausführen klicken kann, damit der Befehl ausgeführt wird. Jedoch funktioniert das alles nicht so ganz:

    void CcitDlg::OnBnClickedButtonExecute()
    {
    	CString str;
    	m_editExecute.GetWindowText(str);
    	WinExec((LPCSTR)(LPCTSTR)str, TRUE);
    }
    
    noch funktioniert:

    ShellExecute(NULL, str, _T(""), _T(""), _T(""), TRUE);
    
    Wenn ich nun z.B. notepad.exe eingabe passiert nicht. C:\Windows\notepad.exe geht genauso wenig. Woran liegt das?


    VisualCPlusPlus
    Donnerstag, 10. November 2011 15:04

Antworten

    1. WinExec ist alter Schrott. Verwende es nicht
    2. Was sagt GetLastError?
    3. Warum diese eigentümlichen casts beim Aufruf von WinExec?
    4. Notepad liegt in C:\Windows\system32\notepad.exe
    5. notepad.exe alleine müsste sich starten lassen.
    6. Wie wäre es bei ShellExecute mit dem Lesen der Doku: http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx
      1. Parameter NULL = Windows Handle
      2. Parameter "OPEN" oder NULL
      3. Parameter Programmname

     


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    • Als Antwort markiert KK Senior Donnerstag, 10. November 2011 18:29
    Donnerstag, 10. November 2011 16:38
    Moderator

Alle Antworten

    1. WinExec ist alter Schrott. Verwende es nicht
    2. Was sagt GetLastError?
    3. Warum diese eigentümlichen casts beim Aufruf von WinExec?
    4. Notepad liegt in C:\Windows\system32\notepad.exe
    5. notepad.exe alleine müsste sich starten lassen.
    6. Wie wäre es bei ShellExecute mit dem Lesen der Doku: http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx
      1. Parameter NULL = Windows Handle
      2. Parameter "OPEN" oder NULL
      3. Parameter Programmname

     


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    • Als Antwort markiert KK Senior Donnerstag, 10. November 2011 18:29
    Donnerstag, 10. November 2011 16:38
    Moderator
  • zu 1. Dann benutze ich jetzt ShellExecute

    zu 2. Hab ich nicht nachgeguckt

    zu 3. Ich habs einfach nicht anders hinbekommen, so schien die Konvertierung aber zu Funktionieren

    zu 4. Bei mir liegt notepad in C:\Windows\

    zu 5. Jetzt lässt es sich auch starten

    zu 6. Nachdem ich die Doku ngelesen habe hab ich auch die Parameter richtig geordnet, sodass es funktioniert

    Also geht jetzt alles ganz normal. Danke.


    VisualCPlusPlus
    Donnerstag, 10. November 2011 18:29
  • Das mit WinExec wäre so einfacher und korrekter gewesen:

            CString str;
            m_editExecute.GetWindowText(str);
            WinExec(str.GetBuffer(0), TRUE);

    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Freitag, 11. November 2011 06:53
    Moderator