ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #4051  
Старый 07.08.2009, 11:01
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме:
6075534

Репутация: 2731


Отправить сообщение для mailbrush с помощью ICQ
По умолчанию

Как в дельфи с помощью ресурсов (.res файлов) запустить программу из памяти (не копируя её куда-либо).
 

  #4052  
Старый 07.08.2009, 23:36
ex3me
Участник форума
Регистрация: 07.01.2009
Сообщений: 186
Провел на форуме:
1247273

Репутация: 166
Отправить сообщение для ex3me с помощью ICQ
По умолчанию

Уважаемые знатоки! Имееются компоненты Image1 и Image2, в первом - картинка.

Внимание вопрос: как сделать копирование из Image1 в Image2 необходимой мне части картинки (условно - координаты: 100, 50 ; размер: 20х30)?

Последний раз редактировалось ex3me; 08.08.2009 в 00:01..
 

  #4053  
Старый 08.08.2009, 09:31
Nullsleep
Познающий
Регистрация: 02.06.2009
Сообщений: 67
Провел на форуме:
237284

Репутация: 54
Отправить сообщение для Nullsleep с помощью ICQ
По умолчанию

Код:
const
  x = 100;
  y = 50;
  w = 20;
  h = 30;
  x2 = 0;
  y2 = 0;
begin
  Image2.Canvas.CopyRect(Rect(x2, y2, w, h), Image1.Canvas,
    Rect(x, y, w+x, h+y));
end;
x2, y2 - это координаты, определяющие куда нужно вставить часть изображения в Image2

Последний раз редактировалось Nullsleep; 08.08.2009 в 09:35..
 

  #4054  
Старый 08.08.2009, 10:29
art2222
Участник форума
Регистрация: 28.04.2008
Сообщений: 172
Провел на форуме:
1191083

Репутация: 270
Отправить сообщение для art2222 с помощью ICQ
По умолчанию

Цитата:
Сообщение от mailbrush  
Как в дельфи с помощью ресурсов (.res файлов) запустить программу из памяти (не копируя её куда-либо).
Создай в блокноте *.rc файл с таким текстом (например)
Код:
TESTFILE EXEFILE C:\Windows\Notepad.exe
Скомпилируй при помощи brcc32.exe в res файл.
Добавляешь такую строку в проект
Код:
{$R MYRES.RES}
И полный сорец
Код:
var 
  Form1: TForm1; 
  NOTEPAD_FILE: string; 

implementation 

{$R *.DFM} 
{$R MYRES.RES} 

function GetTempDir: string; 
var 
  Buffer: array[0..MAX_PATH] of Char; 
begin 
  GetTempPath(SizeOf(Buffer) - 1, Buffer); 
  Result := StrPas(Buffer); 
end; 

// Extract the Resource 
function ExtractRes(ResType, ResName, ResNewName: string): Boolean; 
var 
  Res: TResourceStream; 
begin 
  Result := False; 
  Res := TResourceStream.Create(Hinstance, Resname, PChar(ResType)); 
  try 
    Res.SavetoFile(ResNewName); 
    Result := True; 
  finally 
    Res.Free; 
  end; 
end; 

// Execute the file 
procedure ShellExecute_AndWait(FileName: string); 
var 
  exInfo: TShellExecuteInfo; 
  Ph: DWORD; 
begin 
  FillChar(exInfo, SizeOf(exInfo), 0); 
  with exInfo do 
  begin 
    cbSize := SizeOf(exInfo); 
    fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT; 
    Wnd := GetActiveWindow(); 
    ExInfo.lpVerb := 'open'; 
    lpFile := PChar(FileName); 
    nShow := SW_SHOWNORMAL; 
  end; 
  if ShellExecuteEx(@exInfo) then 
  begin 
    Ph := exInfo.HProcess; 
  end 
  else 
  begin 
    ShowMessage(SysErrorMessage(GetLastError)); 
    Exit; 
  end; 
  while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do 
    Application.ProcessMessages; 
  CloseHandle(Ph); 
end; 

// To Test it 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
  if ExtractRes('EXEFILE', 'TESTFILE', NOTEPAD_FILE) then 
    if FileExists(NOTEPAD_FILE) then 
    begin 
      ShellExecute_AndWait(NOTEPAD_FILE); 
      ShowMessage('Notepad finished!'); 
      DeleteFile(NOTEPAD_FILE); 
    end; 
end; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
  NOTEPAD_FILE := GetTempDir + 'Notepad_FROM_RES.EXE'; 
end;
Вроде бы вот так. После выполнения файл удалится.
Сорец не мой, к сожалению автора не знаю.
 

  #4055  
Старый 08.08.2009, 12:17
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме:
6075534

Репутация: 2731


Отправить сообщение для mailbrush с помощью ICQ
По умолчанию

art2222, не надо меня учить как компилить с .rc в .res
И ответ у тебя не тру
Вчитайся в вопрос:
Цитата:
Как в дельфи с помощью ресурсов (.res файлов) запустить программу из памяти (не копируя её куда-либо).
 

  #4056  
Старый 08.08.2009, 16:06
bons
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме:
1777055

Репутация: 347
По умолчанию

Цитата:
Сообщение от mailbrush  
Как в дельфи с помощью ресурсов (.res файлов) запустить программу из памяти (не копируя её куда-либо).
http://www.wasm.ru/article.php?article=memfile
там правда пример на асме но разобраться надеюсь труда не составит
если программа в виде длл то тут slesh выкладывал https://forum.antichat.ru/threadnav132116-1-10.html. Хотя думаю при желании можно модифицировать и для exe
 

  #4057  
Старый 08.08.2009, 17:36
transserg
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
Провел на форуме:
1035284

Репутация: 52
Отправить сообщение для transserg с помощью ICQ
По умолчанию

в общем что то не пойму в чем проблема, извлекаю ехе в темп передаю ему парамерт буквы диска и закрываю программу которая запущенна с флещки и все равно ошибка невозможно извлечь диск... как проверить что недает извлеч устройство? все файлы и программы с флеш были закрыты!
 

  #4058  
Старый 08.08.2009, 17:57
Scripter
Участник форума
Регистрация: 03.09.2008
Сообщений: 155
Провел на форуме:
1201665

Репутация: 236
По умолчанию

Сервер
Код:
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
var
  text: string;
begin
text := 'test';
AThread.Connection.ReadBuffer(Clientbuffer,SizeOf(Clientbuffer)); //читаем то что шлет клиент при подключении
Clientbuffer.login := AnsiLowerCase(Trim(Clientbuffer.Login)); //удаляем пробелы по краям и вводим в нижний регистр для сверки
if text = Clientbuffer.Login then //сверям
TidpeerThread(Athread).Connection.WriteLn('ok'); //если верно, отсылаем клиенту ОК
end;

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
Msg    : String;
begin
Msg    := AThread.Connection.ReadLn; //читаем значение
memo1.Lines.Add(Msg); //записываем значение
end;


Клиент
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
with SendBuffer do
 begin
 Login := edit11.text; //заполняем буфер данными перед отправкой
 end;
idTCPclient1.Connect; //подключаемся
idTCPClient1.WriteBuffer(SendBuffer,SizeOf(SendBuffer),true); //шлем данные

if idTCPclient1.ReadLn = 'ok' then //если ответ ОК то
begin
Memo1.Lines.Add(Подрубились); //пишем подрубились
button2.enabled := true; //делаем кнопку доступной
end;

procedure TForm1.Button2Click(Sender: TObject);
var
A : integer = 0;
begin
inc(A);
IdTCPClient1.writeln(intToStr(A)); //отсылаем значение А серверу
end;


Проблема: всё работает, но сервер не получает данные А и не записывает их, либо клиент не отсылает их, но это врядли.
В чем моя ошибка? Заранее спасибо.
 

  #4059  
Старый 08.08.2009, 18:12
Nullsleep
Познающий
Регистрация: 02.06.2009
Сообщений: 67
Провел на форуме:
237284

Репутация: 54
Отправить сообщение для Nullsleep с помощью ICQ
По умолчанию

Scripter, попробуй перенести весь код из IdTCPServer1Connect в IdTCPServer1Execute.
И еще: почему бы вместо TidpeerThread(Athread).Connection.WriteLn('ok'); не написать просто Athread.Connection.WriteLn('ok');?
 

  #4060  
Старый 08.08.2009, 18:19
Scripter
Участник форума
Регистрация: 03.09.2008
Сообщений: 155
Провел на форуме:
1201665

Репутация: 236
По умолчанию

Цитата:
Сообщение от Nullsleep  
Scripter, попробуй перенести весь код из IdTCPServer1Connect в IdTCPServer1Execute.
И еще: почему бы вместо TidpeerThread(Athread).Connection.WriteLn('ok'); не написать просто Athread.Connection.WriteLn('ok');?
спасибо попробую, а в коде у меян пишется именно так:
Athread.Connection.WriteLn('ok');
не знаю почему тут написал иначе
 
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ