2013-12-08 3 views
-5

Я пытаюсь использовать ShellExecute, но он просто не хочет работать. Я пробовал много вещей с других форумов, но я не нашел подходящего решения, так как я не хочу использовать System()!ShellExecute не работает C++

Вот часть моего кода:

void myClass::executeWMP() 
{ 
    ShellExecute(???); 
    cout << "\n"; 
} 

Для начала я хочу, чтобы выполнить Windows Media Player, с пути:

«C: \ Program Files (x86) \ Windows Media Player \ wmplayer.exe "

А может кто-нибудь объяснить параметры функции?

* Я использую Windows 7

+0

Я сожалею о своей плохой грамматике, мой первый язык не английский! –

+0

okay: поэтому я пытаюсь использовать это: ShellExecute (HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, nShowCmd); но я не знаю, как я могу положить путь, и где. И я не понимаю, зачем мне эти шесть параметров. –

+2

Документация объясняет параметры. Вы должны это прочитать. –

ответ

1

Я беру это ваш ссылаясь на оболочку выполнить из библиотеки окна: http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx

ShellExecute(nullptr,L"open",L"C:\\Program Files (x86)\\Windows Media Player\\wmplayer.exe",nullptr,nullptr,SW_SHOW) 

Первым параметром является дескриптор окна, может быть пустым.

Второй параметр - операция, выполняемая в файле.

Третий параметр относится к файлу.

Четвертый параметр относится к тому, какой рабочий каталог будет изменен при открытии файла, может быть нулевым.

Пятый параметр относится в каком режиме, чтобы открыть файл/программу.

+0

спасибо! Оно работает. но если я набираю «open» для второго параметра, компилятор говорит, что тип несовместим? –

+1

@HansPeter Прочитать сообщение об ошибке. Это говорит намного больше. В нем говорится, что функция ожидает LPCWSTR, но вы передаете 'char *'. Так что делайте то, что он говорит. Пропустите широкую строку: 'L" open ". Если вы не знаете о узких и широких струнах, остановите то, что вы делаете, и узнайте о них. Наконец, не используйте 'ShellExecute'. Используйте 'CreateProcess'. –

+0

Я вижу. @ Давид Хеффернан да, я думаю, мне нужно взглянуть на узкие и широкие струны и попробовать CreateProcess, спасибо! –

3

Если вы хотите запустить определенный исполняемый файл, без учета файловых ассоциаций в реестре, то вы должны использовать CreateProcess, не ShellExecute.

LPCWSTR app = L"C:\\Program Files (x86)\\Windows Media Player\\wmplayer.exe"; 
PROCESS_INFORMATION pi; 
STARTUPINFO si = { sizeof si }; 
CreateProcessW(app, app, 0, 0, 0, 0, 0, 0, &si, &pi); 
CloseHandle(pi.hProcess); 
Closehandle(pi.hThread); 
+1

Это правильно. Конечно, в 'CreateProcess' есть еще больше параметров, чем' ShellExecute'. И ручки закрываются. Если он не может называть 'ShellExecute', мало надежды на вызов' CreateProcess'. Единственное исключение из вашего утверждения - когда вам нужно принудительно повысить высоту с помощью глагола 'runas'. –

+0

спасибо, я тоже видел эту функцию, но решение David Kron работает на меня! –

+0

@DavidHeffernan: Спасибо. –

Смежные вопросы