Если внутренняя переменная hPrevInst не равна нулю, то она содержит дескриптор предыдущего запущенного экземпляра вашей программы. Вы просто находите открытое окно по его дескриптору и, при необходимости, выводите на передний план. Весь код расположен в файле .DPR file, НЕ в модуле. Строки, которые вам необходимо добавить к вашему .DPR-файлу, в приведенном ниже примере помечены {*}.

  

Code:

procedure TForm1.Button1Click(Sender: TObject);

VAR

Wnd : hWnd;

buff: ARRAY [0..127] OF Char;

begin

ListBox1.Clear;

Wnd := GetWindow(Handle, gw_HWndFirst);

WHILE Wnd <> 0 DO

BEGIN {Не показываем:}

IF (Wnd <> Application.Handle) AND {-Собственное окно}

IsWindowVisible(Wnd) AND {-Невидимые окна}

(GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна}

(GetWindowText(Wnd, buff, sizeof(buff)) <> 0) {-Окна без заголовков}

THEN BEGIN

GetWindowText(Wnd, buff, sizeof(buff));

ListBox1.Items.Add(StrPas(buff));

END;

Wnd := GetWindow(Wnd, gw_hWndNext);

END;

ListBox1.ItemIndex := 0;

end;

 

 

Code:

procedure TForm1.Button1Click(Sender: TObject);

var

ProcessID: DWORD;

ProcessHandle: THandle;

ThreadHandle: THandle;

begin

ProcessID := GetCurrentProcessID;

ProcessHandle := OpenProcess(PROCESS_SET_INFORMATION,

   false, ProcessID);

SetPriorityClass(ProcessHandle, REALTIME_PRIORITY_CLASS);

ThreadHandle := GetCurrentThread;

SetThreadPriority(ThreadHandle, THREAD_PRIORITY_TIME_CRITICAL);

end;

 

Есть handle запущенного PE файла. Как определить откуда он был запущен?

 

Я так предполагаю что getmodulefilename как и GetModuleHandle

работает в рамках только своего процесса.

 

А решить твою задачу .. можно так:

Тут парочка моих любимых функций

 

только для ALT+TAB и CTRL+ESC)

 Это не совсем профессиональный способ, но он работает! Мы просто эмулируем запуск и остановку скринсейвера.

Code:

Procedure TaskSwitchingStatus( State : Boolean );

Var

   OldSysParam : LongInt;

Begin

   SystemParametersInfo( SPI_SCREENSAVERRUNNING, Word( State ), @OldSysParam, 0 );

End;

 

Следующий пример изменяет приоритет приложения. Изменение приоритета следует использовать с осторожностью - т.к. присвоение слишком высокого приоритета может привети к медленной работе остальных программ и системы в целом. См. Win32 help for SetThreadPriority() function.

 

 

Или Как заказать сервисный процесс ?

 

Code:

unit Stealth;

 

interface

uses

WinTypes, WinProcs, Classes, Forms, SysUtils, Controls, Messages;

 

type

TStealth = class(TComponent)

private

fHideApp: Boolean;

procedure SetHideApp(Value: Boolean);

protected

{ Protected declarations }

procedure HideApplication;

procedure ShowApplication;

public

{ Public declarations }

constructor Create(AOwner: TComponent); override;

destructor Destroy; override;

// procedure Loaded; override;

published

{ Published declarations }

property HideApp: Boolean read fHideApp write SetHideApp default false;

end;

 

function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';

 

procedure Register;

 

implementation

 

destructor TStealth.Destroy;

begin

ShowApplication;

inherited destroy;

end;

 

constructor TStealth.Create(AOwner: TComponent);

begin

inherited Create(AOwner);

// fHideform := true;

end;

 

procedure TStealth.SetHideApp(Value: Boolean);

begin

fHideApp := Value;

if Value then HideApplication else ShowApplication;

end;

 

procedure TStealth.HideApplication;

begin

if not (csDesigning in ComponentState) then

RegisterServiceProcess(GetCurrentProcessID, 1);

end;

 

procedure TStealth.ShowApplication;

begin

if not (csDesigning in ComponentState) then

RegisterServiceProcess(GetCurrentProcessID, 0);

end;

 

procedure Register;

begin

RegisterComponents('My', [TStealth]);

end;

 

end.

Admin автор

Читать из реестра HKEY_DYN_DATA\PerfStats\StatData соответствующий ключ Kernel \CPUUsage.

или

 

Этот вопрос меня уже достал, он задаётся на всех программистских форумах, поэтому я выкладываю solution. Листинг библиотеки (nthide.dll), которая будет выполнять нужную нам функцию:

 

Code:

function IsRunning( sName : string ) : boolean;

var

han : THandle;

ProcStruct : PROCESSENTRY32; // from "tlhelp32" in uses clause

sID : string;

begin

Result := false;

// Get a snapshot of the system

han := CreateToolhelp32Snapshot( TH32CS_SNAPALL, 0 );

if han = 0 then

   exit;

// Loop thru the processes until we find it or hit the end

ProcStruct.dwSize := sizeof( PROCESSENTRY32 );

if Process32First( han, ProcStruct ) then

   begin

     repeat

       sID := ExtractFileName( ProcStruct.szExeFile );

       // Check only against the portion of the name supplied, ignoring case

       if uppercase( copy( sId, 1, length( sName ) ) ) = uppercase( sName ) then

         begin

           // Report we found it

           Result := true;

           Break;

         end;

     until not Process32Next( han, ProcStruct );

   end;

// clean-up

CloseHandle( han );

end;

 

 

Вступление

 

Эта статья описывает техники скрытия объектов, файлов, сервисов,

процессов и т.д. в ОС Windows . Эти методы основаны на перехвате функций

Windows API, что описано в моей статье "Hooking Windows API".

Данная информация была получена мною в процессе написания rootkit'а,

поэтому есть вероятность, что это может быть реализовано более эффективно или

намного более просто.