Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];

Вниз

Функция ShellExecute   Найти похожие ветки 

 
Grant   (2006-04-11 12:27) [0]

Всем привет. Возник такой вопрос: Если мне надо запустить какую-нибудь прогу с помощью ShellExecute, то как мне узнать что надо передавать в качестве значения её четвертого параметра?(с другими параметрами все ясно)

HINSTANCE ShellExecute(

   HWND hwnd,
   LPCTSTR lpOperation,
   LPCTSTR lpFile,
   LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
   LPCTSTR lpDirectory,
   INT nShowCmd );


 
Сергей М. ©   (2006-04-11 12:40) [1]

Если ком.строка запуска "проги" подразумевает наличие неких параметров, то они как раз и могут быть переданы тобой 4-м параметром.

Например, пусть ком. строка может выглядеть как "MyProga /?"
Тогда 4-й параметр - это "/?"

Если ком строка не содержит ключей, то передавай либо nil либо ""


 
Leonid Troyanovsky ©   (2006-04-11 13:07) [2]


> Сергей М. ©   (11.04.06 12:40) [1]

> либо ""


Только nil, бо  LPCTSTR lpParameters.

--
Regards, LVT.


 
Сергей М. ©   (2006-04-11 13:18) [3]


> Leonid Troyanovsky ©   (11.04.06 13:07) [2]


С чего бы вдруг ?

Вот, скажем, С-шный прототип другой ф-ции

int MessageBox(
  HWND hWnd, // handle of owner window
   LPCTSTR lpText, // address of text in message box
   LPCTSTR lpCaption, // address of title of message box  
   UINT uType  // style of message box
  );

А вот соотв. дельфийский прототип

function MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;

Что же мне мешает сделать такой вызов:
MessageBox(..., "", "", ...)

Ничто.

Так чем же ShellExecute() в этом плане отличается от MessageBox, если в ее дельфийском прототипе точно так же LPCTSTR-типу соответствует PChar-тип ?

Параметром "" я передаю "пустую" строку (содержащую единственный символ нуль-терминатора), и это допустимо и с т.з. компилятора и с т.з. внутренней логики ShellExecute()

В чем я ошибаюсь ?


 
Игорь Шевченко ©   (2006-04-11 13:20) [4]


> Только nil, бо  LPCTSTR lpParameters.


Все зависит от реализации функции. Некоторые по-разному интерпретируют nil и пустую строку.


 
Leonid Troyanovsky ©   (2006-04-11 13:27) [5]


> Сергей М. ©   (11.04.06 13:18) [3]

> С чего бы вдруг ?


If lpFile specifies a document file, lpParameters should be NULL.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2006-04-11 13:28) [6]


> Игорь Шевченко ©   (11.04.06 13:20) [4]

> Все зависит от реализации функции. Некоторые по-разному
> интерпретируют nil и пустую строку.


А я про конкретный случай.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2006-04-11 13:43) [7]


> Leonid Troyanovsky ©   (11.04.06 13:27) [5]

> If lpFile specifies a document file, lpParameters should
> be NULL.


Чего-то меня перекосило :)
Ладно, пусть будет "".

--
Regards, LVT.


 
Сергей М. ©   (2006-04-11 13:51) [8]


> Leonid Troyanovsky ©   (11.04.06 13:43) [7]


> Чего-то меня перекосило


Вот и мне так показалось.

Бо should be, как понимаешь, не есть то же самое, что и must be.


 
fellix   (2006-04-11 13:54) [9]


> Игорь Шевченко ©   (11.04.06 13:20) [4]


В данном случае это особенность компилятора Delphi: создается константа - пустая null-terminated string, а как параметр передается ссылка на нее.


program test;
uses Windows, ShellApi;
begin
 ShellExecute(0, "", "cmd", "", "", SW_SHOWNORMAL);
end.

------------------------------------------------------------

test.dpr.6: ShellExecute(0, "", "cmd", "", "", SW_SHOWNORMAL);
00403B20 6A01             push $01
00403B22 68443B4000       push $00403b44
00403B27 68443B4000       push $00403b44
00403B2C 68483B4000       push $00403b48
00403B31 68443B4000       push $00403b44
00403B36 6A00             push $00
00403B38 E83BFFFFFF       call ShellExecute
test.dpr.7: end.
00403B3D E806F1FFFF       call @Halt0
00403B42 0000
00403B44 0000
00403B46 0000


 
Сергей М. ©   (2006-04-11 13:57) [10]


> fellix   (11.04.06 13:54) [9]


> В данном случае это особенность компилятора Delphi


И в данном и не в данном - это "особенность" любого компилятора, не обладающего ИИ.


 
fellix   (2006-04-11 14:08) [11]


> Сергей М. ©   (11.04.06 13:57) [10]

Давай не будем говорить о любом.
В прототипе указан параметр LPCTSTR (PChar), поэтому "лобовая" реакция - сообщение о несоответствии типов, а подстановка адреса константы - уже элемент "разумного поведения".


 
Anatoly Podgoretsky ©   (2006-04-11 14:17) [12]

Сергей М. ©   (11.04.06 13:57) [10]
Давай не будем про любой компилятор!
Другой компилятор вполне может передать пустую строку, а не nil, а другой наоборот, а вот работа функции может сильно зависить от этого и в АПИ таких место много, где в случае nil один результат, а в случае пустой строки другой результат.


 
Grant   (2006-04-11 14:39) [13]

Всем спасибо.


 
Sour Smile   (2006-04-20 13:06) [14]


> fellix   (11.04.06 13:54) [9]
>
> test.dpr.6: ShellExecute(0, "", "cmd", "", "", SW_SHOWNORMAL);
>
> 00403B20 6A01             push $01
> 00403B22 68443B4000       push $00403b44
> 00403B27 68443B4000       push $00403b44
> 00403B2C 68483B4000       push $00403b48
> 00403B31 68443B4000       push $00403b44
> 00403B36 6A00             push $00
> 00403B38 E83BFFFFFF       call ShellExecute
> test.dpr.7: end.
> 00403B3D E806F1FFFF       call @Halt0
> 00403B42 0000
> 00403B44 0000
> 00403B46 0000

Извините, что вмешиваюсь не совсем по теме, но как это тебе удалось скопировать код из окна CPU? Или ты это ручками набирал?


 
fellix   (2006-04-20 13:33) [15]


> Sour Smile   (20.04.06 13:06) [14]


Поищи CpuWHelper (напр., на delphipages).


 
Sour Smile   (2006-04-20 13:55) [16]


> fellix   (20.04.06 13:33) [15]
> Поищи CpuWHelper (напр., на delphipages).

Огромное спасибо! :)



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.365 c
15-1153352226
MeF Dei Corvi
2006-07-20 03:37
2006.08.13
Читерство в коде


2-1153605815
Забывчивый
2006-07-23 02:03
2006.08.13
Треугольник


15-1151906106
Кручен-Верчен
2006-07-03 09:55
2006.08.13
Появилась куча свободного времени.


2-1153926934
Slava812
2006-07-26 19:15
2006.08.13
Пару вопросиков


11-1131278061
Haker
2005-11-06 14:54
2006.08.13
wordwrap в KOLRichEdit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский