На главную Наши проекты:
Журнал   ·   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 , Подкажите аналог...
    Virtuals

    Уже много раз говорилось, что для каждой цели есть свои средства.
    Так же точно и WinExec может служить не хуже CreateProcess. Каждый для своей задачи.
    Выше я описал особенность WinExec. В случае с CreateProcess реализовать такую функцию будет значительно сложнее. Зачем усложнять себе жизнь?

    Добавлено
    Цитата Anatoly Podgoretsky @
    рочно меняй профессию, это не твое.


    Кроме этого есть аргументы?
      ладно.....
      для спорщиков. :D
      WinExec всего лиш оболочка для CreateProcess
      в реализации от мс выглядит так:

      W2K
      Copyright © Microsoft Corporation
      ExpandedWrap disabled
        /*
         * 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;
                    }
                }
        }
        Цитата
        Срочно меняй профессию, это не твое.

        Моя профессия - студент университета, так что здесь я вас не послушаю ;) . Это первое.
        Второе - краткость, минимализм - разве это не главный принцип программирования? Почитайте Дениса Ритчи, разработчика C.
        2 Virtuals где именно в MSDN написано про текст, с другого приложения? А на счет кода с WinExec, да я это давно подозревал(хотя точно не знал), так как писал выше, WinExec есть в двух вариантах. Так зачем писать дважды одно и тоже?
        2 остальным - WinExec есть у Vista, почему же она есть, если устаревшая? Майкрософт долго будет держать в ядре старые апишки для совместимости.
          Цитата Virtuals @
          ладно.....
          для спорщиков.
          WinExec всего лиш оболочка для CreateProcess
          в реализации от мс выглядит так:


          И?
          Для спорщиков. Чтобы понять, что сказать хотел?
            Цитата Демо @
            Цитата 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.

            это не оно?
            Сообщение отредактировано: Virtuals -
              Цитата 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, если он уже есть.
                я WinExec заново писать никого не вынуждаю, просто чаще мне функционала WinExec не хватает. а заполнить все структуры для CreateProcess нет ничего сложного. примеры привел выше как на паскале так и в реализации мс в вин2к
                если рекомендуют использовать CreateProcess так почему бы и нет?
                кусок исходного кода WinExec привел для того чтобы показать возможности использования CreateProcess
                в том числе и
                Цитата
                Кроме простоты, функция WinExec имет одну весьма полезную особенность - возврат из нее происходит, когда приложение полностью стартует - начнет принимать сообщения.

                Цитата
                Выше я описал особенность WinExec. В случае с CreateProcess реализовать такую функцию будет значительно сложнее.

                :D

                Цитата
                Думаешь изобрел велосипед, узнав, что текст можна получать с помошью WM_GETTEXT?

                велосипед изобретать не собираюсь,
                GetWindowText реализованна с помощью WM_GETTEXT НО стоит условие "если чужое окно, то облом" /исходный код искать влом, но поверьте на слово так оно и есть/
                также WinExec реализованна с помощью все той-же CreateProcess /что и показал выше/

                ИМХО
                и не получится так что в следующих версиях винды в WinExec появится условие /запускать только одобренные мс$ приложения :D /
                по аналогии с GetWindowText
                  Virtuals

                  Всё-таки, зачем сложно, если можно просто?
                  1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                  0 пользователей:
                  Страницы: (3) 1 2 [3]  все


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