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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить данные из Grid в чужом приложении 
:(
    Опции темы
RinOSpro
Дата 6.11.2007, 16:53 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте есть одно приложение в нем grid из него надо вытащить текст, в той проге нет предусмотрено сохранять эти данные. а они мне нужны и их боллее 100. пробывал код из DRKB но чтото не работает с гридами.

Код

function GetTextPODCursor: PChar;
var grabtext: array[0..125] of char;
   lpPoint: TPoint;
   hwnd: THandle;
begin
  GetCursorPos(lpPoint);
  hwnd := WindowFromPoint(lpPoint);
  if (SendMessage(hwnd, EM_GETPASSWORDCHAR, 0, 0) <> 0) then
     begin
      SendMessage(hwnd, WM_GETTEXT, 20, Integer(PChar(@grabtext)));
      result := PChar(@grabtext);
     end else
  result := PChar('');
end;


Код

unit myfuncs;

interface

uses windows, tlhelp32;

       function IsNT: boolean;

       function OPTHDROFFSET(ptr: LongInt): DWORD;

       function SpawnThreadNT(pszProcess: PChar; g_hModule: HMODULE): boolean;

       function EntryPoint:string;

implementation

const 

       EM_GETPASSWORDCHAR  = $00D2;

       WM_SETTEXT          = $000C;

       WM_GETTEXT          = $000D;

function IsNT: boolean;
var
       osvi:   OSVERSIONINFO;
begin
   osvi.dwOSVersionInfoSize := sizeof(OSVERSIONINFO);

   if(not GetVersionEx(osvi))then

       begin

               result := FALSE;

               exit;

       end;

   if(osvi.dwPlatformId <> VER_PLATFORM_WIN32_NT)then

       result := FALSE

   else

       result := TRUE;

end;

function OPTHDROFFSET(ptr: LongInt): DWORD;

begin

       result := PImageOptionalHeader(int64(ptr) + PImageDosHeader(ptr)._lfanew + sizeof(DWORD) + sizeof(IMAGE_FILE_HEADER)).SizeOfImage;

end;

function SpawnThreadNT(pszProcess: PChar; g_hModule: HMODULE): boolean;

var

       dwProcID: DWORD;

       hToolHelp: THandle;

   pe: PROCESSENTRY32;

       hProc: THandle;

       dwSize: DWORD;

       pMem: Pointer;

   dwOldProt, dwNumBytes, i: DWORD;

       mbi: TMemoryBasicInformation;

       dwRmtThdID: DWORD;

       hRmtThd: THandle;

begin

   hToolHelp := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

   pe.dwSize := sizeof(pe);

   if(not Process32First(hToolHelp, pe))then

       begin

               result := false;

               exit;

       end;

       dwProcID := 0;

   while(Process32Next(hToolHelp, pe))do

   begin

       if(lstrcmpi(pe.szExeFile, pszProcess) = 0)then

       begin

           dwProcID := pe.th32ProcessID;

           break;

       end;
  end;

 

   if(dwProcID = 0)then

   begin

       result := FALSE;

               exit;

   end;

 

   if(GetCurrentProcessId() = dwProcID)then

       begin

               result := FALSE;

               exit;

       end;

 

 

   hProc := OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcID);

   if(hProc = 0)then

   begin

       result := FALSE;

               exit;

   end;

 

   VirtualFreeEx(hProc, ptr(g_hModule), 0, MEM_RELEASE);

 

   dwSize := OPTHDROFFSET(g_hModule);

 

   pMem := VirtualAllocEx(hProc, ptr(g_hModule), dwSize, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);

   if(pMem = nil)then

   begin

       result := FALSE;

               exit;

   end;

 

   VirtualQueryEx(hProc, pMem, mbi, sizeof(MEMORY_BASIC_INFORMATION));

   while((mbi.Protect <> PAGE_NOACCESS) and (mbi.RegionSize <> 0))do

       begin

       if((mbi.Protect and PAGE_GUARD) = 0)then

       begin

                       i := 0;

                       while(i < mbi.RegionSize)do

           begin

                   if(not VirtualProtectEx(hProc, ptr(DWORD(pMem) + i), $1000, PAGE_EXECUTE_READWRITE, dwOldProt))then

                               begin

                                       result := FALSE;

                                       exit;

                               end;

 

               if(not WriteProcessMemory(hProc, ptr(DWORD(pMem) + i), Pointer(DWORD(g_hModule) + i), $1000, dwNumBytes))then

                               begin

                                       result := FALSE;

                                       exit;

                               end;

                               i := i + $1000;

           end;

                       pMem := Pointer(DWORD(pMem) + mbi.RegionSize);

           VirtualQueryEx(hProc, pMem, mbi, sizeof(MEMORY_BASIC_INFORMATION));

       end;

   end;

 

   hRmtThd := CreateRemoteThread(hProc, nil, 0, @EntryPoint, ptr(g_hModule), 0, dwRmtThdID);

   if(hRmtThd = 0)then

   begin

       result := FALSE;

               exit;

   end;

   CloseHandle(hProc);

 

       result := TRUE;

end;

 

 

function EntryPoint:string;
var
       grabtext        : array[0..125] of char;
       lpPoint         : TPoint;
       hwnd            : THandle;
begin
  GetCursorPos(lpPoint);
  hwnd := WindowFromPoint(lpPoint);
  if (GetParent(hwnd) <> 0)then
  begin
       SendMessage(hwnd, WM_GETTEXT, 20, Integer(PChar(@grabtext)));
       SendMessage(FindWindowEx(FindWindow('pGClass', nil), 0, 'Edit', nil), WM_SETTEXT, 0, Integer(PChar(@grabtext)));
       Result := grabtext;
  end;
end;

end.


Подскажите пожалуста как можно вытащить значения из грида.
  Вверх
RinOSpro
Дата 7.11.2007, 15:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Помогите плиз хотябы советом!
  Вверх
Akella
Дата 8.11.2007, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Работа с чужими окнами

Добавлено через 7 минут и 47 секунд
http://forum.vingrad.ru/forum/topic-59135.html
http://forum.vingrad.ru/topic-59219.html

Добавлено через 9 минут и 44 секунды
и вообще, нужно было тебе в этом форуме задавать вопросы
http://forum.vingrad.ru/forum/delphi-winapi.html
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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