Lazarus - пишем аналог HideExe

Следующая задача, которую мы поставим перед собой-это написание программы, позволяющей произвести (из командной строки) скрытый запуск другой программы. (Есть программа HideExe , но она shareware, поэтому даже знакомится с ней не стал. Сам напишу)

В Windows есть чудесная утилита RunDll32.exe - она позволяет воспользоваться из командной строки подпрограммой имеющейся в dll- библиотеке.

Например rundll32 shell32,ShellAboutA  - вывести информацию о системе

Здесь shell32 - имя библиотеки, ShellAboutA- имя подпрограммы

Создадим свою библиотеку hide.dll

В Lazarus в меню выбираем Проект -> Создать проект, выбираем Библиотека

Скопируйте следующий текст:

 

library HideIt;
 
{$mode objfpc}{$H+}
 
uses
  Classes,windows
,ShellApi;
 
{$R *.res}
function HideRun(hWnd: Integer;hInstance: Integer;lpCmdLine: PChar;dummy: Longint): Integer; stdcall; export;
begin
    ShellExecute(0, 'open', PChar(lpCmdLine), nil, nil, 0) ; {Собственно запуск программы указанной в строке lpCmdLine , последний 0 означает скрытый запуск, был бы 1 - был бы явный}
  Result := 0;
end;
 
exports
HideRun; {список экспортируемых функций}
 
begin
end.
     
Сохраним проект как hide.lpr и скомпилируем его (Ctrl+F9) - при этом появится hide.dll
 
(Если не указан путь к dll, утилита RunDll32 ищет dll-ки или в текущей папке или в папке Windows. )
 
Теперь команда rundll32 hide.dll,HideRun <путь+имя файла> скрытно запустит программу.
 
В качестве проверки я создал 2 пакетных файла:
echo.bat со следующим содержимым
echo !!!!!!
pause
 
И HideEcho.bat со следующим содержимым
rundll32 hide.dll,HideRun echo.bat
 
Если запустить echo.bat - мы видим черное окно консоли и сообщение с просьбой нажать любую клавишу для продолжения и пока не нажмем не исчезает.
Теперь запустим Hide Echo.bat - мигает окно консоли (запуск утилиты rundll32) и все. Удался ли запуск echo.bat ? Откроем диспетчер процессов и видим процесс cmd - это работает интерпретатор командной строки - обрабатывая содержимое файла echo.bat и ожидая нажатия любой клавиши. (Однако даже если мы нажмем любую клавишу , это событие не будет передано оной задаче, поскольку ее окно скрыто) Завершите процесс cmd в диспетчере задач.
 
Далее:
rundll32 hide.dll,HideRun calc - калькулятор не скрывается
rundll32 hide.dll,HideRun NotePad - блокнот запускается скрытно
 
(Писать нужно именно HideRun  , hiderun  или HIDErun не сработает)
ВложениеРазмер
Исходники и программа576.15 КБ