Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ] > Код на шару!
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.06.2014, 15:29
Denisonin Denisonin вне форума
Прохожий
 
Регистрация: 25.11.2013
Сообщения: 42
Версия Delphi: Delphi 7
Репутация: 10
Восклицание Поиск текста в другом процессе

Здравствуйте! Мне нужен код поиска в другом процессе. По заголовку, текст - цифры, буквы (англ/рус). Буду очень благодарен!

Например - нужно найти в "Блокнот - test.txt" текст "test123", программа должна найти его, и вывести адрес(вида $2D230OAB - может и не так, но вы поняли)

Не совсем в этом разбираюсь, но думаю это возможно.
Ответить с цитированием
  #2  
Старый 10.06.2014, 16:22
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Юнит из drkb по данной теме
Код:
unit myfuncs;
interface
uses windows, tlhelp32;

       function IsNT: boolean;
       function OPTHDROFFSET(ptr: LongInt): DWORD;
       function SpawnThreadNT(pszProcess: PChar; g_hModule: HMODULE): boolean;

       procedure EntryPoint;

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;

procedure EntryPoint;
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)));
  end;
end;
end.
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Denisonin (10.06.2014)
  #3  
Старый 10.06.2014, 20:09
Denisonin Denisonin вне форума
Прохожий
 
Регистрация: 25.11.2013
Сообщения: 42
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Прошу готового кода, или объяснения, хотя бы краткого, чтобы затем изучить это.
Знаком только с самыми-самыми основами, так как только недавно начал работать в Delphi, и то, по мелочам.
Ответить с цитированием
  #4  
Старый 10.06.2014, 20:26
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Denisonin
Прошу готового кода, или объяснения, хотя бы краткого, чтобы затем изучить это.
Знаком только с самыми-самыми основами, так как только недавно начал работать в Delphi, и то, по мелочам.
Кратко: открываем процесс, получаем доступ к адресному пространству, после чего побайтно сравниваем с искомым.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 10.06.2014, 20:27
Denisonin Denisonin вне форума
Прохожий
 
Регистрация: 25.11.2013
Сообщения: 42
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Кратко: открываем процесс, получаем доступ к адресному пространству, после чего побайтно сравниваем с искомым.
По-моему, это слишком кратко, для моих знаний.
Ответить с цитированием
  #6  
Старый 10.06.2014, 21:18
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Denisonin
По-моему, это слишком кратко, для моих знаний.
На, практика: http://www.delphisources.ru/pages/so...ry-seeker.html
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:05.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025