Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2017, 14:04   #11
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так не сдавайтесь, ищите дальше.
https://www.google.com/search?q=syst...rol32+get+text

Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 24.11.2017, 14:33   #12
tboiner
Новичок
Джуниор
 
Регистрация: 23.11.2017
Сообщений: 9
По умолчанию

трудно новичку во всем этом разобраться. По вашему поиску путевого не смог найти, и пробовал искать systabcontrol32 Send message. Подсажите где не там свернул
tboiner вне форума Ответить с цитированием
Старый 24.11.2017, 14:42   #13
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

https://msdn.microsoft.com/en-us/library/bb762707.aspx
p51x вне форума Ответить с цитированием
Старый 24.11.2017, 16:11   #14
tboiner
Новичок
Джуниор
 
Регистрация: 23.11.2017
Сообщений: 9
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
спасибо большое, но мне не понятно
tboiner вне форума Ответить с цитированием
Старый 24.11.2017, 16:22   #15
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 24.11.2017, 17:16   #16
tboiner
Новичок
Джуниор
 
Регистрация: 23.11.2017
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Спасибо за такую активную помощь, но мне не понятно вусе равно, вообще. Представление имею, но не понимаю.

Хотя козалось бы легкая задача, определить открыта ли вкладка в диспетчере задач.
tboiner вне форума Ответить с цитированием
Старый 24.11.2017, 17:19   #17
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Что вы не понимаете? Как вызвать функцию и проверить, что она вернула?
p51x вне форума Ответить с цитированием
Старый 24.11.2017, 17:25   #18
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вы б лучше рассказали зачем вам вообще такое извращение нужно.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 24.11.2017, 19:13   #19
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 272
По умолчанию

Код без проверок (на nil и пр.)...
Код:
uses
  CommCtrl;

procedure TForm1.Button1Click(Sender: TObject);
var
  Wnd: HWND;
  dwProcessID, dwBytes: DWORD;
  hProcess: THandle;
  Buffer: array [0..MAX_PATH - 1] of Char;
  pBuffer: PChar;
  Item: TTCItem;
  pItem: PTCItem;
  SelectedItem: Integer;
begin
  Wnd := FindWindow(nil, 'Диспетчер задач Windows');
  if Wnd <> 0 then
  begin
    Wnd := FindWindowEx(Wnd, 0, 'SysTabControl32', nil);
    if Wnd <> 0 then
    begin
      GetWindowThreadProcessId(Wnd, @dwProcessID);

      hProcess := OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION, False, dwProcessID);
      if hProcess <> 0 then
      begin
        pItem := VirtualAllocEx(hProcess, nil, SizeOf(TTCItem), MEM_COMMIT, PAGE_READWRITE);
        pBuffer := VirtualAllocEx(hProcess, nil, MAX_PATH, MEM_COMMIT, PAGE_READWRITE);

        ZeroMemory(@Item, SizeOf(TTCItem));
        Item.mask := TCIF_TEXT;
        Item.pszText := pBuffer;
        Item.cchTextMax := MAX_PATH;
        WriteProcessMemory(hProcess, pItem, @Item, SizeOf(TTCItem), dwBytes);

        SelectedItem := SendMessage(Wnd, TCM_GETCURSEL, 0, 0);
        if SendMessage(Wnd, TCM_GETITEM, SelectedItem, LPARAM(pItem)) > 0 then
        begin
          ReadProcessMemory(hProcess, pBuffer, @Buffer[0], MAX_PATH, dwBytes);
          ShowMessage(Buffer);
        end;

        VirtualFreeEx(hProcess, pBuffer, 0, MEM_RELEASE);
        VirtualFreeEx(hProcess, pItem, 0, MEM_RELEASE);
        CloseHandle(hProcess);
      end;  
    end;
  end;
end;
Filka вне форума Ответить с цитированием
Старый 24.11.2017, 20:33   #20
tboiner
Новичок
Джуниор
 
Регистрация: 23.11.2017
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Вы б лучше рассказали зачем вам вообще такое извращение нужно.
Задолжность, преподаватель сказал, найти вкладку у диспетчера, вот мучаюсь.


Цитата:
Сообщение от Filka Посмотреть сообщение
Код без проверок (на nil и пр.)...
Код:
uses
  CommCtrl;

procedure TForm1.Button1Click(Sender: TObject);
var
  Wnd: HWND;
  dwProcessID, dwBytes: DWORD;
  hProcess: THandle;
  Buffer: array [0..MAX_PATH - 1] of Char;
  pBuffer: PChar;
  Item: TTCItem;
  pItem: PTCItem;
  SelectedItem: Integer;
begin
  Wnd := FindWindow('TaskManagerWindow', nil);
  if Wnd <> 0 then
  begin
    Wnd := FindWindowEx(Wnd, 0, 'SysTabControl32', nil);
    if Wnd <> 0 then
    begin
      GetWindowThreadProcessId(Wnd, @dwProcessID);

      hProcess := OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION, False, dwProcessID);
      if hProcess <> 0 then
      begin
        pItem := VirtualAllocEx(hProcess, nil, SizeOf(TTCItem), MEM_COMMIT, PAGE_READWRITE);
        pBuffer := VirtualAllocEx(hProcess, nil, MAX_PATH, MEM_COMMIT, PAGE_READWRITE);

        ZeroMemory(@Item, SizeOf(TTCItem));
        Item.mask := TCIF_TEXT;
        Item.pszText := pBuffer;
        Item.cchTextMax := MAX_PATH;
        WriteProcessMemory(hProcess, pItem, @Item, SizeOf(TTCItem), dwBytes);

        SelectedItem := SendMessage(Wnd, TCM_GETCURSEL, 0, 0);
        if SendMessage(Wnd, TCM_GETITEM, SelectedItem, LPARAM(pItem)) > 0 then
        begin
          ReadProcessMemory(hProcess, pBuffer, @Buffer[0], MAX_PATH, dwBytes);
          ShowMessage(Buffer);
        end;

        VirtualFreeEx(hProcess, pBuffer, 0, MEM_RELEASE);
        VirtualFreeEx(hProcess, pItem, 0, MEM_RELEASE);
        CloseHandle(hProcess);
      end;  
    end;
  end;
end;
Спасибо Большое, но к сожалению не работает. ни на одной вкладке.
tboiner вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу получить hwnd компонента с процессами в Диспетчере задач bakanaev Общие вопросы Delphi 10 03.06.2013 08:19
отследить процесс в диспетчере задач L.A.M.E.R. Win Api 3 27.07.2012 00:38
Как отслеживать процесс в Диспетчере задач... xC0der Win Api 2 12.01.2012 10:41
В диспетчере задач второй пользователь... миха48 Помощь студентам 5 01.12.2011 17:03
Не отображаются имена потзователей в диспетчере задач Altera Windows 1 24.10.2009 14:46