Подскажите, в чем ошибка в использовании WINAPI функции ShellExecute

 

Здравствуйте. Использую следующий код (для теста):

#import "kernel32.dll"

#import "Shell32.dll"

int ShellExecute(string hwnd, string lpszOp, string lpszFile, string lpszParams, string lpszDir, int fsShowCmd);
int init()
{
ShellExecute(NULL, "open", "%windir%\system32\cmd.exe", NULL, NULL, 1);
return(0);

}

Командная строка не открывается...

Что не правильно?

 

ShellExecute(NULL, "open", "cmd.exe", NULL, NULL, 1);

А так?

 

Не - мне нужно, чтобы можно было запускать программу из указанного пути

Можно ли так сделать: %windir%\system32\cmd.exe /c winrar.exe - т.е. чтобы можно было из-под командной строки запускать файл и это все в mql4?

 
TheXpert:

ShellExecute(NULL, "open", "cmd.exe", NULL, NULL, 1);

А так?



Так у меня тоже не заработало...
 
Тогда надо таки нормальный путь подставлять. Правда непонятно зачем вообще использовать cmd...
 

Почему hwnd задан с типом string, если должен быть int? Видимо поэтому и не работает.

Кроме того, для строк нужно указывать не NULL, а неинициализированную строковую переменную. Т.е. вот так:

string nullstr;

ShellExecute(NULL, "open", "%windir%\system32\cmd.exe", nullstr, nullstr, 1);

 
ShellExecute? А что такое бывает? Может ShellExecuteA? Что пишет лог?

А вообще... мокловцы традиционно изменили семантику основ
(но не со зла, наверно)- так что системную ошибку GetLastError()
вы не достанете по определению- а то бы и это пригодилось.
 
jartmailru:
ShellExecute? А что такое бывает? Может ShellExecuteA? Что пишет лог?

А вообще... мокловцы традиционно изменили семантику основ
(но не со зла, наверно)- так что системную ошибку GetLastError()
вы не достанете по определению- а то бы и это пригодилось.

Можно вот этим:

RtlGetLastWin32Error();
 
jartmailru:

А вообще... мокловцы традиционно изменили семантику основ
(но не со зла, наверно)- так что системную ошибку GetLastError()
вы не достанете по определению- а то бы и это пригодилось.

или добавить int вот так

int GetLastError(int );

 

А библиотек я те подключаю? kernel32.dll, Shell32.dll - больше ничего не нужно?


cmd - это просто для теста и проверки работы поиска приложений через переменные среды %windir% и другие

 
chief1973:

А библиотек я те подключаю? kernel32.dll, Shell32.dll - больше ничего не нужно?

https://www.mql4.com/ru/search#!keyword=shellexecutea