Задать вопрос
  • Как убрать приложение из автозапуска в скрытом режиме?

    HemulGM
    @HemulGM Куратор тега Windows
    Delphi Developer, сис. админ
    Не понимаю задачу. Что ты хочешь в итоге получить и что у тебя имеется?

    Рассуждаю:
    У тебя есть инсталлятор какой-то софтины (произвольной). Ты хочешь софтину установить, но чтобы при этом ключ, помещённый в автозагрузку был перехвачен и исключен?
    Если так, что тебе нужен мониторинг изменений, которые внесла программа установки (она может поместить ссылку на загрузку в реестр юзера, в реестр всей оси, в папку автозагрузки в меню пуск, в планировщик). Мониторим изменения в этих местах - удаляем то, что она там понасоздавала. Батником ты тут не отделаешься.

    Далее. Не все программы ставятся в автозагрузку установщиком, многие ставятся при запуске самой софтины.

    был у меня вариант с реестром, но он еще и подтверждение постоянно просит

    reg позволяет установить флаги, чтоб не спрашивал, если что
    Ответ написан
  • Как и с чего начать обучение?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Тут начальный старт можешь найти:
    https://ru.wikibooks.org/wiki/Delphi
    Тут тысячи примеров кода (рабочего)
    delphiworld.narod.ru/_all_articles_.html
    Здесь не мало ресурсов
    progbook.ru/delphi

    Тут качай среду
    https://www.embarcadero.com/ru/products/delphi/starter
    Ответ написан
  • Как сгенерировать JSON для keyboard VK API?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    {
      "one_time": true,
      "inline": false,
      "buttons": [    <------- а где ещё массив?
        {
          "action": {
            "type": "text",
            "payload": "{\"button\":\"btn_1\"}",
            "label": "Привет"
          },
          "color": "secondary"
        }
      ]
    }


    Каждый элемент кнопки должен находится внутри массива - слоя, а каждый слой внутри массива buttons
    Т.е. buttons - это массив слоёв кнопок (уровней, линий), каждый из которых содержит массив кнопок.

    Итого:
    public function generateButtons(array $buttons, bool $inline = false) : string {
            $array = [
                'one_time' => !$inline,
                'inline' => $inline,
                'buttons' => [],
            ];
    
            foreach ($buttons as $item) {
                $array['buttons'][][] = [  <---- ещё один массив
                    'action' => [
                        'type' => $item['type'],
                        'payload' => json_encode($item['payload'], JSON_UNESCAPED_UNICODE),
                        'label' => $item['label'],
                    ],
                    'color' => $item['color'],
                ];
            }
    
            return json_encode($array, JSON_UNESCAPED_UNICODE);
        }

    Результат:
    {
        "one_time": true,
        "inline": false,
        "buttons": [
            [
                {
                    "action": {
                        "type": "text",
                        "payload": "{\"button\":\"btn_1\"}",
                        "label": "1233123"
                    },
                    "color": "secondary"
                }
            ]
        ]
    }
    Ответ написан
    1 комментарий
  • Возможно ли бэкапить виртуалки изнутри?

    HemulGM
    @HemulGM Куратор тега Windows
    Delphi Developer, сис. админ
    Да
    Ответ написан
    Комментировать
  • Как настроить форматтер так, чтобы он игнорировал отступы внутри строки кода?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Можешь попробовать настроить форматер в CnPack. Там он позволяет настраивать себя достаточно тонко. Сочетание Ctrl+W.
    Ответ написан
    Комментировать
  • ПО для записи экрана?

    HemulGM
    @HemulGM Куратор тега Windows
    Delphi Developer, сис. админ
    RAdmin (и подобные). Мониторь у себя и записывай у себя.
    Ответ написан
    Комментировать
  • Как соединить 2 кода в один на паскале?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    Учи паскаль.
    Ответ написан
    Комментировать
  • Как выполнить процедуру удаления элемента из массива по индексу?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    Ты инициализируешь переменную сразу в цикле. Такое не умеет TP.
    Ну и судя по заданию, не забудь, что у тебя смещаются слова и индексы слов совпадать не будут.
    Ответ написан
  • Как разделить строку на масив по пробелу?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    По циклу прогоняешь строку, если пробел, то от начала до пробела помещаешь в массив.
    Рекомендую сначала посчитать пробелы одним циклом. Установить размер массива = кол-во пробелов + 1.
    Далее уже заполнять массив.
    Тебе нужна переменная, которая запомнит последнюю позицию
    LastPos
    И переменная последнего элемента
    LastIndex
    Ну и вот:
    SetLength(a, SpaceCount + 1);
    LastPos := 1;
    LastIndex := 0;
    for i := 1 to Length(Str) do
      if Str[i] = ' ' then
      begin
        a[LastIndex] := Copy(Str, LastPos, (i - LastPos)); //-- тут возможно +-1
        Inc(LastIndex);
        LastPos := i;
      end;


    Это если для чистого Pascal, а если для Delphi, то лучше TStringList использовать и его метод DelemitedText
    Ответ написан
  • Windows XP не устанавливается?

    HemulGM
    @HemulGM Куратор тега Windows
    Delphi Developer, сис. админ
    Здесь на лицо несовместимость ОС в виде её не актуальности и современного железа.
    Ответ написан
    Комментировать
  • Как создать функцию random_id в vk_api?

    HemulGM
    @HemulGM Куратор тега Python
    Delphi Developer, сис. админ
    Для тех, кто наткнётся на вопрос в будущем (как, например, я).

    random_id - это параметр, который также нужно передавать при отправке нового сообщения.
    random_id - уникальный (в привязке к API_ID и ID отправителя) идентификатор, предназначенный для предотвращения повторной отправки одинакового сообщения. Сохраняется вместе с сообщением и доступен в истории сообщений.

    Заданный random_id используется для проверки уникальности за всю историю сообщений, поэтому используйте большой диапазон (до int64).


    Лично я рекомендую использовать в качестве random_id - дату и время в качестве уникального ключа. А именно - переводить дату и время в миллисекунды.
    Ответ написан
  • Как отследить зажатые клавиши?

    HemulGM
    @HemulGM Куратор тега Windows
    Delphi Developer, сис. админ
    Любой (почти) ЯП тебе позволит мониторить состояние кнопок. И алгоритм там не сложный. Возьми, C# или Delphi и вперёд, писать мелкий монитор. И уводить в сон сможешь принудительно.
    Ответ написан
  • Возможно у кого то завалялась кисть?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    Есть набор царапин и тонна прочего дерьма в виде пулевых отверстий, шрапнели, кровоподтеков и т.д. Насекомые и прочее, но укусов вроде не нашёл.
    5e1d181c394f8058808098.png
    Ответ написан
  • Что не так в этом классе?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    Согласен с другими ответчиками, это не совсем ООП. Лишь один принцип ООП используется - класс и то как просто namespace.
    Вот примерно как ООП и VK API в Delphi:

    Класс - группировка для методов Auth

    TAuth = class(TVKEntity)
        /// <summary>
        /// Проверяет правильность введённого номера (возможность его использования для регистрации или авторизации).
        /// </summary>
        /// <param name="Phone">номер телефона регистрируемого пользователя</param>
        /// <param name="ClientId">идентификатор Вашего приложения</param>
        /// <param name="ClientSecret">секретный ключ приложения, доступный в разделе редактирования приложения</param>
        /// <param name="AuthByPhone">True — проверить правильность номера для авторизации,
        ///                           а не для регистрации нового аккаунта. По умолчанию: False.</param>
        function CheckPhone(Phone: string; ClientId, ClientSecret: string; AuthByPhone: Boolean = False): Boolean; overload;
        /// <summary>
        /// Проверяет правильность введённого номера (возможность его использования для регистрации или авторизации).
        /// С указанием текущих данных приложения ClientId и ClientSecret
        /// </summary>
        /// <param name="Phone">номер телефона регистрируемого пользователя</param>
        /// <param name="AuthByPhone">True — проверить правильность номера для авторизации,
        ///                           а не для регистрации нового аккаунта. По умолчанию: False.</param>
        function CheckPhone(Phone: string; AuthByPhone: Boolean = False): Boolean; overload;
        /// <summary>
        /// https://vk.com/dev/auth.restore
        /// </summary>
        function Restore(Phone, LastName: string): TResponse;
      end;


    Класс - асинхронный обработчик запросов

    TVKHandler = class
        const
          RequestLimit = 3; //Round(1000 / 3) + 10; //задержка между запросами 3 запроса в секунду + 10 мс страховка
      private
        FStartRequest: Cardinal;
        FRequests: Integer;
        FRESTClient: TRESTClient;
        FOnConfirm: TOnConfirm;
        FOnError: TOnVKError;
        FOnLog: TOnLog;
        FUseServiceKeyOnly: Boolean;
        FOwner: TObject;
        FOnCaptcha: TOnCaptcha;
        function DoConfirm(Answer: string): Boolean;
        procedure ProcError(Code: Integer; Text: string = ''); overload;
        procedure ProcError(E: Exception); overload;
        procedure ProcError(Msg: string); overload;
        procedure SetOnConfirm(const Value: TOnConfirm);
        procedure SetOnError(const Value: TOnVKError);
        procedure FLog(const Value: string);
        procedure SetOnLog(const Value: TOnLog);
        procedure SetUseServiceKeyOnly(const Value: Boolean);
        procedure SetOwner(const Value: TObject);
        procedure SetOnCaptcha(const Value: TOnCaptcha);
      public
        constructor Create(AOwner: TObject);
        destructor Destroy; override;
        function AskCaptcha(Sender: TObject; const CaptchaImg: string; var Answer: string): Boolean;
        function Execute(Request: string; Params: TParams): TResponse; overload;
        function Execute(Request: string; Param: TParam): TResponse; overload;
        function Execute(Request: string): TResponse; overload;
        function Execute(Request: TRESTRequest; FreeRequset: Boolean = False): TResponse; overload;
        property RESTClient: TRESTClient read FRESTClient;
        property OnConfirm: TOnConfirm read FOnConfirm write SetOnConfirm;
        property OnCaptcha: TOnCaptcha read FOnCaptcha write SetOnCaptcha;
        property OnError: TOnVKError read FOnError write SetOnError;
        property OnLog: TOnLog read FOnLog write SetOnLog;
        property UseServiceKeyOnly: Boolean read FUseServiceKeyOnly write SetUseServiceKeyOnly;
        property Owner: TObject read FOwner write SetOwner;
      end;


    Класс - LongPoll сервера, работающий в отдельном потоке

    TLongPollServer = class
       ...
        function Start: Boolean;
        procedure Stop;
        constructor Create; overload;
        constructor Create(AClient: TRESTClient; AMethod: string; AParams: TParams); overload;
        destructor Destroy; override;
        property OnError: TOnVKError read FOnError write SetOnError;
        property Interval: Integer read FInterval write SetInterval;
        property GroupID: string read FGroupID write SetGroupID;
        property OnUpdate: TOnLongPollServerUpdate read FOnUpdate write SetOnUpdate;
        property Client: TCustomRESTClient read GetClient write SetClient;
        property Method: string read FMethod write SetMethod;
        property Params: TParams read FParams write SetParams;
      end;


    Основной класс - невизуальный компонент для разработчиков

    TCustomVK = class(TComponent)
      private
        FOAuth2Authenticator: TOAuth2Authenticator;
        FOnLogin: TOnLogin;
        FPermissionsList: TPermissions;
        FGroupLongPollServers: TGroupLongPollServers;
        FAuthForm: TFormOAuth2;
        FAppID: string;
        FAppKey: string;
        FEndPoint: string;
        FHandler: TVKHandler;
        FBaseURL: string;
        FAPIVersion: string;
        FAccount: TAccount;
        FAuth: TAuth;
        FServiceKey: string;
        FUseServiceKeyOnly: Boolean;
        FIsLogin: Boolean;
        FOnError: TOnVKError;
        FOnLog: TOnLog;
        FOnErrorLogin: TOnVKError;
        FChangePasswordHash: string;
        FUsers: TUsers;
        FOnCaptcha: TOnCaptcha;
        FOnConfirm: TOnConfirm;
        FOnAuth: TOnAuth;
        function GetPermissions: string;
        procedure FAskCaptcha(Sender: TObject; const CaptchaImg: string; var Answer: string);
        procedure FAfterRedirect(const AURL: string; var DoCloseWebView: boolean);
        procedure FAuthError(const AURL: string; AStatusCode: Integer; var Cancel: WordBool);
        procedure FLog(Sender: TObject; const Value: string);
        procedure FVKError(Sender: TObject; Code: Integer; Text: string);
        procedure SetOnLogin(const Value: TOnLogin);
        procedure SetPermissionsList(const Value: TPermissions);
        procedure DoLogin;
        procedure SetAppID(const Value: string);
        procedure SetAppKey(const Value: string);
        procedure SetEndPoint(const Value: string);
        procedure SetPermissions(const Value: string);
        procedure SetHandler(const Value: TVKHandler);
        procedure SetBaseURL(const Value: string);
        procedure SetAPIVersion(const Value: string);
        procedure SetServiceKey(const Value: string);
        procedure SetUseServiceKeyOnly(const Value: Boolean);
        procedure SetOnError(const Value: TOnVKError);
        procedure SetOnLog(const Value: TOnLog);
        procedure SetOnErrorLogin(const Value: TOnVKError);
        procedure SetOnCaptcha(const Value: TOnCaptcha);
        procedure SetOnConfirm(const Value: TOnConfirm);
        procedure SetOnAuth(const Value: TOnAuth);
        procedure DoAuth(const AURL: string);
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
        procedure DoLog(Sender: TObject; Text: string);
        procedure Login(AParentWindow: TWinControl = nil);
        procedure CallMethod(MethodName: string; Params: TParams; Callback: TCallMethodCallback = nil);
        procedure GroupLongPollServerStart(GroupID: string);
        procedure GroupLongPollServerStop(GroupID: string);
        /// <summary>
        /// Универсальный метод, который позволяет запускать последовательность других методов, сохраняя и фильтруя промежуточные результаты.
        /// https://vk.com/dev/execute
        /// </summary>
        /// <param name="Code">код алгоритма в VKScript - формате, похожем на JavaSсript или ActionScript (предполагается совместимость с ECMAScript). Алгоритм должен завершаться командой return %выражение%. Операторы должны быть разделены точкой с запятой. </param>
        function Execute(Code: string): TResponse;
        property PermissionsList: TPermissions read FPermissionsList write SetPermissionsList;
        //Группы методов
        property Account: TAccount read FAccount;
        property Auth: TAuth read FAuth;
        property Users: TUsers read FUsers;
        //
        property AppID: string read FAppID write SetAppID;
        property AppKey: string read FAppKey write SetAppKey;
        property EndPoint: string read FEndPoint write SetEndPoint;
        property Permissions: string read GetPermissions write SetPermissions;
        property Handler: TVKHandler read FHandler write SetHandler;
        property APIVersion: string read FAPIVersion write SetAPIVersion;
        property BaseURL: string read FBaseURL write SetBaseURL;
        property ServiceKey: string read FServiceKey write SetServiceKey;
        property UseServiceKeyOnly: Boolean read FUseServiceKeyOnly write SetUseServiceKeyOnly;
        property IsLogin: Boolean read FIsLogin;
        property ChangePasswordHash: string read FChangePasswordHash;
        //
        property OnLogin: TOnLogin read FOnLogin write SetOnLogin;
        property OnError: TOnVKError read FOnError write SetOnError;
        property OnErrorLogin: TOnVKError read FOnErrorLogin write SetOnErrorLogin;
        property OnLog: TOnLog read FOnLog write SetOnLog;
        property OnCaptcha: TOnCaptcha read FOnCaptcha write SetOnCaptcha;
        property OnConfirm: TOnConfirm read FOnConfirm write SetOnConfirm;
        property OnAuth: TOnAuth read FOnAuth write SetOnAuth;
      end;


    И конечно, все представления и структуры в виде классов

    5e1c425e0b2f5671276122.png

    Ну и вот работа такого класса в designtime

    5e1c404cea6dd998958891.png

    И код равный твоему

    5e1c446dea3d6273622206.png

    Конечно не образец идеального кода... Но что есть
    Ответ написан
    Комментировать
  • Как устранить ошибку windows?

    HemulGM
    @HemulGM Куратор тега Windows
    Delphi Developer, сис. админ
    Исправить ты вероятнее всего не сможешь. Но вот ход действий, которые помогут решить:
    1. Проверить жесткий диск "Викторией" из под загрузчика (например, сборка hiren's);
    2. Если всё ок, то необходимо восстановить загрузочную область на диске (инструкцию в много много строк можно найти в первой же ссылке в гугле. Нужно будет пользоваться командной строкой в режиме восстановления)
    Готово.
    Ответ написан
    Комментировать
  • Черный экран и ошибка "перезапустить драйвера видеокарты" как это сделать?

    HemulGM
    @HemulGM Куратор тега Windows
    Delphi Developer, сис. админ
    У тебя вылазит уведомление об уже совершившемся действии. О перезагрузке драйвера видеокарты, т.к. он перестал отвечать. Я так полагаю, у тебя ATI? Переустанови драйвера.
    Ответ написан
  • Как можно диск ужать?

    HemulGM
    @HemulGM Куратор тега Windows
    Delphi Developer, сис. админ
    Сделай дефрагментацию диска. Все данные упадут в начало диска. После, попробуй ещё раз стандартными средствами ужать диск.
    Ответ написан
  • Как развиваться дальше самостоятельно?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    Знание синтаксиса - это ни что, по сравнению с тем, что нужно знать, чтобы создавать что-либо нужное хоть кому-то. Большую часть из того, что ты перечислил ты знаешь только как название и сферу применения, но не использовал в рабочих проектах. А это уже не навык, а лишь небольшое поверхностное знание.
    Не думал, почему именно не берут на полный раб. день? Потому что пользы от тебя будет как с козла молока. Тебя придётся обучать конкретным вещам, которым ты бы обучился самостоятельно параллельно обучению в ВУЗе или профильном училище.
    Иди учись, ищи параллельно подработки для получения опыта, но не в ущерб обучению. Общие знания тоже важны. Общая грамотность ценится.
    Ответ написан
    Комментировать
  • Как я могу посмотреть историю браузера с другого аккаунта Windows 10?

    HemulGM
    @HemulGM Куратор тега Windows
    Delphi Developer, сис. админ
    Данные, относящиеся к конкретному пользователю хранятся в каталоге пользователя. По умолчанию в "C:\Users\<имя пользователя>". Каждая программа, которая позволяет сохранять данные хранит их как захочет и разграничивает их как захочет, но есть и стандарты. Рекомендуется сохранять в AppData - каталог, который находится там же в каталоге пользователя, но он скрыт. В нём все программы должны хранить локальные данные пользователя.

    Реестр пользователя находится тоже в этом же каталоге. Называется он ntuser.dat.

    Прочесть историю чужого браузера ты сможешь, скопировав данные браузера из AppData в свой каталог и заменив их. Но это не всегда работает.
    5e14ad6237f29578113650.png
    Ответ написан
    3 комментария
  • Как понять, что в ноутбук можно вставить второй диск?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    В твой ноут вставить второй диск нельзя. Т.к. там даже первого диска нет. Там используется SSD в M2.
    csm_MG_7028_aa08917586.jpg
    Следовательно купи ещё один такой SSD и вставляй, вон рядом есть ещё разъём.

    А по поводу общего вопроса. Если в ноуте есть привод компакт дисков, то его можно заменить на hdd, путём покупки такого держателя.
    spoiler
    maxresdefault.jpg
    Ответ написан
    8 комментариев