Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.13;
Скачать: CL | DM;

Вниз

Функция 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 вся ветка

Текущий архив: 2006.08.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.031 c
15-1151643721
Loginov Dmitry
2006-06-30 09:02
2006.08.13
Спамеры!


3-1149506429
DmiSb
2006-06-05 15:20
2006.08.13
Какие компоненты лучше использовать для доступа к MS SQL ?


1-1151681610
NewCheloveck555
2006-06-30 19:33
2006.08.13
Как в TWebBrowser заполнить формы и нажать на кнопку?


2-1153736374
rlzz
2006-07-24 14:19
2006.08.13
ПРо поиск фаилов (Теоритеческий)


2-1153656846
Варяг
2006-07-23 16:14
2006.08.13
Интересный глюк с именем таблицы