Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
chief1973
260
chief1973  

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

#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);

}

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

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

Комбинатор
16631
Комбинатор  

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

А так?

chief1973
260
chief1973  

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

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

chief1973
260
chief1973  
TheXpert:

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

А так?



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

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

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

string nullstr;

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

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

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

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

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

RtlGetLastWin32Error();
o_o
Модератор
24397
o_o  
jartmailru:

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

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

int GetLastError(int );

chief1973
260
chief1973  

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


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

o_o
Модератор
24397
o_o  
chief1973:

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

https://www.mql4.com/ru/search#!keyword=shellexecutea
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий