ShellExecute
, Подкажите аналог...
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.5] |
|
|
ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
| Страницы: (3) 1 2 [3] все ( Перейти к последнему сообщению ) |
ShellExecute
, Подкажите аналог...
|
Сообщ.
#31
,
|
|
|
|
Virtuals
Уже много раз говорилось, что для каждой цели есть свои средства. Так же точно и WinExec может служить не хуже CreateProcess. Каждый для своей задачи. Выше я описал особенность WinExec. В случае с CreateProcess реализовать такую функцию будет значительно сложнее. Зачем усложнять себе жизнь? Добавлено Кроме этого есть аргументы? |
|
Сообщ.
#32
,
|
|
|
|
ладно.....
для спорщиков. WinExec всего лиш оболочка для CreateProcess в реализации от мс выглядит так: W2K Copyright © Microsoft Corporation ![]() ![]() /* * Code taken from kernel32.dll */ #define DEFAULT_WAIT_FOR_INPUT_IDLE_TIMEOUT 30000 UINT WinExecN( LPCTSTR lpCmdLine, UINT uCmdShow ) { STARTUPINFO StartupInfo; PROCESS_INFORMATION ProcessInformation; BOOL CreateProcessStatus; DWORD ErrorCode; ZeroMemory(&StartupInfo,sizeof(StartupInfo)); StartupInfo.cb = sizeof(StartupInfo); StartupInfo.dwFlags = STARTF_USESHOWWINDOW; StartupInfo.wShowWindow = (WORD)uCmdShow; CreateProcessStatus = CreateProcess( NULL, (LPTSTR)lpCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &StartupInfo, &ProcessInformation ); if ( CreateProcessStatus ) { // // Wait for the started process to go idle. If it doesn't go idle in // 10 seconds, return anyway. // WaitForInputIdle(ProcessInformation.hProcess, DEFAULT_WAIT_FOR_INPUT_IDLE_TIMEOUT); CloseHandle(ProcessInformation.hProcess); CloseHandle(ProcessInformation.hThread); return 33; } else { // // If CreateProcess failed, then look at GetLastError to determine // appropriate return code. // ErrorCode = GetLastError(); switch ( ErrorCode ) { case ERROR_FILE_NOT_FOUND: return 2; case ERROR_PATH_NOT_FOUND: return 3; case ERROR_BAD_EXE_FORMAT: return 11; default: return 0; } } } |
|
Сообщ.
#33
,
|
|
|
|
Цитата Срочно меняй профессию, это не твое. Моя профессия - студент университета, так что здесь я вас не послушаю . Это первое.Второе - краткость, минимализм - разве это не главный принцип программирования? Почитайте Дениса Ритчи, разработчика C. 2 Virtuals где именно в MSDN написано про текст, с другого приложения? А на счет кода с WinExec, да я это давно подозревал(хотя точно не знал), так как писал выше, WinExec есть в двух вариантах. Так зачем писать дважды одно и тоже? 2 остальным - WinExec есть у Vista, почему же она есть, если устаревшая? Майкрософт долго будет держать в ядре старые апишки для совместимости. |
|
Сообщ.
#34
,
|
|
|
|
Цитата Virtuals @ ладно..... для спорщиков. WinExec всего лиш оболочка для CreateProcess в реализации от мс выглядит так: И? Для спорщиков. Чтобы понять, что сказать хотел? |
|
Сообщ.
#35
,
|
|
|
|
Цитата Демо @ Цитата Virtuals @ ладно..... для спорщиков. WinExec всего лиш оболочка для CreateProcess в реализации от мс выглядит так: И? Для спорщиков. Чтобы понять, что сказать хотел? сказать хотел только то что, WinExec есть оболочка для CreateProcess и более ничего, с конкретным примером от мс, /как у них это реализованно/ Добавлено Цитата _Raven @ 2 Virtuals где именно в MSDN написано про текст, с другого приложения? This function cannot retrieve the text of an edit control in another application. Remarks This function causes a WM_GETTEXT message to be sent to the specified window or control. This function cannot retrieve the text of an edit control in another application. это не оно? |
|
Сообщ.
#36
,
|
|
|
|
Цитата Virtuals @ Функция GetWindowText в мсдн сказанно что НЕЗЯ читать текст принадлежащий другому приложению, /наверное всем понятно условие, которое стоит в функции/ НО если.. в начале ... function GetWindowText(hWnd: HWND; lpString: PChar; nMaxCount: LongInt): LRESULT;stdcall; var tmr:LRESULT; begin tmr:=SendMessage(hWnd, WM_GETTEXT, WPARAM(nMaxCount),lparam(lpString)); result:=tmr; end; то мсдн идет лесом. извиняюсь за отвлеченный пример, но он достаточно показателен бред. Цитата с MSDN, как с этим связана? Ты неправильно все понял. Думаешь изобрел велосипед, узнав, что текст можна получать с помошью WM_GETTEXT? Или что ты пытаешся доказать? Зачем заново писать WinExec, если он уже есть. |
|
Сообщ.
#37
,
|
|
|
|
я WinExec заново писать никого не вынуждаю, просто чаще мне функционала WinExec не хватает. а заполнить все структуры для CreateProcess нет ничего сложного. примеры привел выше как на паскале так и в реализации мс в вин2к
если рекомендуют использовать CreateProcess так почему бы и нет? кусок исходного кода WinExec привел для того чтобы показать возможности использования CreateProcess в том числе и Цитата Кроме простоты, функция WinExec имет одну весьма полезную особенность - возврат из нее происходит, когда приложение полностью стартует - начнет принимать сообщения. Цитата Выше я описал особенность WinExec. В случае с CreateProcess реализовать такую функцию будет значительно сложнее. Цитата Думаешь изобрел велосипед, узнав, что текст можна получать с помошью WM_GETTEXT? велосипед изобретать не собираюсь, GetWindowText реализованна с помощью WM_GETTEXT НО стоит условие "если чужое окно, то облом" /исходный код искать влом, но поверьте на слово так оно и есть/ также WinExec реализованна с помощью все той-же CreateProcess /что и показал выше/ ИМХО и не получится так что в следующих версиях винды в WinExec появится условие /запускать только одобренные мс$ приложения /по аналогии с GetWindowText |
|
Сообщ.
#38
,
|
|
|
|
Virtuals
Всё-таки, зачем сложно, если можно просто? |