На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
Страницы: (3) 1 [2] 3  все  ( Перейти к последнему сообщению )  
> ShellExecute , Подкажите аналог...
    у меня кстате тоже иногда ShellExecute глючит на некоторых компах запускает а на некоторых нет ( и непонятно в чём дело. единственое отличие которое есть это то что папки в которых хранятся программа там где работает созданы через винду, а там где не работает созданы через cmd md имя_папки.
      Abbadon. А зачем тебе этот ShellExecute? Юзай WinExec и будет тебе счастье. Надежная, проверенная временем функция :lol: . Еще один аналог - System, из MSVCRT.DLL.
        Перенаправлением занимается интерпритатор командной строки, вот его и запускай
          О такую давнюю тему подняли. Я и не думал, что ею уже кто-то заинтересуется - а тут раз уведомление по почте (мда хороший таки форум ИСХОДНИКИ ;))
          Я, если не ошибаюсь решил проблему тем, что в Delphi есть ShellExecute, просто в USES надо было добавить WINAPI или SYSTEM.
          А вообще для простых операций стал пользоваться WinExec.
            Да здраствует прошлый век, век Win 3.1
              Цитата Anatoly Podgoretsky @
              Да здраствует прошлый век, век Win 3.1


              Это к чему?
                Блин, ну что за манера левые инструменты использовать???
                ShellExecute хороша тем, что может выполнять действия оболички по типу "открыть" или "редактировать" - применительно к документам.
                А exe'шники лучше и проще запускать через CreateProcess или на худой конец WinExec.
                  Цитата Anatoly Podgoretsky @
                  Да здраствует прошлый век, век Win 3.1

                  Обоснуйте, чем вам не нравится WinExec? просто и удобно
                    Цитата _Raven @
                    Обоснуйте, чем вам не нравится WinExec?


                    Обоснование находится в справке, которую рекомендуется читать до использования.
                      Цитата Anatoly Podgoretsky @
                      Обоснование находится в справке, которую рекомендуется читать до использования.

                      А я читал! И что там такого? Написано, что не рекомендуется применять WinExec, потому, что она устаревшая. Это не причина. Вопреки распространенному мнению, эта функция реализована в 2-х вариантах, как 16-битная и как 32-х. Никакого переключения в 16-битный режим не происходит и потерь скорости тоже нет. А еще в хелпе рекомендуется юзать CreateProcess. Это я, для того, чтобы запустить друой екзе, буду создавать 2 структуры и расписывать кучу параметров? Нет, не буду!
                        Хм а чего то сложного....
                        где основу взял, не помню...
                        ExpandedWrap disabled
                          function gsSysSpawn(const CmdLine: string; Visibility : integer): integer;
                          var
                             zCmdLine:array[0..512] of char;
                             zCurDir:array[0..255] of char;
                             WorkDir:String;
                             StartupInfo:TStartupInfo;
                             ProcessInfo:TProcessInformation;
                          //   r: DWord;
                          begin
                             StrPCopy(zCmdLine,CmdLine);
                             GetDir(0,WorkDir);
                             StrPCopy(zCurDir,WorkDir);
                             FillChar(StartupInfo,Sizeof(StartupInfo),#0);
                             StartupInfo.cb := Sizeof(StartupInfo);
                             StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
                             StartupInfo.wShowWindow := Visibility;
                             if not CreateProcess(
                                nil,
                                zCmdLine,                      { pointer to command line string }
                                nil,                           { pointer to process security attributes}
                                nil,                           { pointer to thread security attributes }
                                false,                         { handle inheritance flag }
                                {CREATE_NEW_CONSOLE or}          { creation flags }
                                NORMAL_PRIORITY_CLASS,
                                nil,                           { pointer to new environment block }
                                nil,                           { pointer to current directory name }
                                StartupInfo,                   { pointer to STARTUPINFO }
                                ProcessInfo) then Result := -1 { pointer to PROCESS_INF }
                             else
                             begin
                          {      CloseHandle(ProcessInfo.hThread);
                                WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
                                CloseHandle(ProcessInfo.hProcess);
                                GetExitCodeProcess(ProcessInfo.hProcess,r);}
                                Result := ProcessInfo.hProcess;
                             end;
                          end;
                          Virtuals Ничего сложного нет. Просто это не дзенно - кода много -> смысл тот же, что и в одной WinExec.
                            Кроме простоты, функция WinExec имет одну весьма полезную особенность - возврат из нее происходит, когда приложение полностью стартует - начнет принимать сообщения.
                              Цитата _Raven @
                              А еще в хелпе рекомендуется юзать CreateProcess. Это я, для того, чтобы запустить друой екзе, буду создавать 2 структуры и расписывать кучу параметров? Нет, не буду!


                              Срочно меняй профессию, это не твое.
                                Цитата _Raven @
                                Virtuals Ничего сложного нет. Просто это не дзенно - кода много -> смысл тот же, что и в одной WinExec.

                                не дзенно... одни
                                { pointer to process security attributes}
                                { pointer to thread security attributes }
                                чего стоят
                                а
                                { pointer to STARTUPINFO }
                                и возвращаемая
                                { pointer to PROCESS_INF }
                                .........

                                короче стартуем все и как хотим, и получаем много того что хочется.
                                имхо считаю что это и есть дзен \код компактен, многофункционален, и не проходит кучу надстроек от мс\
                                ЗЫ пример кривых условий в от мс
                                Функция GetWindowText
                                в мсдн сказанно что НЕЗЯ читать текст принадлежащий другому приложению, /наверное всем понятно условие, которое стоит в функции/ НО
                                если..
                                в начале ...
                                ExpandedWrap disabled
                                  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;
                                то мсдн идет лесом.
                                извиняюсь за отвлеченный пример, но он достаточно показателен
                                Сообщение отредактировано: Virtuals -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) 1 [2] 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0504 ]   [ 16 queries used ]   [ Generated: 4.11.25, 20:56 GMT ]