[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. Proger10

    Proger10 Member

    Joined:
    19 Dec 2008
    Messages:
    80
    Likes Received:
    7
    Reputations:
    0
    Низнаю, низнаю, насчет того что начинать с Delphi, знаю несколько людей, которые очень хотяли научится прогрммировать и в итоге бросили, потому что им было все не понятно, а я зная паскаль после двух месяцев вожения с delphi, написал прогу которая вполне сошла б за коммерческий продукт.
    Но это наверно от преподавателя зависит (а я сам delphi выучил)
     
  2. ZET36

    ZET36 Elder - Старейшина

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    Существует ли аналог Sendmessagge/Postmessage который отправляет сообщения не окну, а на пример хэндлу или pid программы, уже подумываю о отправке через сокет на 127.0.0.1 :D
    Немножко изменю вопрос. Нужно, в принципе, обмениваться сообщениями с dll, которая инжектирована в другое приложение, только как получить/обращаться к форме приложения в которое она инжектирована из этой dll ?

    Главная проблема, как уже поняли, в приёме данных библиотекой
    ..
    Решил даную проблему
    Code:
    function GetFormFromHandle(Handle: HWnd): TForm;
    var
      wc: TWinControl;
    begin
      wc := FindControl(Handle);
      if (wc is TForm)
        then Result := TForm(wc)
        else Result := nil;
    end;
    
     
    #4742 ZET36, 22 Nov 2009
    Last edited: 22 Nov 2009
  3. Freedom

    Freedom Elder - Старейшина

    Joined:
    2 Jul 2007
    Messages:
    38
    Likes Received:
    92
    Reputations:
    8
    Ребят помогите плиз. Собственно вопрос как капчу Recaptcha загрузить в TImage ?
     
  4. Пуховой

    Joined:
    25 Nov 2007
    Messages:
    46
    Likes Received:
    37
    Reputations:
    0
    Может ли данная функция кушать память (не освобождать по выполнении) ? Используется и из вспомогательных потоков, и из главного потока.

    Code:
    function httpget (http : tidhttp; adr : widestring) : widestring;
    var
      str : tstringstream;
    begin
      str := tstringstream.Create('');
      try http.Get (adr, str); except end;
      Result := str.DataString;
      str.Free;
    end;
    С некоторого времени многопоточные программы для работы с сетью стали кушать очень много памяти (на 50 потоков - 80 мб уже на 10-й минуте работы, чем дальше - тем больше). TrimWorkingSet, естественно, не помогает.
     
  5. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    Вопросик: каким образом создаются билдеры ны дэлфе? Есть фэйк рабочий чтобы его перенастроить надо вего 3 переменных поменять, а как это сделать на знаю(
     
  6. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    Сформулируйте пожалуйста вопрос. Билдеры чего? Какой фейк? Что у вас конкретно не получается?
     
  7. transserg

    transserg Elder - Старейшина

    Joined:
    2 Jul 2008
    Messages:
    147
    Likes Received:
    25
    Reputations:
    2
    есть ли в делфи функции чтоб обрабатывать строки по маске? типа ? или *
     
  8. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    Фэйк ВК антиспам агент(думаю не суть), не получается нечего потому как не знаю.

    Как вообщем Создать билдер того самого фэйка чтобы на выходе ехе выдавался с введенными переменными??
     
  9. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    c:=ord(char(pchar(mes[1])));
    SetFilePointer(f, $2851, nil, 0);
    WriteFile(f, c, SizeOf©, BytesRead, nil);

    Но это подходит для патчинга ане билдинга, хех продвинулся и нашел
    CreateExe(EOutFile.Text, 14336); каким образом работает эта функция и как засунуть один exe в другой?

    Каким образом динамически искать байты для замены т.е. пол винхекс который найдет байт и заменит его?
     
    #4749 0ldbi4, 22 Nov 2009
    Last edited: 22 Nov 2009
  10. iGlass

    iGlass New Member

    Joined:
    14 May 2009
    Messages:
    86
    Likes Received:
    1
    Reputations:
    0
    Всем доброго времени суток!
    У меня есть вопрос:

    У меня есть библиотека, я хочу чтобы explorer загружал её при старте Windows, как такое можно реализовать и можно ли вообще?

    Заранее очень благодарен!
     
  11. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    iGlass ты хочешь чтобы провести dll инжект?xakep.ru
    нужно её загрузить как приложение те через запуск длл как приложений или нужно чтобы ехрлогег цеплял его??
     
  12. iGlass

    iGlass New Member

    Joined:
    14 May 2009
    Messages:
    86
    Likes Received:
    1
    Reputations:
    0
    Да, чтоб эксплорер цепанул её, и она там висела, её цель искать определённое приложение и не дать ему запуститься..

    За статью спасибо, пригодиться.
     
  13. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    Не уверен но вроде explorer работает без длл можно инжект (up),

    А не проще прогу в авто загрузке или инжектить к проге из автозагрузки?? просто скрыть её и все, есть служба запуск длл как приложения не разу не пользовался но кажется она может помочь..
     
  14. iGlass

    iGlass New Member

    Joined:
    14 May 2009
    Messages:
    86
    Likes Received:
    1
    Reputations:
    0
    Ну вот смотри, есть программа, она не прописана в автозапуске, пользователь захотел запустил захотел не запустил.. Так вот, Мне до запуска программы нужно подгрузить свою библеотеку чтобы она уже висела впамяти и ждала прогу, а когда пользователь начнёт запускать программу, то ничего происходить не будет т.к в dll стоит хук.

    Желательно бы про эту службу по подробнее )

    Вот такие пироги =)
     
  15. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    iGlass можно если ты знаешь что эта программа есть, узнать адресс проги в реестре и инжектится в нее при запуске, тогда можно с ней делать что угодно из-нутри так сказать.

    Про службу погугли сам, если что найдется интересное пиши в ПМ
     
  16. iGlass

    iGlass New Member

    Joined:
    14 May 2009
    Messages:
    86
    Likes Received:
    1
    Reputations:
    0
    ок, завтра посмотрю.. У нас поздно уже.. 00.18 =(

    За статью ещё раз спасибо, очень интересно =)
     
  17. KaZ@NoVa

    KaZ@NoVa Elder - Старейшина

    Joined:
    5 Jul 2008
    Messages:
    368
    Likes Received:
    438
    Reputations:
    -16

    Если все вызовы относятся к стандартным то они по идее обязаны за собой чистить память, однако все равно тебе не помешала бы трассировка.
     
  18. Sokolik

    Sokolik Banned

    Joined:
    5 Mar 2009
    Messages:
    4
    Likes Received:
    1
    Reputations:
    0
    procedure TForm1.ReadParams;
    Var IniFile: TIniFile;
    begin
    IniFile:=TIniFile.Create('abc.ini');
    xppanel1.Caption:=IniFile.ReadString('FORM1','Panel',xppanel1.Caption);
    IniFile.Free;
    end;

    procedure TForm1.WriteParams;
    Var IniFile: TIniFile;
    begin
    IniFile:=TIniFile.Create('abc.ini');
    IniFile.WriteString('FORM1','Panel',xppanel1.Caption);
    IniFile.Free;
    end;

    Как сделать, чтобы в abc.ini текст хранился в шифрованном, а не в открытом виде? Метод шифрования можно самый простой. Желательно показать примерчик. Заранее спасибо всем кто ответит.
     
  19. StealthMaster

    StealthMaster Member

    Joined:
    3 Dec 2008
    Messages:
    52
    Likes Received:
    11
    Reputations:
    0
    Вам изначально необходимо выбрать способ шифрования. В общем случае чтение и запись будут реализованы так:

    Code:
    procedure TForm1.WriteParams;
    Var 
      IniFile: TIniFile;
      OpenText, CloseText: string;
    begin
      ... выполнение неободимых действий  
      // в OpenText хранится текст для записи
      // Encrypt - функция шифрования, которой передаются следующие параметры: текст и ключ для шифрования
    
      CloseText := EnCrypt(OpenText, Key);
      IniFile:=TIniFile.Create('abc.ini');
      IniFile.WriteString('Section','PName', CloseText);
      IniFile.Free;
    end;
    
    
    procedure TForm1.ReadParams;
    Var 
      IniFile: TIniFile;
      OpenText, CloseText: string;
    begin
      // Decrypt - функция расшифрования, которой передаются следующие параметры: текст и ключ для шифрования
    
      IniFile:=TIniFile.Create('abc.ini');
      CloseText := IniFile.ReadString('Section','PName', '');
      IniFile.Free;
      OpenText := Decrypt(CloseText, key);
    end;
    
    Если нужен простейший пример шифрования, то вот класс описывающий шифрование Виженера:
    Code:
    unit VigenereCrypt;
    
    interface
    
    uses Classes;
    
    type
      TVigenereCrypt = class
        Alphabet: string; // алфавит
        Mask: TStrings; // маска шифрования
        TabulaRecta: TStrings;
    
        constructor Create;
        procedure CreateMask;
        procedure Encrypt; 
        procedure Decrypt;
      end;
    
    implementation
    
    constructor TVigenereCrypt.Create;
    var
      i, j: byte;
      tmp: string;
      tmpint: byte;
    begin
      Alphabet := 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя0123456789$!.,?;*(){}+=:/[]@\^"';
    
      // создадим строковые списки
      InputText := TStringList.Create;
      OutputText := TStringList.Create;
      Mask := TStringList.Create;
      TabulaRecta := TStringList.Create;
    
      for i := 0 to 63 do
        begin
          tmp := Alphabet;
          for j := 1 to 64 do
            begin
              tmpint := (j+i) mod 64;
              if (tmpint = 0) then
                tmp[j] := Alphabet[64]
              else
                tmp[j] := Alphabet[tmpint];
            end;
          TabulaRecta.Append(tmp);
        end;
    end;
    
    
    
    procedure TVigenereCrypt.CreateMask;
    var
      // длина ключа и текущий индекс символа в ключе
      KeyLength: integer;
      index: integer;
    
      // счетчики циклов
      i, j: integer;
    
      // временные переменные
      tmp: string;
    begin
      KeyLength := Length(key);
      index := 1;
      for i := 0 to InputText.Count -1 do
        begin
          SetLength(tmp, length(InputText[i]));
          for j := 1 to length(InputText[i]) do
            begin
              tmp[j] := key[index];
              inc(index);
              if (index = KeyLength +1) then
                index := 1;
            end;
          Mask.Append(tmp);
        end;
    end;
    
    
    procedure TVigenereCrypt.Encrypt;
    var
      i,j : integer;
      tmp : string;
      index, tmpint: integer;
    begin
      for i := 0 to InputText.Count - 1 do
        begin
          // установим длину временной строки
          SetLength(tmp,Length(InputText[i]));
    
          // посимвольно обрабатываем строку
          for j := 1 to Length(InputText[i]) do
            begin
              tmpint := POS(InputText[i][j], Alphabet);
              // если символ не из алфавита, то пропустим его
              if (tmpint = 0) then
                tmp[j] := InputText[i][j]
              // иначе обрабатываем
              else
                begin
                  index := POS(Mask[i][j], Alphabet)-1;
                  tmp[j] := TabulaRecta[index][tmpint];
                end; // else
            end; // for j
    
          // добавим строку к обработанному тексту
          OutputText.Append(tmp);
        end; // for i
    end;
    
    
    procedure TVigenereCrypt.Decrypt;
    var
      i,j : integer;
      tmp : string;
      index, tmpint: integer;
    begin
      for i := 0 to InputText.Count - 1 do
        begin
          // установим длину временной строки
          SetLength(tmp,Length(InputText[i]));
    
          // посимвольно обрабатываем строку
          for j := 1 to Length(InputText[i]) do
            begin
              index := POS(Mask[i][j], Alphabet)-1;
              // если символ не из алфавита, то пропустим его
              if (POS(InputText[i][j], Alphabet) = 0)
                then tmp[j] := InputText[i][j]
              // иначе обрабатываем его
              else
                begin
                  tmpint := POS(InputText[i][j], TabulaRecta[index]);
                  tmp[j] := Alphabet[tmpint];
                end; // else
            end; // for j
    
          // добавим строку к обработанному тексту
          OutputText.Append(tmp);
        end; // for i
    end;
    
    end.
    
    При использовании процедуры Encrypt этого класса будут зашифрованы все строчные символы кирилицы, цифры и некоторые символы. Всегда можешь изменить алфавит и немного доработать класс.

    Использовать тогда шифрование нужно так:
    Code:
    procedure TForm1.WriteParams;
    Var 
      IniFile: TIniFile;
      CloseText: string;
      Crypt: TVigenereCrypt;
    begin
      Crypt:= TVigenereCrypt.Create;
      Crypt.key := 'ялюблюантичат';
      Crypt.InputText.Clear;
      Crypt.InputText.Append(xppanel1.Caption);
      Crypt.CreateMask;
      Crypt.Encrypt;
      CloseText := Crypt.OutputText[0];
    
      IniFile:=TIniFile.Create('abc.ini');
      IniFile.WriteString('FORM1','Panel', CloseText);
      IniFile.Free;
    end;
    
    
    procedure TForm1.ReadParams;
    Var 
      IniFile: TIniFile;
      tmpstr: string;
      Crypt: TVigenereCrypt;
    begin
      Crypt:= TVigenereCrypt.Create;
      Crypt.key := 'ялюблюантичат';
    
      IniFile:=TIniFile.Create('abc.ini');
      tmpstr:= IniFile.ReadString('FORM1','Panel', 'lalala');
      IniFile.Free;
    
      Crept.InputText.clear;
      Crypt.InputText.Append(tmpstr);
      Crypt.CreateMask;  
      Crypt.Decrypt;
    
      xppanel1.Caption:= Crypt.OutputText[0];
    end;
    
    P.S. все кроме класса писал прямо здесь, мог где то ошибиться.
     
    #4759 StealthMaster, 23 Nov 2009
    Last edited: 23 Nov 2009
  20. Пуховой

    Joined:
    25 Nov 2007
    Messages:
    46
    Likes Received:
    37
    Reputations:
    0
    KaZ@NoVa, спасибо вам!

    Еще немного поковырялся с проблемой. Выяснилось, что до 30-ти потоков включительно, память программа не кушает (11-12 мб, 30 мин. тест). При запуске более 50-ти потоков - начинается веселье (80-100 мб на 8-10 мин. работы, до 500 мб на 30-й).
     
Thread Status:
Not open for further replies.