Вот пример из одного из моих проектов:
Код:
function AddWindow(AHandle : THandle; ListBox : LPARAM) : BOOL; stdcall;
var
FWndInfo : TWndInfo;
AText : String;
PText : Array [0..1023] Of Char;
begin
If (AHandle <> Application.Handle) And (AHandle <> Application.MainForm.Handle) And
(IsWindowVisible(AHandle)) And (GetWindow(AHandle, GW_OWNER) = 0) And (IsWindow(AHandle))
Then
Begin
FillChar(PText,Length(PText) * SizeOf(Char),#0);
GetWindowText(AHandle,@PText,1023);
AText := StrPas(PText);
If (AText <> '') And (AText <> 'Program Manager') Then
Begin
FWndInfo := TWndInfo.Create(AHandle,AText);
TListBox(ListBox).Items.AddObject(AText,FWndInfo);
End;
End;
Result := TRUE;
end;
{ TForm1 }
procedure TMainForm.GetWindowsList;
var
I : Integer;
begin
lbWindows.Items.BeginUpdate;
Try
// Clear
For I := 0 To lbWindows.Items.Count-1 Do lbWindows.Items.Objects[i].Free;
lbWindows.Items.Clear;
lbWindows.Sorted := False;
// Get new list
EnumWindows(@AddWindow,LPARAM(lbWindows));
If lbWindows.Items.Count > 0 Then lbWindows.ItemIndex := 0;
lbWindows.Sorted := FPreferences.SortOrder = soAlpha;
Finally
lbWindows.Items.EndUpdate;
End;
end;
Он просто показывает список окон по определенным условиям. Собственно, тебе надо выкинуть работу со списком и с помощью GetWindowText получить заголовок и изменить его вызовом SetWindowText если это правильное окно. счетчик можно сделать глобальным или передавать через второй параметр EnumWindows.
ЗЫ. Кстати, что удивительно, этот код работает прекрасно и в 32 и в 64 битах.