ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

[Delphi] GetText из msctls_statusbar32
  #1  
Старый 20.08.2009, 00:16
Аватар для ex3me
ex3me
Участник форума
Регистрация: 07.01.2009
Сообщений: 186
Провел на форуме:
1247273

Репутация: 166
Отправить сообщение для ex3me с помощью ICQ
Exclamation [Delphi] GetText из msctls_statusbar32

Нашел в инете замечательную функцию для получения текста из msctls_statusbar32 :

Код:
function GetStatusText(wndWindow: THandle;
  StatusBarClassName: string;
  PanelIndex: Byte): string;
var
  WndStatusBar: THandle;
  StatusBarText: array[0..$FFF] of Char;
begin
  Result := '';
  WndStatusBar := FindWindowEx(wndWindow, 0, PChar(StatusBarClassName), nil);
  if WndStatusBar <> 0 then
  begin
    if PanelIndex = 0 then
      SendMessage(WndStatusBar, WM_GETTEXT, $FFF, Longint(@StatusBarText))
    else
      SendMessage(WndStatusBar, SB_GETTEXT, PanelIndex, Longint(@StatusBarText));
    Result := StrPas(StatusBarText);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Read statustext from Internet Explorer
  label1.Caption := GetStatusText(FindWindow('IEFrame', nil), 'msctls_statusbar32', 0);
end;
Да вот одна проблема: при GetStatusText(FindWindow('IEFrame', nil), 'msctls_statusbar32', 0);, где второй параметр равен нулю (указывает на номер области статус бара, нумеруются они с нуля), все работает отлично - текст грабится.
Но если указать вторым параметром этой функции 1 или 2 (всего в статусбаре чужого приложения 3 области) - текст не грабится.

Комметарии вроде: там стоит WM_GETTEXT, а там - SB_GETTEXT - не уместны... Пробовал по-разному, подставляя различные значения.

Установка длины текста с помощью SB_GETTEXTLENGTH так же не помогает =\

Может кто-то осилит довести до ума эту функцию, ибо уже 6й час бьюсь и все бестолку

add: uses CommCtrl
 
Ответить с цитированием

  #2  
Старый 20.08.2009, 12:05
Аватар для flacs
flacs
Познающий
Регистрация: 28.01.2009
Сообщений: 90
Провел на форуме:
432613

Репутация: 80
По умолчанию

Переписал функцию, проверил работает.
Код:
function GetStatusTextEx(PanelIndex: cardinal): string;
  function GetWindowTextEx(Wnd: THandle): string;
  var
    __Text: array [0..$FFF] of Char;
    s: string;
  begin
    Result:='';
    if Wnd <> 0 then begin
      SendMessage(Wnd, WM_GETTEXT, $FFF, Longint(@__Text));
      Result := StrPas(__Text);
    end;
  end;
const PANEL_CLASS = 'TabWindowClass';
var wnd, nWnd, status: cardinal;
    buf: array [0..MAX_PATH-1] of char;
    num: cardinal;
begin
  Result:='';
  wnd:=FindWindow('IEFrame', nil);
  nWnd:=GetWindow(Wnd, GW_CHILD); num:=0;
  {Перечисляем детей...}
  while (nWnd<>0) do begin
      nWnd:=GetNextWindow(nWnd, GW_HWNDNEXT);
      if (nWnd=0) then break;
      GetClassName(nWnd, buf, SizeOf(buf));
      if buf = PANEL_CLASS then  begin
        status:=FindWindowEx(nWnd, 0, 'msctls_statusbar32', nil);
        if num = PanelIndex then Result:=GetWindowTextEx(status);
        inc(num);
      end;
  end;
end;
изпользовать
Label1.Caption:=GetStatusTextEx(1);

Последний раз редактировалось flacs; 20.08.2009 в 12:13..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi] Расчет времени Lord NightKon С/С++, C#, Delphi, .NET, Asm 8 20.05.2009 00:46
[DELPHI] WEB Ant1Player С/С++, C#, Delphi, .NET, Asm 2 03.05.2009 07:32
[DELPHI] процесс Ant1Player С/С++, C#, Delphi, .NET, Asm 3 02.05.2009 14:39
[DELPHI] таймер Ant1Player С/С++, C#, Delphi, .NET, Asm 3 01.05.2009 19:45



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ