[ 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. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    помоги мне сделать пост запрос на логин и пароль, см. выше
     
  2. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 Pasha_777 Я писал авторегер. И всё хорошо пахало и держало кучу сайтов. И юзал обычные функции WinInet и незаморачивался на всяких компонентах.
     
  3. Pasha_777

    Pasha_777 New Member

    Joined:
    27 Apr 2009
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    решено)))
     
    #3303 Pasha_777, 28 Apr 2009
    Last edited: 5 May 2009
  4. Pasha_777

    Pasha_777 New Member

    Joined:
    27 Apr 2009
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    решено)))
     
    #3304 Pasha_777, 28 Apr 2009
    Last edited: 5 May 2009
  5. Stil Free

    Stil Free New Member

    Joined:
    20 Dec 2008
    Messages:
    28
    Likes Received:
    4
    Reputations:
    2
    Парни нужно добавить ключ в реестр , а потом при запуске программы проверять его как это сделать?
     
  6. KaZ@NoVa

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

    Joined:
    5 Jul 2008
    Messages:
    368
    Likes Received:
    438
    Reputations:
    -16
    Просто щелкни два раза по ключики и он сам должен добавиться.
     
  7. Stil Free

    Stil Free New Member

    Joined:
    20 Dec 2008
    Messages:
    28
    Likes Received:
    4
    Reputations:
    2
    ггг забавный ты тип, я занимаюсь программированием....и меня интересует как сделать это програмно...
     
  8. LEE_ROY

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

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    если ты занимаешся программированием и незнаеш как работать с реестром то прости тебе сдесь делать нечего. работа с реестром описано во всех книгах и статьями полон гугл. удачи.
     
  9. diznt

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

    Joined:
    31 Jan 2008
    Messages:
    432
    Likes Received:
    164
    Reputations:
    -19
    PHP:
    procedure TForm1.Button1Click(SenderTObject);
    var
     
    reg:TRegistry;
    begin
     reg
    :=TRegistry.create;
     
    reg.RootKey:=HKEY_CURRENT_USER;
     
    reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run\', true);
     if reg.KeyExists('
    my_key_name') then
      begin
       exit;
      end
     else
      begin
       reg.WriteString('
    my_key_name','"c:\1.exe"');
      end;
    end;
    а вообще в гугле введи, "Работа с реестром delphi"
    там будет этого добра навалом и быстро освоишься с реестром так как с ним легко работать в делфи

    //пробелы убрать в коде
     
  10. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Вот код на API. Слегка кривоват, но пойдет
    Code:
    function LastPos(Needle: Char; Haystack: String): integer; // ищет следующую позицию подстроки в строке
    begin
     for Result:=Length(Haystack) downto 1 do if Haystack[Result] = Needle then Break;
    end;
    
    function RegGetValue(RootKey: HKEY; Name: String; ValType: Cardinal; var PVal: Pointer;var ValSize: Cardinal): boolean; //Чтение данных из реестра
    var
     SubKey:String;
     n:integer;
     MyValType:DWORD;
     hTemp:HKEY;
     Buf:Pointer;
     BufSize:Cardinal;
    begin
     Result:=False; // первоночально установка, что ошибка
     n:=LastPos('\', Name);
     if n>0 then
      begin
       SubKey:=Copy(Name,1,n-1);
       if RegOpenKeyEx(RootKey,PChar(SubKey),0,KEY_READ,hTemp) = ERROR_SUCCESS then
        begin
         SubKey := Copy(Name, n + 1, Length(Name) - n);
         if RegQueryValueEx(hTemp, PChar(SubKey), nil, @MyValType, nil, @BufSize) = ERROR_SUCCESS then
          begin
            GetMem(Buf, BufSize);
            if RegQueryValueEx(hTemp, PChar(SubKey), nil, @MyValType, Buf, @BufSize) = ERROR_SUCCESS then
              begin
                if ValType = MyValType then begin PVal:=Buf; ValSize:=BufSize; Result:=True;  
              end     
            else
             begin
               FreeMem(Buf);
             end;
           end
         else
       begin
         FreeMem(Buf);
       end; 
     end; 
     RegCloseKey(hTemp);
     end;
    end;
    end;
    
    function RegGetString(RootKey: HKEY; Name: String; Var Value: String): boolean; // Чтение строки из реестра
    var
     Buf:Pointer; // Адрес буфера
     BufSize:Cardinal;// Размер буфера
    begin
     Result:=False;
     if RegGetValue(RootKey, Name, REG_SZ, Buf, BufSize) then // Получение
      begin
       Dec(BufSize);
       SetLength(Value, BufSize);
       if BufSize>0 then CopyMemory(@Value[1], Buf, BufSize);
       FreeMem(Buf);
       Result := True;
      end;
    end;
    
    
    Юзается так: RegGetString(HKEY_CURRENT_USER,'Software\Slesh\stroka',s);


    Code:
    function RegPutString(RootKey: HKEY; Key, Name, Value: string): Boolean;// запись строки в реестр
    var
    Handle:HKEY; // Для работы с реестром
    Res:LongInt; // Информации об выполненной операции
    begin
    Result:=False; // первоначально устанавливается неудачность записи
    Res:=RegCreateKeyEx(RootKey, PChar(Key), 0, nil, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, nil, Handle, nil); // Создает ключ реестра
    if Res<>ERROR_SUCCESS then Exit; // если не удалось создать ключ, то выход
    Res:=RegSetValueEx(Handle, PChar(Name), 0, REG_SZ, PChar(Value), Length(Value) + 1);// Установка значения
    Result:=Res=ERROR_SUCCESS;// возвратить информацию о завершении операции
    RegCloseKey(Handle);// закрытие ключа
    end;
    
    
    Юзается так: RegPutString(HKEY_CURRENT_USER,'Software\Slesh\','stroka',s);
     
  11. Stil Free

    Stil Free New Member

    Joined:
    20 Dec 2008
    Messages:
    28
    Likes Received:
    4
    Reputations:
    2
    Да всё я искал там нифига нет того что я ищу,
    HTML:
    if reg.KeyExists('my_key_name')
    мне нужно что то другое что проверяет есть ли ключ если он есть то делает определёные дейтвия если нет то делает другие действия...
     
    #3311 Stil Free, 1 May 2009
    Last edited: 1 May 2009
  12. diznt

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

    Joined:
    31 Jan 2008
    Messages:
    432
    Likes Received:
    164
    Reputations:
    -19
    Stil Free что значит нужно что-то другое нужно?
    ты имеешь другая функция проверки? или что?
    Если другая функция проверки то токо на WinApi это можно сделать то есть пишешь свою функцию
     
  13. diznt

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

    Joined:
    31 Jan 2008
    Messages:
    432
    Likes Received:
    164
    Reputations:
    -19
    Как вывести все доступные жесткие диски?
     
    1 person likes this.
  14. Stil Free

    Stil Free New Member

    Joined:
    20 Dec 2008
    Messages:
    28
    Likes Received:
    4
    Reputations:
    2
    Тот метод который ты дал не определяет ничего.... сам незнаю почему вроде как если ключ существует то определяет труе ,вот код.
    PHP:
     function KeyExists(const KeyString): Boolean;  begin 
     KeyExists
    ('HKEY_LOCAL_MACHINE\SOFTWARE\11111\'); 
     result:=open;  
    end;        

    procedure TfrmMain.FormCreate(Sender: TObject);  begin  
    UINNickList := TList.Create;  
    if open=true then  
    begin  
    button1.Enabled:=true; 
     CheckBox1.Enabled:=True;  
    end 
    else
     Button3.Visible:=true;  
    end;
     
    #3314 Stil Free, 1 May 2009
    Last edited: 1 May 2009
  15. Flame of Soul

    Flame of Soul Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    185
    Likes Received:
    146
    Reputations:
    45
    если только для списка жестких дисков то вот код.
    PHP:
    procedure TForm1.Button1Click(SenderTObject);
     const
       
    DRIVE_UNKNOWN 0;
       
    DRIVE_NO_ROOT_DIR 1;
       
    DRIVE_REMOVABLE 2;
       
    DRIVE_FIXED 3;
       
    DRIVE_REMOTE 4;
       
    DRIVE_CDROM 5;
       
    DRIVE_RAMDISK 6;
     var
       
    rLongWord;
       
    Drives: array[0..128of char;
       
    pDrivePChar;
     
    begin
       r 
    := GetLogicalDriveStrings(SizeOf(Drives), Drives);
       if 
    0 then Exit;
       if 
    SizeOf(Drivesthen
         raise Exception
    .Create(SysErrorMessage(ERROR_OUTOFMEMORY));
       
    pDrive := Drives;
       while 
    pDrive^ <> #0 do
       
    begin
         
    if GetDriveType(pDrive) = DRIVE_FIXED then
           Form1
    .ComboBox1.Items.Add(pDrive);
         
    Inc(pDrive4);
       
    end;
     
    end;

    а если всех носителей то вот:

    PHP:
    procedure TForm1.Button1Click(SenderTObject);
    var
      
    ldDWORD;
      
    iinteger;
    begin
      ld 
    := GetLogicalDrives;
      for 
    := 0 to 25 do
      
    begin
        
    if (ld and (1 shl i)) <> 0 then
          Memo1
    .Lines.Add(Char(Ord('A') + i) + ':\');
      end;
    end;
     
    2 people like this.
  16. Flame of Soul

    Flame of Soul Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    185
    Likes Received:
    146
    Reputations:
    45
    Создать подраздел в реестре:

    RegCreateKey (Key:HKey; SubKey: PChar; var Result: HKey): Longint;
    _____ Key - указывает на "корневой" раздел реестра, в Delphi1 доступен только один - HKEY_CLASSES_ROOT, а в Delphi3 - все.
    _____ SubKey - имя раздела - строится по принципу пути к файлу в DOS (пример subkey1\subkey2\ ...). Если такой раздел уже существует, то он открывается.
    _____ В любом случае при успешном вызове Result содержит Handle на раздел.
    _____ Об успешности вызова судят по возвращаемому значению, если ERROR_SUCCESS, то успешно, если иное - ошибка.

    ====================================================

    Открыть подраздел:

    RegOpenKey(Key: HKey; SubKey: PChar; var Result: HKey): Longint;

    _____ Раздел Key
    _____ Подраздел SubKey
    _____ Возвращает Handle на подраздел в переменной Result. Если раздела с таким именем нет, то он не создается.
    _____ Возврат - код ошибки или ERROR_SUCCESS, если успешно.

    ====================================================

    Закрывает раздел:

    RegCloseKey(Key: HKey): Longint;

    _____ Закрывает раздел, на который ссылается Key.
    _____ Возврат - код ошибки или ERROR_SUCCESS, если успешно.

    ====================================================

    Удалить подраздел:

    RegDeleteKey(Key: HKey; SubKey: PChar): Longint;

    _____ Удалить подраздел Key\SubKey.
    _____ Возврат - код ошибки или ERROR_SUCCESS, если нет ошибок.

    ====================================================

    Получить имена всех подразделов раздела Key:

    RegEnumKey(Key:HKey; index: Longint; Buffer: PChar; cb: Longint): Longint;

    _____ Key - Handle на открытый или созданный раздел
    _____ Buffer - указатель на буфер
    _____ cb - размер буфера
    _____ index - индекс, должен быть равен 0 при первом вызове RegEnumKey. Типичное использование - в цикле While, где index увеличивается до тех пор, пока очередной вызов RegEnumKey не завершится ошибкой

    ====================================================

    Возвращает текстовую строку, связанную с ключом Key\SubKey:

    RegQueryValue(Key: HKey; SubKey: PChar; Value: PChar; var cb: Longint): Longint;

    _____ Ключ\подключ Key\SubKey.
    _____ Value - буфер для строки
    _____ cb - размер, на входе - размер буфера, на выходе - длина возвращаемой строки.
    _____ Возврат - код ошибки.

    ====================================================

    Задать новое значение ключу Key\SubKey:

    RegSetValue(Key: HKey; SubKey: PChar; ValType: Longint; Value: PChar; cb: Longint): Longint;

    _____ Ключ\подключ Key\SubKey.
    _____ ValType - тип задаваемой переменной,
    _____ Value - буфер для переменной
    _____ cb - размер буфера. В Windows 3.1 допустимо только Value=REG_SZ.
    _____ Возврат - код ошибки или ERROR_SUCCESS, если нет ошибок.

    ====================================================

    Удаляет значение lpValueName находящееся в ключе hKey:

    RegDeleteValue(HKEY hKey, LPCTSTR lpValueName);

    _____ hKey - ключ. hKey должен был быть открыт с доступом KEY_SET_VALUE процедурой RegOpenKey.
    _____ lpValueName - значение, находящееся в ключе hKey.
    _____ Возвращает ERROR_SUCCESS если успешно.

    ====================================================

    Выдает список значений у ключа hKey:

    LONG RegEnumValue( HKEY hKey, DWORD dwIndex, LPTSTR lpValueName, LPDWORD lpcbValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);

    _____ hKey - ключ.
    _____ dwIndex - этот параметр должен быть 0 при первом вызове, а далее по анологии с RegEnumKey (т.е. можно использовать в цикле),
    _____ lpValueName - буфер для названия значения
    _____ lpcbValueName - размер lpValueName
    _____ lpReserved должно быть всегда 0
    _____ lpType - буфер для названия типа (int)
    _____ lpData - буфер для данных
    _____ lpcbData-размер для lpData

    ====================================================


    Примечание:
    При каждой новом вызове функции после предыдущего нужно заново переназначить lpcbValueName.


    lpcbValueName = sizeof(lpValueName)
     
    3 people like this.
  17. Stil Free

    Stil Free New Member

    Joined:
    20 Dec 2008
    Messages:
    28
    Likes Received:
    4
    Reputations:
    2
    Мне этого хлама в нете хватает, мне нужен пример проверки я выше оставил ео подправить...
     
  18. Flame of Soul

    Flame of Soul Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    185
    Likes Received:
    146
    Reputations:
    45
    видимо потому что для Вас это хлам, Вы позволяете себе такое множество ошибок:

    HKEY_LOCAL_MACHINESOFTWARE11111 - не является типом HKEY и не может быть использовано.
    UINNickList := TList.Create; - неописанная переменная UINNickList
    if open=true then ... - каком основании Вы сравниваете возвращаемое значение функции??? а не саму функцию с указанными параметрами?
    result:=open; - на каком основании Вы возвращаете какое-то ореn, когда у Вас в функции указан Boolean для возвращаемого значения?

    PS: не относитесь к хорошей информации как к хламу, я искринне желаю Вам успехов в дальнейшей работе с реестром.

    Рабочий код:


    PHP:
    function LastPos(NeedleCharHaystackstring): integer;
    begin
      
    for Result := Length(Haystackdownto 1 do
        if 
    Haystack[Result] = Needle then
          
    Break;
    end;

    function 
    RegKeyExists(RKHKEYNamestring): boolean;
    var
      
    SKstring;
      
    ninteger;
      
    hTempHKEY;
    begin
      Result 
    := False;
      
    := LastPos('\', Name); //'
      
    if 0 then
      begin
        SK 
    := Copy(Name11);
        if 
    RegOpenKeyEx(RKPChar(SK), 0KEY_READhTemp) = ERROR_SUCCESS
          then
        begin
          Result 
    := True;
          
    RegCloseKey(hTemp);
        
    end;
      
    end;
    end;

    procedure TForm1.Button1Click(SenderTObject);
    begin
      
    // 'SOFTWARE\Alawar\6462\' - обратите внимание на символ \
      //  его нет в начале но он обязателен на конце
      
    if RegKeyExists(HKEY_LOCAL_MACHINE,'SOFTWARE\Alawar\6462\')=true //'
      
    then
      begin
      
    //...если существует
      
    ShowMessage('true'); //'
      
    end
      
    else
      
    begin
      
    //...если не существует
      
    ShowMessage('false'); //'
      
    end;
    end;
     
    1 person likes this.
  19. Stil Free

    Stil Free New Member

    Joined:
    20 Dec 2008
    Messages:
    28
    Likes Received:
    4
    Reputations:
    2

    это я когда код добавлял потёр случайно..
    Это левое используется в самой проге и описано в корне....
    open описана как boolean, после завершения операции если ключ существует то присваивается true ,а результат операции я присваиваю к open .... Ну помоему здесь весь косяк....

    Спасибо я разобрался)
     
    #3319 Stil Free, 2 May 2009
    Last edited: 2 May 2009
  20. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Как можно при открытии Form2 забрать значение из Form1
    Чтобы: Form2.Label2.Caption = Form1.Edit1.Text
     
Thread Status:
Not open for further replies.