Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> pointer to integer? 
:(
    Опции темы
mntek
Дата 3.8.2004, 14:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Есть проблема с SendMessage:
В SDK по TB_GETBUTTONTEXT сказано -
wParam = (WPARAM) idButton;
lParam = (LPARAM) (LPSTR) lpszText;

Как переделать pointer на текст в integer?
и еще pointer в string, plz smile.gif)
  Вверх
Serggggg
Дата 3.8.2004, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 12.12.2003
Где: Донецк, Украина

Репутация: нет
Всего: нет



Попробуй извлечь следующим образом

Integer(Pointer) или String(Pointer)
--------------------
C уважением, Serggggg.
PM MAIL ICQ   Вверх
mntek
Дата 3.8.2004, 14:59 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











тогда возникает другая проблема:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
 ShellTrayWnd, ReBarWindow32,
 MSTaskSwWClass, ToolbarWindow32: HWND;
 str: string;
 int: integer;
begin
 ShellTrayWnd := findwindow('ShellTrayWnd', nil);
 ReBarWindow32 := findwindowex(ShellTrayWnd, 0, 'ReBarWindow32', nil);
 MSTaskSwWClass := findwindowex(ReBarWindow32, 0, 'MSTaskSwWClass', nil);
 ToolbarWindow32 := findwindowex(MSTaskSwWClass, 0, 'ToolbarWindow32', nil);
 int := inttostr(SendMessage(ToolbarWindow32, TB_GETBUTTONTEXT, 1, integer(@str)));
 if (int = -1) then exit else
   label2.Caption := int;
 label1.Caption:= str
end;

по идее должен возвращаться текст кнопки, но ничего не проиходитsad.gif
  Вверх
RA
Дата 3.8.2004, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 7
Всего: 115



Попробуй вот так.


Код

procedure TForm1.Button1Click(Sender: TObject);

var
ShellTrayWnd, ReBarWindow32,
MSTaskSwWClass, ToolbarWindow32: HWND;
str: array [1..100] of char;
int: String;
begin
ShellTrayWnd := findwindow('ShellTrayWnd', nil);
ReBarWindow32 := findwindowex(ShellTrayWnd, 0, 'ReBarWindow32', nil);
MSTaskSwWClass := findwindowex(ReBarWindow32, 0, 'MSTaskSwWClass', nil);
ToolbarWindow32 := findwindowex(MSTaskSwWClass, 0, 'ToolbarWindow32', nil);
int := IntToStr (SendMessage(ToolbarWindow32, TB_GETBUTTONTEXT, 1, integer(@str) ) );
if (strToint(int) = -1) then exit else
  label2.Caption := int;
  label1.Caption:= str
end;

Добавлено @ 16:04
Проверить свою точку зрения несмог тк не понимаю чему равен TB_GETBUTTONTEXT и вообще из какого Unita это взято ?

Это сообщение отредактировал(а) RAdmin - 3.8.2004, 16:26
PM   Вверх
Girder
Дата 3.8.2004, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



Код

uses ... CommCtrl;
procedure TForm1.Button1Click(Sender: TObject);
var
ShellTrayWnd, ReBarWindow32,
MSTaskSwWClass, ToolbarWindow32: HWND;
s:string;
i,idB: integer;
begin
...
idB:=1; //Номер кнопки
i:=SendMessage(ToolbarWindow32, TB_GETBUTTONTEXT, idB, 0); //узнаем длину надписи
s:='';
if (i=-1) then ShowMessage('ShowCaptions=False!!!') else
 begin
  SetLength(s,i);
  i:=SendMessage(ToToolbarWindow32, TB_GETBUTTONTEXT, idB,DWord(PChar(s)));
  label2.Caption := IntToStr(i);
  label1.Caption:=s;
 end;
end;


Удачи.

Это сообщение отредактировал(а) Girder - 3.8.2004, 16:11


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
mntek
Дата 3.8.2004, 16:46 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











тоже не выход -у мну рестартится Explorer после нажатия на кнопкуsad.gif
  Вверх
Girder
Дата 3.8.2004, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



Блин, не заметил тыж у чужого процесса запрашиваеш.

Тогда вот так:
Код
uses ... CommCtrl;
procedure TForm1.Button1Click(Sender: TObject);
var ShellTrayWnd,ReBarWindow32,MSTaskSwWClass,ToolbarWindow32: HWND;
   s:string;
   i,iL:integer;
   j:Cardinal;
   id_tb32,h_Pr:Cardinal;
   sP:Pointer;
   f:Boolean;
begin
memo1.Clear;  
memo2.Clear;  
ShellTrayWnd:=findwindow(PAnsiChar('Shell_TrayWnd'), nil);
if ShellTrayWnd=0 then exit;
ReBarWindow32:=findwindowex(ShellTrayWnd,0,PAnsiChar('ReBarWindow32'), nil);
if ReBarWindow32=0 then exit;
MSTaskSwWClass:=findwindowex(ReBarWindow32,0,PAnsiChar('MSTaskSwWClass'), nil);
if MSTaskSwWClass=0 then exit;
ToolbarWindow32:=findwindowex(MSTaskSwWClass,0,PAnsiChar('ToolbarWindow32'), nil);
if ToolbarWindow32=0 then exit;
i:=SendMessage(ToolbarWindow32,TB_BUTTONCOUNT,0,0);
if i>0 then
 repeat
  dec(i);
  f:=Boolean(SendMessage(ToolbarWindow32,TB_ISBUTTONHIDDEN,i,0));
  GetWindowThreadProcessId(ToolbarWindow32,@id_tb32);
  h_Pr:=OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ, false,id_tb32);
  if h_Pr<>0 then
   begin
    iL:=SendMessage(ToolbarWindow32, TB_GETBUTTONTEXT,i,0); //узнаем длину надписи
    if (iL=-1) then ShowMessage('ShowCaptions=False!!!') else //на всяк пожарный
     begin
      SetLength(s,iL*2);
      sP:=VirtualAllocEx(h_Pr,nil,Length(s),MEM_RESERVE or MEM_COMMIT,PAGE_READWRITE);
      iL:=SendMessage(ToolbarWindow32,TB_GETBUTTONTEXT,i,integer(sP));
      if ReadProcessMemory(h_Pr,sP,PChar(s),iL,j) then
       if f then memo1.Lines.Add(IntToStr(iL)+': '+copy(s,1,iL)) else
        memo2.Lines.Add(IntToStr(iL)+': '+copy(s,1,iL));
      VirtualFreeEx(h_Pr,sP,0,MEM_RELEASE);
     end;
    CloseHandle(h_Pr);
   end;
 until (i=0);
end;


Удачи.

Это сообщение отредактировал(а) Girder - 3.8.2004, 18:45


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
mntek
Дата 3.8.2004, 22:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











big thanq smile.gif)
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.