Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 5

Модерирует : ShIvADeSt

ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 4

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).

Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:09 28-06-2009 | Исправлено: psa1974, 12:00 02-02-2010
    Tantos



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А чем плоха команда runas ? Если поискать, то можно найти программы, решающие проблему с вводом пароля в консоли.

    ----------
    Чем больше узнаю людей, тем больше люблю компьютеры.

    Всего записей: 1038 | Зарегистр. 31-05-2005 | Отправлено: 03:17 04-09-2009 | Исправлено: Tantos, 03:19 04-09-2009
    Hiken



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    spasius
    Frodo_Torbins
    Например с помощью оконных сообщений, да, или реализовать что-то на базе других способов (гуглить) "windows interprocess communication"

    Всего записей: 1343 | Зарегистр. 14-01-2006 | Отправлено: 03:41 04-09-2009 | Исправлено: Hiken, 03:42 04-09-2009
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andrewtishkin
    Кажется не туда смотрите: http://msdn.microsoft.com/en-us/library/ms682429%28VS.85%29.aspx

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 10:25 04-09-2009
    Denion



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ нужна помощь...  
     
    Как можно сделать вывод вот такой информации о разделах с присвоенными буквами???

    Цитата:
        \\?\Volume{fe9bf0a0-6259-11de-9c9a-806d6172696f}\
            C:\
     
        \\?\Volume{fe9bf09d-6259-11de-9c9a-806d6172696f}\
            D:\
     
        \\?\Volume{fe9bf09c-6259-11de-9c9a-806d6172696f}\
            A:\
     
        \\?\Volume{bc83e83c-9927-11de-9c0d-00161796aaeb}\
            E:\


    Всего записей: 918 | Зарегистр. 07-12-2002 | Отправлено: 15:20 04-09-2009
    andrewtishkin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    А чем плоха команда runas

    Всё бы хорошо и просто

    Код:
    ShellExecute(h, 'runas', 'my.exe', nil, nil, SW_SHOWNORMAL);

    но...

    получим вот такой результат. А мне этого мало Хочу сразу с фокусировкой на полях ввода имени пользователя и пароля:

    Реализовать такое реально. Установщик Filezilla это как-то делает. Вопрос в том, КАК?!
     

    Цитата:
    Кажется не туда смотрите

    Да вроде и там уже был
    Я правильно понял, что для работы с CreateProcessAsUser нужно знать заранее имя юзера и его пароль? Тогда мне это опять же не подходит. Имя/пароль должен вводить сам юзер... И не в моём самодельном окне с edit-ами, а в стандартном системном (для солидности и безопасности; самоделкины решения вызывают подозрения у людей "чо это она у меня пароль просит так странно... небось трояна мне подсунули, сволочи!")
     
    PPS:
    "Установка программы от другого имени" можно вызвать тоже казалось бы просто: переименовать свою программу в Setup.exe или Install.exe
    Но у меня шило в одном месте, и жажда большего в другом У меня "My_Setup.exe", для которого такой фокус уже не срабатывает. Желания идти обходными путями нет никакого, хотя их можно придумать кучу: проверять имя exe, копировать exe во временную папку с именем Setup и т.д. и т.п. Хочется чего-то Microsoft-ского, стандартного, правильного, на все случаи, чтобы вне зависимости от прочих факторов я мог вызвать нужный диалог
    Как сильно сейчас ненавижу юзеров Windows XP ))) Были бы всё на висте и 7-ке, не было бы проблем, там проблема решена за 30 секунд созданием верного манифеста (

    Всего записей: 781 | Зарегистр. 28-08-2008 | Отправлено: 16:29 04-09-2009 | Исправлено: andrewtishkin, 16:32 04-09-2009
    Hiken



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andrewtishkin
    FileZilla вся в открытых кодах, вот и копните ) Установщик? Ну так что там, NSIS?

    Всего записей: 1343 | Зарегистр. 14-01-2006 | Отправлено: 17:14 04-09-2009
    data man



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andrewtishkin
    Ну, есть ещё и ShellExecuteEx, исходники InnoSetup, библиотека NTSet (старенькая уже), JediApiLib, etc.

    ----------
    Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
    Кекс. Антибиотики. Ламбада.

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 17:31 04-09-2009
    RuzzzStudios



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Напишу еще и сюда:
    В Turbo Delphi не работает переименование в рефакторинге (Ctrl+Shift+E). Процесс вроде как проходит без ошибок, но вот остается старое значение, и в окошке результата переименования также старое значение. Такое чувство что значение берется не новое, а старое и для него производится операция переименования. Только что скачал и установил новую Delphi 2010 с оф. сайта, и блин, та же проблема. Похоже что IDE-пакет для рефакторинга не правильно работает в Windows 7. Винда также самая последняя, ту что бесплатно пару дне назад для девелоперов раздавали на 90 дней. Знает ли кто как решить эту проблему?

    Всего записей: 345 | Зарегистр. 25-09-2006 | Отправлено: 19:06 04-09-2009
    andrewtishkin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    FileZilla вся в открытых кодах, вот и копните )

    Лопату жалко )))
    Хм. А там разве исходники инсталлятора тоже доступны? По-моему только самого продукта

    Цитата:
    Ну так что там, NSIS?

    Самописный. Сторонние решения не устраивают.
    Ааа... файлзилла и правда NSIS использует. Хм...
     

    Цитата:
    ShellExecuteEx

    Он, кстати, вызывается в момент появления этого окна... Знать бы с какими параметрами
     
    Добавлено:
    Что ж вы все меня к NSIS посылаете )))
    Правильно посылаете, всем спасибо Откопал-таки исходники UAC-плагина, убедился, что в XP они фокусировку делают с помощью (цитирую) "ужасного хака"
     
    Что и требовалось доказать Увы и ах, но я уж лучше без хака, альтернативными путями ситуацию разрулю Теперь хоть на душе спокойно

    Всего записей: 781 | Зарегистр. 28-08-2008 | Отправлено: 19:09 04-09-2009 | Исправлено: andrewtishkin, 20:34 04-09-2009
    ShIvADeSt



    Moderator
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andrewtishkin

    Цитата:
    Хочу сразу с фокусировкой на полях ввода имени пользователя и пароля

    FindWindow  
    FindWindowEx
    Делаем примерно след. Получаем хэндл окна -после этого перебираем внутри окна все контролы с типом BUTTON (насколько я помню радио баттон - это обычный баттон со свойством) и смотрим, потом просто посылаем CheckRadioButton
    The CheckRadioButton function adds a check mark to (checks) a specified radio button in a group and removes a check mark from (clears) all other radio buttons in the group.  
    Далее делаем перебор в поиск Edit и делаем SetFocus для хэндла.

    ----------
    И создал Бог женщину... Существо получилось злобное, но забавное...

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 08:18 06-09-2009
    data man



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andrewtishkin
    Хак совсем не обязателен. Можно сделать свой диалог. Получить список пользователей с их правами - не архисложная задача, IMO.

    ----------
    Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
    Кекс. Антибиотики. Ламбада.

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 19:56 06-09-2009
    andrewtishkin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Можно сделать свой диалог.

     

    Цитата:
    И не в моём самодельном окне с edit-ами, а в стандартном системном (для солидности и безопасности; самоделкины решения вызывают подозрения у людей "чо это она у меня пароль просит так странно... небось трояна мне подсунули, сволочи!")


    Всего записей: 781 | Зарегистр. 28-08-2008 | Отправлено: 23:43 06-09-2009
    SANIOK_AV



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток!!!
    Ситуация такова:
    У меня в OpenDialog1.FileName полный путь к нужному мне файлу.
    Подскажите пожалуйста, как получить размер и дату этого файла?
    Заранее благодарен!

    Всего записей: 485 | Зарегистр. 31-03-2009 | Отправлено: 16:02 07-09-2009 | Исправлено: SANIOK_AV, 16:03 07-09-2009
    spasius



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SANIOK_AV
     
    Получить дату:

    Код:
     
    function GetFileDateTime(FileName: string): TDateTime;
    var
      intFileAge: LongInt;
    begin
      intFileAge := FileAge(FileName);
      if intFileAge = -1 then
        Result := 0
      else
        Result := FileDateToDateTime(intFileAge)
    end;
     

     
    Получить размер:

    Код:
     
    // Если файл не существует, то вместо размера файла функция верн¸т -1
    function GetFileSize(FileName: String): Integer;
    var
      FS: TFileStream;
    begin
      try
        FS := TFileStream.Create(Filename, fmOpenRead);
      except
        Result := -1;
      end;
      if Result <> -1 then Result := FS.Size;
      FS.Free;
    end;
     

     

    Всего записей: 695 | Зарегистр. 16-03-2009 | Отправлено: 16:12 07-09-2009
    SANIOK_AV



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    spasius
    Спасибо...
    буду пробовать...
     
    Добавлено:
    spasius

    Цитата:
    Result := FileDateToDateTime(intFileAge)

    а как сделать чтоб ещё и время отображалось?

    Всего записей: 485 | Зарегистр. 31-03-2009 | Отправлено: 16:51 07-09-2009 | Исправлено: SANIOK_AV, 17:30 07-09-2009
    spasius



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SANIOK_AV
    на выходе получаешь TDateTime это и дата и время
    конвертация в строку:
    DateToStr - только дату
    TimeToStr - только время
    DateTimeToStr - дата+время в формате

    Всего записей: 695 | Зарегистр. 16-03-2009 | Отправлено: 18:12 07-09-2009
    SANIOK_AV



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    spasius
    Спасибо...с датой и временем получилось...
    сделал правда без функции:

    Код:
    DateTimeToStr(FileDateToDateTime(FileAge(OpenDialog1.FileName)))

    можно ли как-то и с размером обойтись без функции?

    Всего записей: 485 | Зарегистр. 31-03-2009 | Отправлено: 18:51 07-09-2009
    spasius



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ну как вариант можно использовать:

    Код:
     
    function GetSizeOfFile(AFile : String) : Integer;
      var FStream : TFileStream;
    begin
      try
        FStream := TFileStream.Create(AFile, fmOpenRead + fmShareDenyWrite);
        try
          Result := FStream.Size;
        finally
          FreeAndNil(FStream);
        end;
      except
        Result := 0;
      end;
    end;
     

    приведенный текст есть в одной из библиотек Инди ... можно использовать эту функцию просто подключив модуль ... если не изменяет память это IdGlobal.

    Всего записей: 695 | Зарегистр. 16-03-2009 | Отправлено: 19:13 07-09-2009
    data man



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SANIOK_AV

    Код:
     
    uses
      SysUtils;
     
      function FileSize(const fileName: string): int64;
      var
        fHandle: DWORD;
      begin
        fHandle := CreateFile(PChar(fileName), 0, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
        if fHandle = INVALID_HANDLE_VALUE then
          Result := -1
        else try
          Int64Rec(Result).Lo := GetFileSize(fHandle, @Int64Rec(Result).Hi);
        finally CloseHandle(fHandle); end;
      end; { DSiFileSize }
     


    ----------
    Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
    Кекс. Антибиотики. Ламбада.

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 19:23 07-09-2009
    SANIOK_AV



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    spasius
    data man
    Спасибо всем огромное...
    Сделал...

    Всего записей: 485 | Зарегистр. 31-03-2009 | Отправлено: 12:31 08-09-2009
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 5
    ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru