Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Вниз

TreeView   Найти похожие ветки 

 
djone ©   (2004-06-29 20:59) [0]

Ребята подскажите пожалуйста как иЗ TreeView достать текст

Я использую такой вот метод

Function GetTreeItem(opt:string):string;
const
 PROCESS_ACCESS = PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE;
type
 PProcData = ^TProcData;
 TProcData = record
   Item: TTVItem;
   Txt: packed array [0 .. 1023] of AnsiChar;
   ItemRect: TRect;
 end;
var
 Cnt,I: Integer;
 ProcID: DWord;
 ProcessHandle: THandle;
 Data: TProcData;
 ProcData: PProcData;
 Res: Boolean;

begin
 ZHWND:=GetFocus;
 ProcID := 0;
 GetWindowThreadProcessId(ZHWND, ProcID);

 ProcessHandle := OpenProcess(PROCESS_ACCESS, False, ProcID);
 //if ProcessHandle = 0 then RaiseLastOSError;
 try
   ProcData := VirtualAllocEx(ProcessHandle, nil, SizeOf(ProcData^),
     MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
   //if ProcData = nil then RaiseLastOSError;
   try
     Cnt := TreeView_GetCount(ZHWND);
     for I := 0 to Cnt - 1 do
     begin

       with Data.Item do
       begin

         //iSubItem := 0;
         pszText := @ProcData^.Txt;
         cchTextMax := Length(ProcData^.Txt) - 1;
         hitem:=;
       end;

       Res := WriteProcessMemory(ProcessHandle, ProcData,
         @Data, SizeOf(Data), PLongWord(nil)^);
       if not Res then RaiseLastOSError;

           SendMessage(ZHWND, TVM_GETITEM, 0, LongInt(@ProcData^.Item));
           Res := ReadProcessMemory(ProcessHandle, ProcData,
           @Data, SizeOf(Data), PLongWord(nil)^);
           if not Res then RaiseLastOSError;
         result:= Data.Txt;
         if data.Item.state  =TVIS_SELECTED  then
         begin
           if opt="txt" then result:= Data.Txt;
           if opt="num" then result:=inttostr(i);

         end;
     end;
   finally
     //Res := LongBool(VirtualFreeEx(ProcessHandle, ProcData, 0, MEM_RELEASE));
     //if not Res then RaiseLastOSError;
   end;
 finally
   CloseHandle(ProcessHandle);
 end;

end;

Но он не работает!


 
djone ©   (2004-06-30 12:28) [1]

Никто не поможет?


 
inic ©   (2004-06-30 15:01) [2]

Во-первых вызывает сомнения GetFocus: в Win32 SDK сказано, что эта функция вернет окно с фокусом, если только ее вызвал thread, связанный с этим окном, у тебя же необходимо заиметь окно (treeview) из другого процесса.


 
inic ©   (2004-06-30 15:08) [3]

Во-вторых: hitem ничему не присваивается !!!

Присвой например SendMessage(hTree, TVM_GETNEXTITEM, TVGN_FIRSTVISIBLE, 0);

Я скопировал твой код, для примера явно присвоил конкретный handle дерева из другого процесса, все работает


 
djone ©   (2004-07-05 01:19) [4]

А как ты это сделал?
Я не смог потомучто он сказал SendMessage(hTree, TVM_GETNEXTITEM, TVGN_FIRSTVISIBLE, 0); и Htree - Несовместимые типы.


 
djone ©   (2004-07-06 13:03) [5]

Помогите!!!!! ПОЖАЛУЙСТА!


 
GrayFace ©   (2004-07-06 15:58) [6]

inic ©   (30.06.04 15:08) [3]
Скопируй обратно исправленный код и будет всем счастье.


 
dosik   (2004-07-07 01:25) [7]

Посмотри макросы типа TreeView_XXX. TreeView - это стандартаная виндовская приблуда, а делфийский компонент, это просто оболочка к ней. В принцие делфи так с ней и работает, посмотри исходники, там все ясно описанно. Удачи )))


 
djone ©   (2004-07-08 00:23) [8]

Ребята спасайте! Я всё сделал. Всё работает нормально но когда мышкой начинаешь водить , начинаеться пакость

Function GetTreeItem(opt:string):String;
const
PROCESS_ACCESS = PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE;
type
PProcData = ^TProcData;
TProcData = record
  Item: TTVItemA;
  Txt: packed array [0 .. 1023] of AnsiChar;
  ItemRect: TRect;
end;
var
Cnt,I: Integer;
ProcID: DWord;
ProcessHandle: THandle;
Data: TProcData;
ProcData: PProcData;
Res: Boolean;

begin
ZHWND:=getfocus;
ProcID := 0;
GetWindowThreadProcessId(ZHWND, ProcID);

ProcessHandle := OpenProcess(PROCESS_ACCESS, False, ProcID);
//if ProcessHandle = 0 then RaiseLastOSError;
try
  ProcData := VirtualAllocEx(ProcessHandle, nil, SizeOf(ProcData^),
    MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
  //if ProcData = nil then RaiseLastOSError;
  try
    Cnt := TreeView_GetCount(ZHWND);
   // for I := 0 to Cnt - 1 do
    //begin
     
      with Data.Item do
      begin

        //iSubItem := 0;
        hitem:=TreeView_GetSelection(zhwnd);
        cchTextMax := Length(ProcData^.Txt) - 1;
        pszText := @ProcData^.Txt;

      end;

      Res := WriteProcessMemory(ProcessHandle, ProcData,
        @Data, SizeOf(Data), PLongWord(nil)^);
      if not Res then RaiseLastOSError;

          SendMessage(ZHWND, TVM_GETITEM, 0, LongInt(@ProcData^.Item));
          Res := ReadProcessMemory(ProcessHandle, ProcData,
          @Data, SizeOf(Data), PLongWord(nil)^);
          if not Res then RaiseLastOSError;
        result:= Data.Txt
        {if data.Item.state  =TVIS_SELECTED  then
        begin

          //if opt="txt" then result:= Data.Txt;
          //if opt="num" then result:=inttostr(i);

        end;}
    //end;
  finally
    //Res := LongBool(VirtualFreeEx(ProcessHandle, ProcData, 0, MEM_RELEASE));
    //if not Res then RaiseLastOSError;
  end;
finally
  CloseHandle(ProcessHandle);
end;
end;



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.037 c
9-1082036082
istemy
2004-04-15 17:34
2004.08.22
Как сделать так, чтобы герой не проходил стены?


3-1090846354
AleXqwq
2004-07-26 16:52
2004.08.22
ADO+MySql


3-1091015329
MORA
2004-07-28 15:48
2004.08.22
подчинённая таблица


1-1092141599
Кодер
2004-08-10 16:39
2004.08.22
Обращение к ресурсу


9-1084025706
V0id
2004-05-08 18:15
2004.08.22
Sprite





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский