На главную Наши проекты:
Журнал   ·   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_
  
> о WinExec()
    допустим мы открыли "черное" окно, при помощи WinExec. Можно потом программно его закрыть? и как? ::)
      Что за "черное окно"? Консоль что ли?
        конечно...
          BOOL TerminateProcess(
             HANDLE hProcess,      // handle to the process
             UINT uExitCode      // exit code for the process  
            );
            это всё хорошо. а как сделать так:

            нажали на кнопку с WinExec(... , SW_SHOW);
            какой код должен быть у второй кнопки, которая должна закрыть это, только что открытое, окно?
              Ьожет лучше через процессы? Примерно так

              var
                fSI  : TStartupInfo;
                fPI   : TProcessInformation;
                CommandString   : string;
              .............
              Вызов:

              CreateProcess(Nil, PChar(CommandString), Nil, Nil, False, CREATE_NEW_CONSOLE, Nil, Nil, FSi, FPi);

              Завершение:

                  TerminateProcess(fPI.hProcess, 0);
                  CloseHandle(fPI.hThread);
                  CloseHandle(fPI.hProcess);
                [Удалено модератором]
                Новый вопрос - новая тема.
                Сообщение отредактировано: Song -
                  2peter
                  C WinExec'ом сложнее.
                  Надо определить хэндл программы. Везде здесь есть условности. Например, если программа видима и активна и запускается с фокусом ввода (обычно) - значит GetForeGroundWindow. Если нет, то всё зависит от конкретных условий.
                  Если делать всё по уму, то здесь также куча условностей. Надо запускать чтобы получить хэндл процесса или потока. Это можно сделать через CreateProcess() или ShellExecuteEx() Далее надо во всех потоках этого процесса найти главное окно и послать ему WM_CLOSE. Так можно закрыть программу. Но самое сложное, найти нужное окно. Точного диагноза что именно это окно главное - нет.
                  1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                  0 пользователей:


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