Как я могy закpыть пpиложение, запyщенное по shellexecute


Содержание

Как завершить программу, запущенную с помощью ShellExecute

1 Wartin [2012-11-12 22:26:00]

В MFC я использую этот код

для запуска внешней программы, которая работает в фоновом режиме.

Однако, когда мое приложение завершено, эта программа все еще работает, что можно проверить, просмотрев панель диспетчера задач Windows.

Поэтому мой вопрос: как я могу заставить внешнюю программу остановиться, когда мое приложение остановится?

c++ windows process shellexecute mfc

1 ответ

1 Решение ChrisW [2012-11-12 22:31:00]

Вместо этого попробуйте ShellExecuteEx , который может вернуть HANDLE hProcess процесса, который был запущен.

Если/если у вас есть HANDLE hProcess то я ожидаю, что вы сможете передать его в качестве параметра к функции TerminateProcess : которую вы бы вызывали (для завершения дочернего процесса) до того, как ваше приложение остановится.

windows — Как запустить приложение, запущенное с помощью ShellExecuteEx (в случае, если приложение уже запущено)

Я хочу запустить приложение в качестве оболочки Windows при двойном щелчке файла (.doc;.xls) ИЛИ ярлыка (.LNK) или или exe. Затем я хочу получить дескриптор pid и window запущенного приложения.

В настоящее время я использую ShellExecuteEx для запуска приложения корреспондирования (File,.lnk или.exe). и получение pid из дескриптора, возвращаемого ShellExecuteEx. Это не работает для нескольких приложений, таких как (AdobeReader, Outlook и т.д.), Но я попытался обработать, получив «запуск списка приложений до» и получив разницу после вызова ShellExecuteEx, чтобы получить недавно запущенное приложение для таких случаев.

Но в случае, если приложение уже работает (для открытого слова doc) ИЛИ в случае приложений с интерфейсом с вкладками (который не обязательно порождает новый процесс) Когда я запускаю ShellExecuteEx, он просто приносит это приложение сверху, дескриптор возвращается 0, а также я не получаю никакой разницы в pids (поскольку новый процесс не генерируется)

Поэтому в этом случае я не могу получить pid или дескриптор окна приложения.

кто-то может предложить любой надежный способ решить эту проблему

Как закрыть зависшую программу

С тем, как закрыть зависшую программу, сталкивался любой пользователь компьютера. Такая ситуация встречается довольно часто при работе на компьютере.

В процессе работы на компьютере, бывает, что какая-нибудь программа не отвечает на команды пользователя. Программа не реагирует на мышь, на клавиатуру, появляется окно с надписью «программа не отвечает».

Как закрыть зависшую программу? Некоторые пользователи сразу нажимают кнопку «Reset» (Перезагрузка), которая расположена на передней панели компьютера. После этого происходит перезагрузка операционной системы Windows.

Но это делать не рекомендуется. Перезагрузка может негативно сказаться на работе операционной системы, или отдельных запущенных в этот момент программ. После нового запуска, в работе программы, выполнявшейся в момент внезапного завершения работы, могут появится ошибки.

Если в момент перезагрузки происходила дефрагментация, то из-за перезагрузки могут пострадать файлы, которые в это время проходили обработку. А если это были какие-нибудь системные файлы, то тогда могут начаться неполадки с операционной системой.

Если неполадки с операционной системой уже начались, то одним из выходов будет восстановление операционной системы до времени ее работоспособного состояния.

Что же делать, если программа не отвечает?

Разберем сначала самый легкий случай. Программа зависла и не отвечает на команды пользователя компьютера. Вам необходимо отключить зависшую программу, для этого нужно запустить «Диспетчер задач», нажимая для этого, одновременно на клавиатуре на клавиши «Ctrl» + «Alt» + «Del», в операционной системе Windows XP.

В операционных системах Windows 7, Windows 8.1, Windows 10 после нажатия на эти клавиши, в новом окне операционной системы, в открытом меню нужно будет выбрать в самом внизу пункт «Запустить диспетчер задач», или нажать одновременно на клавиатуре сочетание клавиш «Ctrl» + «Shift» + «Esc».

В операционной системе Windows есть более удобный способ запуска «Диспетчера задач» — щелкаете правой кнопкой мыши по «Панели задач», а потом выбираете в контекстном меню пункт «Запустить диспетчер задач» (В Windows XP, Windows 8.1, Windows 10 — «Диспетчер задач»).

В открывшемся окне «Диспетчера задач» войдите во вкладку «Приложения». Обычно, напротив имени зависшей программы, в графе «Состояние» будет видна надпись «Не отвечает».

Далее выделяете зависшую программу, а затем нажимаете на кнопку «Снять задачу», или выбираете в контекстном меню, после нажатия правой кнопки мыши, пункт «Снять задачу». В окне с предупреждением согласитесь на завершение процесса.

Через некоторое время зависшее приложение отключится. Если этого не произошло, войдите во вкладку «Процессы».

Внимание! В этой вкладке необходимо будет соблюдать осторожность. Не ищите зависший процесс, если точно не знаете имя этого процесса!

Во вкладке «Приложения» выделите зависшую программу, а затем при нажатии правой кнопки мыши выберите пункт «Перейти к процессу».

Диспетчер задач автоматически переключит вас во вкладку «Процессы» и выделит зависшее приложение.

После этого нажимаете кнопку «Завершить процесс», или выбираете в контекстом меню, при нажатии правой кнопки мыши, пункт «Завершить процесс».

Если зависшая программа не отображается во вкладке «Приложения», то тогда вам нужно самим войти во вкладку «Процессы», найти процесс зависшей программы и отключить его, если вы можете правильно найти этот процесс. Если не знаете имя процесса, то лучше ничего не делайте в этой вкладке!

Если эти действия не помогли, то тогда войдите во вкладку «Пользователи», нажмите на кнопку «Выйти из системы», или после нажатия правой кнопки мыши, выберите в контекстном меню пункт «Выход из системы».

Придется подождать некоторое время, пока система завершит все процессы, а затем на вашем мониторе появится окно операционной системы со значком вашей учетной записи. Нажмите на этот значок, а потом войдите обратно в операционную систему для дальнейшего продолжения работы.

Подобные действия можно совершить с помощью меню «Пуск», если имеется доступ к меню. В меню «Пуск» наводите курсор мыши на кнопку «Завершение работы», а потом во всплывающем контекстном меню выбираете пункт «Выйти из системы».

Перезапуск Проводника

Один из способов для «оживления» Windows — перезапуск Проводника. Проводник Windows является не только файловым менеджером, в операционной системе он отвечает, в том числе, за отображение Рабочего стола и Панели задач.

Вначале запустите Диспетчер задач, используя клавиши «Ctrl» + «Shift» + «Esc». Затем перейдите во вкладку «Процессы», далее кликните по кнопке «Имя образа», а потом нажмите на кнопку «E» (в латинской раскладке клавиатуры).

Процесс «explorer.exe» будет выделен. Завершите этот процесс при помощи кнопки «Завершить процесс» или из контекстного меню.

После этого Проводник завершит свою работу, с экрана монитора исчезнут все значки. В Диспетчере задач войдите в меню «Файл», а в контекстном меню выберите пункт «Новая задача (Выполнить…)».

В окне «Создать новую задачу», в поле ввода введите «explorer», а затем нажмите на кнопку «ОК».

После этого операционная система должна заработать в штатном режиме.

Удаление зависшего процесса в командной строке

Запустите командную строку от имени администратора. В интерпретаторе командной строки введите команду: «tasklist» (без кавычек), а затем нажмите на клавишу «Enter».

Вы увидите список всех запущенных в операционной системе процессов. Напротив каждого имени приложения отображается его «PID» и объем потребляемой памяти.

Запомните «PID» (цифры) зависшего приложения, которое необходимо отключить. в окне интерпретатора командной строки введите новую команду: «taskkill/pid…» (без кавычек). Вместо «…» после PID вставьте значение, которое вы запомнили. Затем нажмите на клавишу «Enter». Зависшее приложение будет закрыто.

Другие способы

Самый тяжелый случай, это когда зависла какая-нибудь программа или игра, которая была развернута на весь экран монитора. В этом случае вы не будете иметь доступа к «Рабочему столу», к «Диспетчеру задач», а также в меню «Пуск».

В этом случае попробуйте выйти из окна с зависшей программой на «Рабочий стол», при помощи клавиш на клавиатуре.

Нажмите на клавиши клавиатуры «Alt» + «F4». Эта комбинация клавиш в операционной системе Windows служит для закрытия приложений.

Можно попробовать нажать на клавиатуре на клавиши «Esc» или «Enter», возможно, в некоторых случаях, получится получить доступ к Рабочему столу.

При нажатии на клавишу «Windows» также, иногда, можно попасть на Рабочий стол, при зависшей программе.

Попробуйте нажать на клавиатуре на функциональные клавиши «F1» — «F12». В некоторых случаях, нажатие на эти клавиши приводит к открытию Рабочего стола. Какая конкретно функциональная клавиша может помочь, зависит от конкретного компьютера, у разных компьютеров это бывает по-разному.

Если открылся Рабочий стол, то для выхода из зависшего приложения проделайте действия, описанные выше в этой статье.

Но, бывают такие ситуации, когда компьютер не реагирует ни на какие действия пользователя. Мышь не работает, на нажатия клавиш на клавиатуре, компьютер также никак не реагирует. В этом случае перезагрузки операционной системы уже не удастся избежать. Тогда вам придется нажать на кнопку «Reset» (Перезагрузка).


Выводы статьи

Если программа зависла. не отвечает на действия пользователя, постарайтесь завершить работу зависшего приложения, без выполнения перезагрузки операционной системы.

Блог GunSmoker-а

. when altering one’s mind becomes as easy as programming a computer, what does it mean to be human.

5 января 2015 г.

Почему вам (никогда) не следует использовать ShellExecute и WinExec

В Интернете полно примеров кода, которые используют функцию ShellExecute (реже — функцию WinExec ). Однако, суровая правда состоит в том, что вам никогда не нужно использовать эти функции.

Суть проблемы

Посмотрите на такой кусок кода:
Вопрос: что будет, если при открытии файла возникнет ошибка? Скажем, файла такого нет или он эксклюзивно открыт другой программой.

Ну, конструктор класса TFileStream возбудит исключение — что «отменит» код после этой строки и переведёт управление на обработчик ошибок. По умолчанию это будет глобальный обработчик объекта Application , который покажет сообщение об ошибке:

P.S. А в общем случае это может быть какой-то ваш код для обработки ошибок. Или, к примеру, если вы используете трейсер исключений, то он создаст вам отчёт о этой проблеме и отправит его вам на почту.

Вроде всё хорошо и красиво, да?

Илон Маск рекомендует:  Заголовок первого уровня

Да. А теперь посмотрим на такой код:
Вопрос: что будет, если при открытии файла возникнет ошибка? Например, нет ни одной программы для открытия таких файлов. Или программа есть, но её действие называется не open , а edit ? Да или та же ошибка: нет такого файла?

Ответ: а ничего не будет. Ваш код этого не заметит и продолжит тихо выполняться дальше, считая, что операция прошла успешно. И тогда программист побежит на форумы, спрашивая «почему не работает код».

Обработка ошибок в коде Delphi и коде Windows

Почему так происходит?

Дело в том, что TFileStream — это код Delphi. ShellExecute и WinExec — это код Windows.

Как я это определил?

Есть много способов:

  1. TFileStream описан в документации Delphi. Если вы запустите поиск в справке Delphi, то найдёте его. ShellExecute и WinExec описаны в документации Windows. Если вы запустите поиск по справке Microsoft, то найдёте их.
  2. Вы можете зажать кнопку Ctrl и щёлкнуть левой кнопкой мыши по тексту идентификатора в редакторе кода Delphi. Delphi откроет вам объявление идентификатора под курсором мыши. Тогда вы увидите, что TFileStream объявлен как класс Delphi в модуле System.Classes , а ShellExecute и WinExec объявлены в модуле Winapi.ShellAPI следующим образом: «function ShellExecute; external shell32 name ‘ShellExecuteW’;». Откуда и следует, что TFileStream — код Delphi (т.к. вы можете видеть этот код на Паскале), а ShellExecute и WinExec — код Windows (т.к. они импортируются из системной библиотеки shell32.dll ).
  3. Наведя курсор мыши на идентификатор и задержав курсор над ним, вы получите всплывающую подсказку, из которой можно увидеть, что в аргументах TFileStream.Create используются типы данных Delphi (такие как string ), а в аргументах ShellExecute и WinExec используются типы данных Windows (такие как PChar ).

Хорошо, мы тремя способами выяснили, что TFileStream — это код Delphi, а ShellExecute и WinExec — это код Windows. И что с того?

Дело в том, что код Delphi для сообщения об ошибках использует механизм исключений, а код Windows использует механизм кодов ошибок.

Возбуждение исключения означает, что весь следующий код пропускается, а управление передаётся на код обработки ошибок. Иными словами, если вы ничего специально не делаете, не пишете никаких фильтров, обёрток, обработчиков, то всё равно ситуация по умолчанию для исключения — это его обработка (и показ сообщения об ошибке в частности).

С кодами ошибок дело обстоит иначе, ведь это просто числа (и логические значения), возвращаемые функциями. Если вы их не сохраняете в переменные, не проверяете, то они пропадают. Таким образом, ситуация по умолчанию для кодов ошибок — это игнорирование. Иными словами, вам всегда нужно писать специальный код, чтобы реагировать на ошибки в таких функциях.

P.S. Когда на форуме кто-то задаёт вопрос «почему не работает код», в 90% случаев причина вопроса в том, что программист не расставил правильную обработку ошибок. Чаще всего он вызывает функции Windows, не удосуживаясь проверять коды ошибок.

Обработка ошибок вызовов ShellExecute и WinExec

Return value
Type: HINSTANCE
If the function succeeds, it returns a value greater than 32. If the function fails, it returns an error value that indicates the cause of the failure. The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. It can be cast only to an int and compared to either 32 or the following error codes below.

Функции ShellExecute и WinExec используют семантику единого адресного пространства для всех программ. Как мы знаем, в современных 32-битных (и выше) Windows (т.е. Windows 95 и старше) каждый процесс получает свой экземпляр «памяти» (адресного пространства), который изолирован и никак не связан с другими программами. Это было не так в 16-битных Windows: в ней все программы запускались в одной «памяти» (в едином адресном пространстве).

В такой модели программа идентифицировалась по экземпляру ( HINSTANCE ) её модуля. Поскольку адресное пространство было едино, то каждая программа загружалась в одно и то же пространство и, следовательно, имела уникальный экземпляр своего исполняемого модуля (exe-файла). Когда же адресное пространство стало своим у каждой программы, все программы стали загружаться в свои собственные адресные пространства. И описатель и экземпляр загруженного модуля стали одинаковы для всех программ (а именно: $00400000) и, таким образом, не могли более использоваться для идентификации запущенных программ.

И раз функции ShellExecute и WinExec возвращают экземпляр загруженного модуля ( HINSTANCE ) как идентификатор запущенной программы, то они созданы для Windows 3.11 (и более ранних ОС) и крайне плохо приспособлены для Windows 95 (и более новых систем).

Говоря кратко: ShellExecute и WinExec — это устаревшее говно мамонта начала 90-х годов. Они созданы в действительно доисторические времена. 640 Кб. Сегменты. Ближние и дальние указатели. Нет виртуальной памяти. Кооперативная многозадачность. Эти функции устарели в 1995 году. Ни один код, написанный после 1995 года, не должен использовать эти функции.

Но почему бы их не использовать? Ведь то, что функции устарели, ещё не означает, что они отсутствуют. Они есть и работают. Дело в том, что чтобы правильно сделать обработку ошибок для вызовов этих функций, вам нужно написать вот такого монстра:
Хорошо, но если нам нельзя использовать функции ShellExecute и WinExec , то что же нам нужно использовать?

Правильное решение

Ответ: вместо функции ShellExecute следует использовать функцию ShellExecuteEx , а вместо функции WinExec следует использовать функцию CreateProcess .

Почему же примеры кода в Интернете используют старые функции? На это есть несколько причин:

  1. Безграмотность программистов. Большинство программистов даже не читали документацию по этим функциям. В лучшем случае они видели укороченный пересказ описания функций.
  2. Примеры кода иллюстрируют идею. Они должны быть просты, ненужные детали (в частности: обработка ошибок) должны быть убраны. Автор примера кода подразумевает, что вы напишете свой код, использовав идею примера, а не будете копировать пример один-к-одному.

К счастью, теперь мы уже не совсем безграмотные программисты, и мы в курсе, что нам не нужно использовать функции ShellExecute и WinExec , а нужно использовать функции ShellExecuteEx и CreateProcess . Таким образом, если у вас на руках есть «типичный» пример кода, который использует функцию ShellExecute или WinExec , то вы можете исправить его, заменив вызовы старых функций на новые. Это можно сделать двумя способами. Во-первых, вы можете переписать код:

  1. Вставив вместо ShellExecute функцию ShellExecuteEx (и вместо WinExec — функцию CreateProcess ),
  2. Добавив правильную обработку ошибок,
  3. Добавив недостающий код для вызова ShellExecuteEx и CreateProcess (эти функции мощнее по возможностям и требуют больше аргументов).

Или вы можете написать функции-переходники (что мы и сделаем ниже). Функция должна иметь то же имя и те же аргументы, что и оригинал (т.е. ShellExecute и WinExec ), но вызывать она должна современные функции (т.е. ShellExecuteEx и CreateProcess ). Добавив такую функцию перед любым «плохим» примером кода, мы автоматически сделаем его «хорошим».

Обработка ошибок вызовов ShellExecuteEx и CreateProcess

Чтобы правильно написать вызов ShellExecuteEx и CreateProcess — нам всё ещё нужно научиться правильно обрабатывать ошибки вызова этих функций. Функции ShellExecuteEx и CreateProcess , равно как и функции ShellExecute и WinExec , являются функциями Windows, а не Delphi. Иными словами, ShellExecuteEx и CreateProcess также используют коды ошибок (а не исключения) для сообщения о проблемах выполнения.

Как и ранее, нам нужно открыть документацию функций ShellExecuteEx и CreateProcess , чтобы прочитать, как следует обрабатывать их ошибки:

Return value
Type: BOOL
Returns TRUE if successful; otherwise, FALSE. Call GetLastError for extended error information.

Как мы видим, способ обработки ошибок одинаков для этих функций. И он, вообще-то, является стандартом для большинства классических функций Windows. Функция возвращает логическое значение: истина или ложь, сигнализирующее об успешном или не успешном выполнении. Если выполнение было не успешно, то точную причину подскажет функция GetLastError , которая вернёт одну из констант ERROR_xyz , определённых в модуле Winapi.Windows . Чисто, чтобы удовлетворить ваше любопытство: вот список некоторых стандартных кодов ошибок (это не полный список — вы можете добавлять и свои собственные коды ошибок).

Этот код ошибки (только стандартный, а не пользовательский) можно конвертировать в текстовое сообщение с помощью вспомогательной функции SysErrorMessage . Таким образом, чтобы правильно обработать результат вызова ShellExecuteEx или CreateProcess (а равно как и любой другой не устаревшей классической функции Windows), мы можем сделать следующее (решение в лоб):
Конечно, это ужасно неудобно, не так ли? Сравните этот громоздкий код с вызовов TFileStream.Create из примера выше. Нельзя ли с этим что-то сделать?

Можно. Идея здесь заключается в том, что мы конвертируем код ошибки в исключение. Чтобы не делать это вручную, можно воспользоваться уже готовой вспомогательной функцией: RaiseLastOSError . А чтобы не писать подобный неуклюжий if , мы можем сделать вспомогательную функцию. Вообще-то, такая функция уже есть, и она называется Win32Check . Итого, наш код примет вид: Этот код функционально эквивалентен: Т.е. если при его выполнении возникнет ошибка, то возбудится исключение, код дальше по тексту будет пропущен, а управление будет передано на ближайший обработчик ошибок, по умолчанию таковым будет обработчик от объекта Application , который и покажет сообщение об ошибке:

P.S. Вообще-то, хотя функция RaiseLastOSError — кросс-платформенна, но Win32Check — нет. Win32Check помечена как «platform-specific», хотя она не делает ничего, кроме вызова RaiseLastOSError . Это не проблема в нашем случае, поскольку мы всё равно вызываем функции Windows (т.е. функции, специфичные для одной конкретной платформы).

Кросс-платформенный же способ — это функция CheckOSError . К сожалению, из-за кросс-платформенности эта функция крайне неудобна для использования в Windows. Во-первых, с ней код становится сложнее:
Во-вторых, эта функция проверяет, что код ошибки должен быть отличен от «успех» (в случае с Windows — отличен от ERROR_SUCCESS ). Хотя сперва это кажется логичным — но только до тех пор, пока вы не столкнётесь с таким поведением. Поэтому гораздо лучше использовать RaiseLastOSError :
Это и корректнее и кросс-платформенно.

А в общем и целом, если вы пишете под Windows и вызываете функции Windows — просто используйте Win32Check .

Простые обёртки к ShellExecuteEx и CreateProcess

Пример исправления кода

Фух, теперь мы, наконец-то, можем исправить код «плохих» примеров!

Для этого я сделал поиск по «ShellExecute Delphi» (без кавычек, конечно же) и взял несколько примеров:
Как мы можем исправить этот код?

Чтобы исправить этот код, нам нужно, во-первых, вставить код функций-обёрток перед этими «плохими» кусками кода, а, во-вторых, заменить nil на » , а преобразования PChar / PAnsiChar / PWideChar и вовсе убрать — поскольку вместо системных типов Windows ( PChar ) наш код использует обычные строки Delphi.

Итого:
Этот код теперь «волшебным» образом стал правильным и корректным.

И под «правильным» здесь я подразумеваю только те моменты, что мы уже обговаривали: обработка ошибок, COM, асинхронные операции. К примеру, Form1.Handle вместо Handle — как минимум идеологически неверно и некоторых случаях даже и не корректно. Жёстко зашитые пути к программам — ещё косяк. Явный запуск программ — ещё одна проблема.

Обратите внимание, что с нашими обёртками описатель окна (первый параметр ShellExecute ) можно не указывать — этот параметр не будет использоваться для показа сообщений об ошибках, поскольку мы указали флаг SEE_MASK_FLAG_NO_UI . И хотя флаг SEE_MASK_FLAG_NO_UI не подавляет диалог «Открыть с помощью» (см. ниже), но описатель окна не используется при показе этого диалога. Поэтому вы можете передавать туда 0.

P.S. Если вы используете ShellExecuteEx с действием » runas » для запуска процесса с элевацией, то вам нужно передавать корректный описатель окна ( HWND ): он будет использоваться для идентификации вашего процесса как приложения первого плана. Если же вы его не укажете, то ваше приложение будет считаться фоновым приложением. В этом случае запрос UAC на повышение прав не будет показан на экране сразу, а появится в свёрнутом (и мигающем) виде на панели задач.

Кроме того, с нашими обёртками не обязательно указывать все параметры — ведь они сделаны опциональными.

Итого, при желании код может быть упрощён до:

P.S. Обратите внимание, что этот код правилен и корректен только при условии наличия функции-обёртки выше по тексту — ведь именно там сосредоточенна обработка ошибок, COM и асинхронных операций. Без функции-обёртки этот код не будет верным.


Прочие проблемы

Отсутствие обработки ошибок, отсутствие инициализации COM и отсутствие обработки асинхронных операций — это ещё не все проблемы в типичных примерах кода для ShellExecute .

В частности, довольно часто примеры используют действие (verb) » open » для открытия файлов. Однако корректнее не указывать действие вообще — т.е. передавать во второй параметр nil (для системных функций) или » (пустую строку) — для нашей функции-обёртки. Дело в том, что иногда действие » open » может отсутствовать, либо не быть действием по умолчанию. К примеру, достаточно часто действие по умолчанию для типов файлов документов является » edit «. И если вы явно укажете действие » open » для открытия таких файлов, то либо вы откроете файл не в той программе (не в той, что назначена по умолчанию), либо получите ошибку «Указанному файлу не сопоставлено ни одно приложение для выполнения данной операции»/»No application is associated with the specified file for this operation.». Например, в некоторых версиях Windows действие ‘open’ для .lnk файлов не назначено. Вызов ShellExecute(0, ‘open’, ‘my.lnk’, . ) вернёт ошибку, но ShellExecute(0, nil, ‘my.lnk’, . ) будет успешен.

Чтобы не гадать, какое же действие назначено по умолчанию для этого типа файла — просто не указывайте его. В этом случае система сама выберет действие по умолчанию, будь это » open «, » edit «, » explore «, » print » или что-то иное. А если действия по умолчанию не назначено, то система выполнит » open «. А если его нет, то она возьмёт первое попавшееся действие. А если действий вообще нет — то покажет диалог «Открыть с помощью»:

Илон Маск рекомендует:  Музыкальный шаблон сайта HTML, 2 страницы

Заключение

Что ж, я надеюсь, что вы узнали что-то новое сегодня. Вы узнали, почему вам не следует использовать функции ShellExecute и WinExec , какие функции нужно использовать вместо них ( ShellExecuteEx и CreateProcess ), как нужно правильно делать обработку ошибок при вызове системных функций Windows, как упростить этот код, какие ещё есть подводные камни у ShellExecute ( Ex ) и CreateProcess .

windows — Как запустить приложение, запущенное с помощью ShellExecuteEx (в случае, если приложение уже запущено)

Я хочу запустить приложение в качестве оболочки Windows при двойном щелчке файла (.doc;.xls) ИЛИ ярлыка (.LNK) или или exe. Затем я хочу получить дескриптор pid и window запущенного приложения.

В настоящее время я использую ShellExecuteEx для запуска приложения корреспондирования (File,.lnk или.exe). и получение pid из дескриптора, возвращаемого ShellExecuteEx. Это не работает для нескольких приложений, таких как (AdobeReader, Outlook и т.д.), Но я попытался обработать, получив «запуск списка приложений до» и получив разницу после вызова ShellExecuteEx, чтобы получить недавно запущенное приложение для таких случаев.

Но в случае, если приложение уже работает (для открытого слова doc) ИЛИ в случае приложений с интерфейсом с вкладками (который не обязательно порождает новый процесс) Когда я запускаю ShellExecuteEx, он просто приносит это приложение сверху, дескриптор возвращается 0, а также я не получаю никакой разницы в pids (поскольку новый процесс не генерируется)

Поэтому в этом случае я не могу получить pid или дескриптор окна приложения.

кто-то может предложить любой надежный способ решить эту проблему

Как дождаться запуска ShellExecute?

мне удается использовать ShellExecute в VC++ для запуска документа. Теперь я хочу запустить инструмент командной строки, который получает некоторые аргументы, и работать в фоновом режиме (как скрытый, а не свернутый) и позволить ему блокировать поток моей программы, чтобы я мог дождаться его завершения. Как изменить командную строку:

проблема в том, что у меня есть инструмент, который преобразует html в pdf, и я хочу, чтобы после завершения инструмента, он же pdf готов, чтобы иметь другой ShellExecute просмотреть его.

2 ответов

есть статья CodeProject это показывает, как, используя ShellExecuteEx вместо ShellExecute :

решающим моментом является флаг SEE_MASK_NOCLOSEPROCESS , который, как говорит MSDN

использовать, чтобы указать, что hProcess участник получает дескриптор процесса. Этот дескриптор обычно используется, чтобы приложение могло узнать, когда процесс создан с помощью ShellExecuteEx заканчивается

кроме того, обратите внимание что:

вызывающее приложение отвечает за закрытие дескриптора, когда он больше не нужен.

вы также можете использовать CreateProcess вместо ShellExecute / ShellExecuteEx. Эта функция включает cmd.опция exe-оболочки, возвращающая код выхода и возвращающая stdout. (Включает не может быть совершенным).

Примечания: в моем использовании я знал, что должны быть результаты stdout, но функция PeekedNamePipe не всегда возвращала количество байтов с первой попытки, следовательно, цикл там. Возможно, кто-то может понять это и опубликовать ревизию? Кроме того, возможно, альтернативная версия должно быть произведено которое возвращает stderr отдельно?

Как закрыть программу которая зависла, с примерами

Все программы написаны людьми, а значит они не идеальны и могут зависать. Как закрыть программу, которая зависла? Вообще, в Windows 7/10 разработчики на славу постарались. В этих операционных системах программы стали зависать намного реже и закрывать такие программы стало легче. В Windows XP приходилось перезагружать компьютер намного чаще из-за того, что программы зависали.

Давайте разберём все доступные методы как закрыть программу, которая зависла, с конкретными примерами и узнаем как избегать подобных проблем.

Как определить, что программа зависла?

Обычно программа перестаёт отвечать на действия пользователя, а курсор превращается в песочные часики. В этом случае в заголовке программы в скобках может быть написано «(Не отвечает)». Все попытки закрыть программу на «крестик» ничего не дают, либо крестик нажать не удаётся. Также надо понимать, что ресурсоёмкие операции требуют времени выполнения. Т.е., если вы чем-то тяжёлым «загрузили» весь компьютер, то программы могут вести себя как зависшие, особенно если комп слабый и старый. В этом случае нужно просто подождать, но не больше 5-10 минут.

Что не нужно делать, если программа зависла

Многие пользователи при этом делают массу не нужных действий, теряя своё время.

Во-первых, не стоит сразу тянуться к кнопке «Reset» или выключать компьютер. Хотя, это самый радикальный способ закрыть программу (и все остальные программы :)). Но вы что, каждый раз будете перезагружать компьютер? За этим занятием можно провести весь день и ничего не успеть! К тому же, несохранённые данные в других программах можно потерять.

Во-вторых, не нужно пытаться запустить зависшую программу ещё раз. Помочь делу это никак не сможет, а вот усугубить проблему ещё как!

И в-третьих, не стоит запускать другие программы. Этим вы только затормозите систему ещё больше.

Как закрыть программу, если она «висит»

Раз уж «крестиком» программу закрыть не удаётся, можно попробовать нажать «ALT + F4». Эта комбинация клавиш закрывает активную программу. Или нажать на значок программы в левом верхнем углу и выбрать «Закрыть»

Ещё безобидный способ как можно закрыть зависшую программу, это нажать правой кнопкой по программе в панели задач и выбрать там «Закрыть программу».

Если это не помогает, переходим к самому ходовому способу – запускаем «Диспетчер задач» клавишами «Ctrl + Shift + Esc» или через «Ctrl + Alt + Del» и выбираем «Запустить Диспетчер задач» (если у вас возникли проблемы на этом шаге, то почитайте как включить диспетчер задач).

  • В диспетчере задач на вкладке «Приложения» находим нашу программу и нажимаем по ней правой кнопкой мышки
  • В контекстном меню выбираем «Снять задачу» (или вместо меню нажимаем одноимённую кнопку). Если программа не закрылась сразу, то немного подождите, должно появиться окно подтверждения завершения приложения
  • Если и после подтверждения программа всё ещё «висит», тогда ещё раз нажимаем по ней правой кнопкой, но на этот раз выбираем «Перейти к процессу». Каждая запущенная программа имеет один или несколько процессов в памяти компьютера. Если закрыть соответствующий процесс, то и программа закроется.
  • После перехода на вкладку «Процессы» курсор уже должен стоять на процессе зависшей программы. Смело нажимаем по нему правой кнопкой и выбираем «Завершить процесс» или, чтобы наверняка, «Завершить дерево процессов». Программа должна почти сразу закрыться.

Что делать, если программы нет на вкладке «Приложения»

Может быть и такое, что вызвав диспетчер задач, нашей программы нет в списке запущенных программ. Тогда прийдётся перейти на вкладку «Процессы» и найти самостоятельно нужный процесс. Для этого можно кликнуть на заголовке столбца «ЦП» (загрузка процессора), тем самым отсортировав все процессы по степени загрузки процессора, и посмотреть процесс, который больше всего грузит процессор, и завершить его.

Но не всегда зависшая программа будет грузить процессор, тогда нужно отсортировать процессы по имени и поискать похожий на название программы. Более точно определить искомый процесс можно узнав имя запускаемого файла нашей программы. Для этого нажимаем правой кнопкой по ярлыку программы (будь-то на рабочем столе или в меню «Пуск») и выбираем «Свойства».

В строчке «Объект» смотрим имя запускаемого файла, которое заканчивается на «.exe». Это и будет имя процесса, который нужно найти в диспетчере задач и завершить.

Как закрыть программу другим способом?

Ещё можно закрыть программу с помощью сторонних программ, например Process Explorer от компании Sysinternals. Это лёгкая и бесплатная программка не требующая устновки. Просто скачайте и запустите «procexp.exe» из архива.

В окне программы найдите процесс зависшей программы и по правой клавише мыши выберите «Kill Process» или «Kill Process Tree», или просто кнопками «Del» и «Shift + Del» соответственно. Также существует и другая альтернатива диспетчеру задач.

Есть ещё способ?

Для самых продвинутых есть ещё способ как закрыть зависшую программу из командной строки. Для этого вызываем окно «Выполнить» либо через меню «Пуск -> Выполнить», либо горячими клавишами «Win + R» и пишем там «cmd». В открывшемся чёрном окне пишем:

«taskkill /f /im имя_процесса.exe /t»

где «имя_процесса.exe» — это имя процесса зависшей программы, например «explorer.exe»

При успешном выполнении будет написано соответствующее сообщение.

В качестве некоего экзотического способа есть программа Kerish Doctor 2020, у неё есть уникальная функция Kerish Deblocker, обязательно прочитайте мою статью.

Почему программы зависают?

Вместо того чтобы заниматься вопросом как закрыть программы, лучше чтобы они не зависали. Вот основные причины, почему программы зависают:

  • Ошибка в коде программы. Банальные ошибки программистов, недочёты, конфликты с другими программами. Попробуйте обновиться на сайте производителя ПО
  • Захламленная операционная система. Нередко программы начинают глючить и зависать на неухоженной операционной системе. В этом случае надо либо переустановить, либо оптимизировать операционную систему
  • Конфликт оборудования или драйверов. При наличии конфликтов между оборудованием, драйверами или программами между собой могут быть зависания не только программ, но и всей системы
  • Не подходящая версия Windows. Если программа не предназначена для, например, Windows 7, а вы её там запускаете, то могут быть глюки и конфликты. В этом случае попробуйте обновиться или в свойствах ярлыка программы или запускаемого файла на вкладке «Совместимость» выбрать другую операционную систему.
  • Ошибки на жестком диске. При ошибках файловой системы или при наличии сбойных секторов могут быть временные или постоянные подвисания. Проверьте свой жесткий диск на ошибки.
  • Недостаточно оперативной памяти. Это видно в диспетчере задач, если вся память постоянно занята. Можно попробовать увеличить размер файла подкачки, но лучше добавить оперативной памяти или перейти на другую версию Windows и/или программы.
  • Взломанные программы. В случае использования «крякнутых» программ также могут быть проблемы. Совет: либо используйте лицензионную версию, либо крякнутую, но из другого источника ��
  • Вирусы. Конечно же и они могут влиять на работу всего компьютера. Проверьте компьютер на вирусы с помощью бесплатного антивируса DrWeb Cureit!
  • Ещё много других причин, всех не перечислить.

Десерт на сегодня, посмотрите как зачётно поёт попугай ��

Как закрыть зависшую программу


С тем, как закрыть зависшую программу, сталкивался любой пользователь компьютера. Такая ситуация встречается довольно часто при работе на компьютере.

В процессе работы на компьютере, бывает, что какая-нибудь программа не отвечает на команды пользователя. Программа не реагирует на мышь, на клавиатуру, появляется окно с надписью «программа не отвечает».

Как закрыть зависшую программу? Некоторые пользователи сразу нажимают кнопку «Reset» (Перезагрузка), которая расположена на передней панели компьютера. После этого происходит перезагрузка операционной системы Windows.

Но это делать не рекомендуется. Перезагрузка может негативно сказаться на работе операционной системы, или отдельных запущенных в этот момент программ. После нового запуска, в работе программы, выполнявшейся в момент внезапного завершения работы, могут появится ошибки.

Если в момент перезагрузки происходила дефрагментация, то из-за перезагрузки могут пострадать файлы, которые в это время проходили обработку. А если это были какие-нибудь системные файлы, то тогда могут начаться неполадки с операционной системой.

Если неполадки с операционной системой уже начались, то одним из выходов будет восстановление операционной системы до времени ее работоспособного состояния.

Что же делать, если программа не отвечает?

Разберем сначала самый легкий случай. Программа зависла и не отвечает на команды пользователя компьютера. Вам необходимо отключить зависшую программу, для этого нужно запустить «Диспетчер задач», нажимая для этого, одновременно на клавиатуре на клавиши «Ctrl» + «Alt» + «Del», в операционной системе Windows XP.

В операционных системах Windows 7, Windows 8.1, Windows 10 после нажатия на эти клавиши, в новом окне операционной системы, в открытом меню нужно будет выбрать в самом внизу пункт «Запустить диспетчер задач», или нажать одновременно на клавиатуре сочетание клавиш «Ctrl» + «Shift» + «Esc».

В операционной системе Windows есть более удобный способ запуска «Диспетчера задач» — щелкаете правой кнопкой мыши по «Панели задач», а потом выбираете в контекстном меню пункт «Запустить диспетчер задач» (В Windows XP, Windows 8.1, Windows 10 — «Диспетчер задач»).

В открывшемся окне «Диспетчера задач» войдите во вкладку «Приложения». Обычно, напротив имени зависшей программы, в графе «Состояние» будет видна надпись «Не отвечает».

Далее выделяете зависшую программу, а затем нажимаете на кнопку «Снять задачу», или выбираете в контекстном меню, после нажатия правой кнопки мыши, пункт «Снять задачу». В окне с предупреждением согласитесь на завершение процесса.

Через некоторое время зависшее приложение отключится. Если этого не произошло, войдите во вкладку «Процессы».

Внимание! В этой вкладке необходимо будет соблюдать осторожность. Не ищите зависший процесс, если точно не знаете имя этого процесса!

Во вкладке «Приложения» выделите зависшую программу, а затем при нажатии правой кнопки мыши выберите пункт «Перейти к процессу».

Диспетчер задач автоматически переключит вас во вкладку «Процессы» и выделит зависшее приложение.

После этого нажимаете кнопку «Завершить процесс», или выбираете в контекстом меню, при нажатии правой кнопки мыши, пункт «Завершить процесс».

Если зависшая программа не отображается во вкладке «Приложения», то тогда вам нужно самим войти во вкладку «Процессы», найти процесс зависшей программы и отключить его, если вы можете правильно найти этот процесс. Если не знаете имя процесса, то лучше ничего не делайте в этой вкладке!

Если эти действия не помогли, то тогда войдите во вкладку «Пользователи», нажмите на кнопку «Выйти из системы», или после нажатия правой кнопки мыши, выберите в контекстном меню пункт «Выход из системы».

Придется подождать некоторое время, пока система завершит все процессы, а затем на вашем мониторе появится окно операционной системы со значком вашей учетной записи. Нажмите на этот значок, а потом войдите обратно в операционную систему для дальнейшего продолжения работы.

Илон Маск рекомендует:  Алгоритм преобразует алгоритм

Подобные действия можно совершить с помощью меню «Пуск», если имеется доступ к меню. В меню «Пуск» наводите курсор мыши на кнопку «Завершение работы», а потом во всплывающем контекстном меню выбираете пункт «Выйти из системы».

Перезапуск Проводника

Один из способов для «оживления» Windows — перезапуск Проводника. Проводник Windows является не только файловым менеджером, в операционной системе он отвечает, в том числе, за отображение Рабочего стола и Панели задач.

Вначале запустите Диспетчер задач, используя клавиши «Ctrl» + «Shift» + «Esc». Затем перейдите во вкладку «Процессы», далее кликните по кнопке «Имя образа», а потом нажмите на кнопку «E» (в латинской раскладке клавиатуры).

Процесс «explorer.exe» будет выделен. Завершите этот процесс при помощи кнопки «Завершить процесс» или из контекстного меню.

После этого Проводник завершит свою работу, с экрана монитора исчезнут все значки. В Диспетчере задач войдите в меню «Файл», а в контекстном меню выберите пункт «Новая задача (Выполнить…)».

В окне «Создать новую задачу», в поле ввода введите «explorer», а затем нажмите на кнопку «ОК».

После этого операционная система должна заработать в штатном режиме.

Удаление зависшего процесса в командной строке

Запустите командную строку от имени администратора. В интерпретаторе командной строки введите команду: «tasklist» (без кавычек), а затем нажмите на клавишу «Enter».

Вы увидите список всех запущенных в операционной системе процессов. Напротив каждого имени приложения отображается его «PID» и объем потребляемой памяти.

Запомните «PID» (цифры) зависшего приложения, которое необходимо отключить. в окне интерпретатора командной строки введите новую команду: «taskkill/pid…» (без кавычек). Вместо «…» после PID вставьте значение, которое вы запомнили. Затем нажмите на клавишу «Enter». Зависшее приложение будет закрыто.

Другие способы

Самый тяжелый случай, это когда зависла какая-нибудь программа или игра, которая была развернута на весь экран монитора. В этом случае вы не будете иметь доступа к «Рабочему столу», к «Диспетчеру задач», а также в меню «Пуск».

В этом случае попробуйте выйти из окна с зависшей программой на «Рабочий стол», при помощи клавиш на клавиатуре.

Нажмите на клавиши клавиатуры «Alt» + «F4». Эта комбинация клавиш в операционной системе Windows служит для закрытия приложений.

Можно попробовать нажать на клавиатуре на клавиши «Esc» или «Enter», возможно, в некоторых случаях, получится получить доступ к Рабочему столу.

При нажатии на клавишу «Windows» также, иногда, можно попасть на Рабочий стол, при зависшей программе.

Попробуйте нажать на клавиатуре на функциональные клавиши «F1» — «F12». В некоторых случаях, нажатие на эти клавиши приводит к открытию Рабочего стола. Какая конкретно функциональная клавиша может помочь, зависит от конкретного компьютера, у разных компьютеров это бывает по-разному.

Если открылся Рабочий стол, то для выхода из зависшего приложения проделайте действия, описанные выше в этой статье.

Но, бывают такие ситуации, когда компьютер не реагирует ни на какие действия пользователя. Мышь не работает, на нажатия клавиш на клавиатуре, компьютер также никак не реагирует. В этом случае перезагрузки операционной системы уже не удастся избежать. Тогда вам придется нажать на кнопку «Reset» (Перезагрузка).

Выводы статьи

Если программа зависла. не отвечает на действия пользователя, постарайтесь завершить работу зависшего приложения, без выполнения перезагрузки операционной системы.

Лучшие shellexecute вопросы ИТ разработчиков

Как запустить cmd.exe с параметрами из JavaScript

Я пытаюсь написать JavaScript, который должен запускать cmd.exe с указанной командной строкой, как этоdocs.google.com/file/d/0B7QHCoQDlEvKWUZSX3oxUDI2SDg/edi.

Как запустить приложение, которое требует прав администратора от того, у которого их нет [закрыто]

Я застрял на этом в течение нескольких часов, пока мне, наконец, не удалось это сделать. Уже есть ссылки, которые указали мне правильное направление: Is it.

По каким причинам может произойти сбой ShellExecute?

ShellExecute завершается ошибкой, если запускается из расширенного процесса и браузер не по умолчанию установлен в Windows 8 RTM

Установите нестандартный браузер в Windows 8 RTM (Chrome, Firefox) и попробуйте запустить код следующим образом:

ShellExecuteEx в VBA

Как запустить соответствующее приложение для файла / каталога / URL?

Linux вроде бы просто.

Как вызвать файл PHP из файла сценария оболочки [дубликата]

На этот вопрос уже есть ответ здесь:Как передать параметры из bash в php скрипт? 3 ответаМне нужен сценарий оболочки, который имеет цикл. В каждой итерации ц.

Как запустить программу командной строки в Delphi?

Попытка вызова ShellExecute для запуска Mysql и сценария SQL


При выполнении другой программы из C # мне нужно самому анализировать «командную строку» из реестра?

Из реестра для данного типа файлов я получаю строку, содержащую что-то вроде этого:

Как программа Delphi может отправлять электронную почту с вложениями через почтовый клиент DEFAULT?

В моей программе я создаю электронную почту для отправки с использованием установленного по умолчанию клиентского программного обеспечения электронной почты .

Откройте браузер по умолчанию как обычный пользователь (C ++)

VBA: Запуск «Повышенной» команды (Shell vs. ShellExecute)

Эквивалент ShellExecute в .NET

Я ищу .NET-предпочтительный способ выполнения того же типа, что и ShellExecute в Win32 (открытие, печать и т. Д. Для произвольных типов файлов).Я программиру.

Откройте веб-страницу в пакетном файле Windows

у меня естьпакетный файл что делает кучу вещей и в конце концов необходимооткрыть веб-браузер на страницу. Есть ли способ, по сути, позвонить

Как получить дескриптор, который выполняется в winexec или shellexecute?

я использую для создания пользовательской функции, например winexec (. ): Hwnd, которая будет повторно обрабатывать дескриптор исполняемого приложения.я исп.

ShellExecute: глагол «runas» не работает для командных файлов с пробелами в пути

Я использую ShellExecuteW для запуска командного файла. Код выглядит примерно так:

Как вызвать скрипт из php, который требует SUDO?

У меня есть файл, который представляет собой скрипт bash, который требует SUDO для работы.Я могу запустить его из командной строки, используя SUDO, но мне бу.

shell_exec () управление тайм-аутом и exec ()

Я запускаю сторонний скрипт, используя написанный мной класс-обертку, который вызывает

Как выполнить оболочку в расширении Chrome?

Простой способ запустить пакет от имени администратора, используя JavaScript

Я хочу получить простой надежный метод автоматического повышения уровня запущенной партии без использования дополнительных файлов VBS или повышенных ярлыков.

Наше 32-разрядное приложение запускает файлы Windows LNK (Shell Links) через ShellExecute. Когда он пытается «запустить» ссылку на 64-разрядный двоичный файл.

Разница между Run () и ShellExecute ()

это единственный метод, который работает для меня в OS X, а также Heroku. Тонна других решений для запуска отдельных фоновых процессов, в т.ч. Symfony, Cocur и др. Потерпели неудачу (либо заблокировали выполнение, либо умрут, когда умрет родитель).

аю, что есть тонны подобных сообщений, но я еще не нашел решение после поиска вокруг. По сути, я пытаюсь запустить два сценария в фоновом режиме. Когда я запускаю их в командной строке, после вызова моего первого скрипта я вижу: /usr/bin/nohup .

Как программа Delphi может отправлять электронную почту с вложениями через почтовый клиент DEFAULT?

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

@jonalv уверен, я его отредактирую. По сути, exec не вызывает оболочку, а исполняемый файл. Если вы хотите выполнить команды оболочки, вам нужно вызвать оболочку и передать ей команды для выполнения. Ответ Феми показывает, как вызвать оболочку и выполнить сон и эхо.

аюсь запустить команды командной строки из Java, и быстрая проверка работоспособности позволила мне понять, что причина, по которой у меня возникают проблемы, заключается в том, что я не могу получитьpr.waitFor() позвоните ниже, чтобы работать. .

вместо.

, чтобы выполнить команду оболочки в Go и получить результат в виде строки в моей программе. Я виделРозетта Код [http://rosettacode.org/wiki/Execute_a_system_command#Go]версия: package main import «fmt» import «exec» func main() < cmd, err .

-1. Вы скопировали принятый ответ (с 2011 года!) Почти дословно.

у использовать функцию Windows ShellExecute, чтобы открыть файл без проблем, если файл имеет правильную связь. Если ассоциации не существует, я бы хотел использовать диалог окон по умолчанию, чтобы открыть файл: [/imgs/LW5IB.png] Это .

в командной строке? Ваша ошибка не связана с определением значений свойств в командной строке, просто дело в том, что двоичный файл ant не найден. Если вы получаете это при попытке вызвать ant из скрипта оболочки, попробуйте обратиться к двоичному файлу ant через его полный путь.

ужно вызвать сценарий муравья через сценарий оболочки. Рассмотрим параметры для скрипта муравья a, b, c. Как я могу передать параметр для этих переменных? Я должен предоставить параметры для ant vis, чтобы вызвать скрипт оболочки. кто-нибудь .

Для создания PDF из PHP (в Linux) вы должны использовать обертку.

могу выполнить эти две командной строки через php: wkhtmltopdf www.google.com gg.pdf & oofice -headless -nologo -pt cup-pdf my.doc они оба возвращают PDF-файл и загружают в мой домашний каталог. Я хочу знать, как выполнить эту команду со .

Получение вывода из приложения shell / dos в приложение Delphi

У меня есть приложение командной строки, написанное на delphi, которое мне нужно вызывать из обычного настольного приложения (также написанного на delphi). Короче говоря, я хочу вызвать приложение командной строки и отобразить выводимый текст «в .

ShellExecuteEx в VBA

Я понимаю, как использовать ShellExecute в VBA (для моих макросов Outlook), но я ищу возможность использовать ShellExecuteEx для ожидания выполнения программы в моем сценарии. У кого-нибудь есть пример как это сделать? В настоящее время у меня .

Как запустить соответствующее приложение для файла / каталога / URL?

Linuxкажется легкимxdg-open . По всей видимости,макинтошпохож:open следует использовать вместоxdg-open, У меня нет доступа к Mac, поэтому я не смог проверить его. ЗаWindowsЯ нашел 4 различных предложения, и те, которые я .

Как вызвать файл PHP из файла сценария оболочки [дубликата]

На этот вопрос уже есть ответ здесь: Как передать параметры из bash в php скрипт? [/questions/6779576/how-to-pass-parameters-from-bash-to-php-script] 3 ответаМне нужен сценарий оболочки, который имеет цикл. В каждой итерации цикла .

Как запустить программу командной строки в Delphi?

Мне нужно выполнить команду Windows «найти» из программного обеспечения Delphi. Я пытался использоватьShellExecute команда, но это не похоже на работу. В C я бы использовалsystem процедура, но здесь . я не знаю. Я хотел бы сделать что-то вроде .

Попытка вызова ShellExecute для запуска Mysql и сценария SQL

Я пытался использовать ShellExecute из приложения Delphi, чтобы открыть Mysql и запустить скрипт. ShellExecute(Handle, ‘open’, PW >

Новые книги

Практический опыт, описанный в книге, предназначен для освоения во время экономического кризиса, когда цены на новое оборудование – в силу разных причин – завышены, а требования и предпочтения пользователя к функционалу оборудования невысоки и ограничиваются «домашними» задачами. Сегодня почти у каждого активного пользователя скопились запчасти или старые компьютеры, компоненты и детали которых исправны. В то же время покупка нового ПК даже без установленного программного обеспечения (ПО) существенно облегчает кошелек. По сути, вся книга пронизана идеей экономии. При покупке блоков и компонентов ПК в магазинах, вы не только переплачиваете «за бренд» и «в карман посредника», но рискуете впустую потратить время из-за того, что новые компоненты (устройства, платы расширения, приводы, HDD, линейки ОЗУ и др.) не стыкуются со старыми материнскими платами и разъемами, то есть не работают. Чтобы правильно подобрать или заменить отдельные – вышедшие из строя компоненты ПК, или провести частичный апгрейд, необходимо обладать знаниями, которые вполне и всесторонне описаны в данном издании. С другой стороны – разница между новым ПК с тем же функционалом и собранным из деталей двух-трехлетней давности существенна и составляет до 500 %. Таким образом, домашний компьютер для работы становится «золотым». Но не для широкого круга читателей книги, у которых сэкономленные деньги – это заработанные деньги.

То, что сегодня «это наша жизнь» и «рабочие моменты» для специалистов-ремонтников, одновременно является откровением и «секретами» для неподготовленного пользователя персонального компьютера. В книге доступным языком – для непосвященных – описаны приемы восстановления работоспособности ПК, улучшения производительности, рассмотрены часто встречающиеся неисправности ПК и последующие ошибки апргерйда, даются ценные рекомендации практика, которые вы не найдете в Интернете.

FAQ Part 2

Как сграбить экран?
1. Клавиша Alt+Print Screen (не забывайте, что эффект распространяется только на текущее окно)
2. С помощью MFC это делается командами GetDC(GetDesktopWindow), затем BitBlt куда надо. RTFM: BitBlt, CreateCompatibleDC, CreateCompatibleBitmap: Как сделать надпись перевернутую на 90 градусов?
Все как обычно, только в структуре LOGFONT установить (только TrueType шрифты):
lfOrientation = lfEscapement =900 — угол, в десятых долях град.
Кстати, Escapement приводит в повороту строки на 90 градусов, а Orientation — каждой буквы.
lfClipPrecision = CLIP_LH_ANGLES; — не забудьте установить этот флаг (под NT можно без него, а под 95/98 — никак)

Как, например, сетевую карту «отключить в данной конфигурации» через Win32 API?
Мой компьютеp->Свойства->Устpойства->NetCard->Отключено в данной конфигypации можно сделать программно:
Если в Win95 DiChangeState(lpdi, DICS_DISABLE, DICS_FLAG_CONFIGSPECIFIC); — только yчтите, что setupx.dll 16-битовая
Если в 98 или nt SetupDiChangeState

Как сделать так, чтобы _ресурсы_ dll были видны в пользующей его программе?
То есть для того, чтобы загpузить pесуpсы из DLL, тебе надо загpузить DLL, а полученный хэндл использовать в LoadRecource

Как запустить текущего e-mail клиента?

Как сделать, чтобы некотоpое пpиложение не показывалось в Task Bar, System Tray и в списке по Ctrl+Alt+Del?
или А теперь более подробно. Невидимость по Alt-Tab: Невидимость в Панели Задач: Как я могy закpыть пpиложение, запyщенное по ShellExecute?
Как любое другое: получить HWND его окна; по этому HWND получить ID процесса и TerminateProcess() & WM_CLOSE для окна.

Как программно переключить раскладку клавиатуры?
Используйте функцию ActivateKeyboardLayout (. ), которая позволяет установить язык для текущего потока.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL