statusbar.panels[1]
От: leon777  
Дата: 24.01.03 08:52
Оценка:
Как получить данные из не нулевой панели статусбара другой программы. Дескриптор статусбара дает возможность получить только данные Panels[0]?
Re: statusbar.panels[1]
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 24.01.03 09:12
Оценка:
Здравствуйте, leon777, Вы писали:

L>Как получить данные из не нулевой панели статусбара другой программы. Дескриптор статусбара дает возможность получить только данные Panels[0]?


Послать ему SB_GETTEXT.
- Искренне ваш, Поросенок Пафнутий
Re[2]: statusbar.panels[1]
От: leon777  
Дата: 27.01.03 05:47
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

L>>Как получить данные из не нулевой панели статусбара другой программы. Дескриптор статусбара дает возможность получить только данные Panels[0]?


SDB>Послать ему SB_GETTEXT.


Работает, если посылаю статусбару своей проги, если чужой — не проходит.
Если шлю WM_GETTEXT, то получаю данные только с Panels[0].
Re[3]: statusbar.panels[1]
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 27.01.03 05:56
Оценка:
Здравствуйте, leon777, Вы писали:

L>Работает, если посылаю статусбару своей проги, если чужой — не проходит.

L>Если шлю WM_GETTEXT, то получаю данные только с Panels[0].

Ну, обмен сообщениями с "чужими" программами тут уже не раз обсуждался.
- Искренне ваш, Поросенок Пафнутий
Re[3]: statusbar.panels[1]
От: Sergey Ten http://www.fastalgo.com
Дата: 27.01.03 06:37
Оценка:
Здравствуйте, leon777, Вы писали:

L>Работает, если посылаю статусбару своей проги, если чужой — не проходит.

L>Если шлю WM_GETTEXT, то получаю данные только с Panels[0].

Могу предложить один экзотический способ:


  // Получаем PID "чужого" процесса по хэндлу окна
  if GetWindowThreadProcessID(AHandle, LProcessID) = 0 then
    Exit;

  LProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, false, LProcessID);

  if LProcessHandle = 0 then
    Exit;

  try
    // Выделяем память в "чужом" процессе
    P := VirtualAllocEx(LProcessHandle, nil, SizeOf(S) + 1, MEM_COMMIT, PAGE_READWRITE);
    if not Assigned(P) then
      Exit;

    try
      // Посылаем SB_GETTEXT. "Приемник" текста находится в чужом процессе
      n := SendMessage(AHandle, SB_GETTEXT, 1, Integer(P));

      if n <> 0 then
      begin
        // Читаем текст из удаленного "приемника" в локальный
        if not ReadProcessMemory(LProcessHandle, P, @S[0], SizeOf(S), LRead) then
          ShowMessage(Format('read error: %d', [GetLastError]));

        // Выводим его на экран (или что там с ним сделать надо)
        Label1.Caption := s;
      end;
    finally
      VirtualFreeEx(LProcessHandle, P, SizeOf(S) + 1, MEM_RELEASE);
    end;
  finally
    CloseHandle(LProcessHandle);
  end;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.