воскресенье, 28 февраля 2021 г.

Добавление пункта в контекстное меню Windows Explorer

 Будем для примера добавлять пункт для вызова командной строки в текущем каталоге.


  1. Открыть редактор реестра regedit.exe.
  2. Найти ветку реестра Computer\HKEY_CLASSES_ROOT\Directory\Background\shell.
  3. В этой ветке создать раздел (New > Key) с названием, совпадающим с названием пункта контекстного меню. Пусть это будет Quick Shell.
  4. В разделе Computer\HKEY_CLASSES_ROOT\Directory\Background\shell\Quick Shell создать строковый параметр с именем icon (New > String value).
  5. Параметру icon присваиваем значение имени файла, из которого будет браться иконка для меню. В данном случае это будет cmd.exe.
  6. В разделе Computer\HKEY_CLASSES_ROOT\Directory\Background\shell\Quick Shell создаём раздел command.
  7. В разделе Computer\HKEY_CLASSES_ROOT\Directory\Background\shell\Quick Shell\command параметру (Default) присваиваем значение cmd.exe.
  8. Закрыть редактор реестра и наслаждаться результатом.

Должно получиться примерно так:

 

 


 


В общем случае, для файлов могут понадобиться полные пути. Для cmd.exe путь указывать необязательно, поскольку этот файл система находит через переменную окружения PATH.


понедельник, 28 декабря 2020 г.

Как починить флешку, которая не опознаётся Windows

Бывает такое. Особенно при (или после) использовании флешки в качестве установочного диска конкурирующей операционной системы. Или после неудачной попытки не очень стандартных манипуляций с накопителем USB-flash.

Винда вроде опознаёт устройство, т.е. на уровне железа всё работает. Disk Management видит накопитель и даже разделы на нём, но сделать ничего не возможно: все действия заблокированы.

В таком случае может помочь следующее.

1. Запустить cmd.exe с правами администратора.

2. Запустить Diskpart. Далее команды выполняются программой Diskpart.

3. Посмотреть список дисков

list disk

4. Выбрать из списка проблемный диск

select disk <указать номер диска>

Ориентироваться можно по объёму накопителя. Также можно сначала посмотреть список дисков в оснастке Disk Management для более полной информации о дисках и разделах. Номера дисков в Disk Management и Diskpart вроде совпадают.

5. Сбросить атрибут read-only

attributes disk clear readonly

6. Очистить конфигурационную информацию

clean

7. Создать раздел

create partition primary

8. Отформатировать раздел

format fs=fat32 quick

9. Завершить работу с Diskpart

Exit

Выйти из Diskpart можно уже после шага 6. Шаги 7 и 8 можно выполнить в оснастке Disk Management.

суббота, 8 апреля 2017 г.

Убрать рекламу в uTorrent за 15 секунд

Легально, бесплатно, без смс.

Проверено и работает на последней версии 3.4.2 (win)
  1. Options > Preferences > Advanced (Настройки > Настройки программы > Дополнительно)
  2. Выставить параметрам «offers.sponsored_torrent_offer_enabled» и «gui.show_plus_upsell» значения «false»
  3. Нажать «OK» и перезагрузить программу
Взято отсюда.

На версии 3.5 надо изменить ещё один параметр:
  • offers.left_rail_offer_enabled -> false

среда, 11 января 2017 г.

Добавление шрифта для окна консоли

Оригинальная статья: https://support.microsoft.com/en-us/kb/247815
Article ID: 247815 - Last Review: 12/05/2015 17:45:43 - Revision: 2.3

Шрифты должны удовлетворять следующим условиям, чтобы быть доступными в окне сеанса командной строки:
  • Шрифт должен быть моноширинным.
  • Шрифт не может быть наклонным.
  • Шрифт не может иметь отрицательные значения свойств A или C.
  • Если шрифт TrueType, он должен быть FF_MODERN.
  • Если он не является шрифтом TrueType, он должен быть OEM_CHARSET.
Дополнительные критерии для азиатских установок:
  • Если он не является шрифтом TrueType, имя шрифта должен быть «Терминал».
  • Если шрифт TrueType азиатских языков, он также должен быть набор знаков азиатских языков.
В Windows 2000 установка Console Fonts больше автоматизирована. Это было сделано для увуличения стабильности работы окна консоли в многоязычных средах. Но на свой страх и риск эту задачу можно решить, добавив в реестр запись для определения шрифта для консоли.


В раздел реестра:


HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Console\TrueTypeFont

добавьте строковый параметр (String Value)

Name = 00

Data = "Название шрифта" (без "")

Имя должно быть увеличено на "0" для каждого дополнительного шрифта. Значение ключа должно соответствовать названию шрифта в разделе реестра:


HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Fonts 

Применимо к:
Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server, Microsoft Windows 2000 Professional Edition, Microsoft Windows 2000 Datacenter Server, Microsoft Windows NT Server 4.0 Standard Edition, Microsoft Windows NT Workstation 4.0 Developer Edition,
а также к
Windows 7 Ultimate, и, скорее всего, ко всем промежуточным версиям Windows.

среда, 23 марта 2016 г.

Тайна Тетриса

Тетрис я впервые увидел году эдак в 85-ом. В процессе освоения этой гениальной игрушки членами нашего небольшого коллектива родился вопрос: просчитывает ли эта дрянь игровую ситуацию при выборе следующей фигуры, или мы доблестно сражаемся с генератором случайных чисел?

На моей памяти, этот же вопрос возникал и впоследствии. В головах совершенно различных людей, при игре в различные реализации Тетриса, в совершенно разной обстановке.

Причём все эти люди, да и я сам, склонялись к мнению, что Тетрис всегда, или в какие-то моменты просчитывает ситуацию и подкидывает "правильные" фигуры. А смысл игры сводится к тому, что бы понять логику алгоритма, заложенного в программу, и укладывать фигуры в "правильные" места. Тогда можно добиваться очень высоких результатов.

Интерес к этому вопросу подогревало то обстоятельство, что Алексей Пажитнов, изобретатель Тетриса, "занимался проблемами искусственного интеллекта и распознавания речи, а для обкатки идей применял головоломки, в том числе и классическое пентамино" (цитата из Википедии).

Наконец, по прошествии более 30 лет, у меня дошли руки сделать собственную реализацию Тетриса. Я нашёл эмулятор ДВК-2 для PC и тот самый Tetris, в который играл тогда. И сделал программу, максимально точно повторяющую внешний вид, управление и поведение той игры.

Поиграв в свою игрушку, в которой используется самый примитивный генератор случайных чисел, я пришёл к выводу: искусственного интеллекта в Тетрисе нет.


воскресенье, 26 января 2014 г.

Монитор

Дома 30" монитор с разрешением 2560х1600 - это круто! Сразу чувствуешь себя человеком.

понедельник, 18 февраля 2013 г.

Упаковка значения в C#

Обнаружил забавный эффект при упаковке значения. Берём пример из книги "C# 2010: ускоренный курс для профессионалов" Трея Нэша:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test03
{
    public interface IPrint
    {
        void Print();
    }

    public struct MyValue : IPrint
    {
        public int x;
        public void Print()
        {
            Console.WriteLine("{0}", x);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyValue myval = new MyValue();
            myval.x = 123;
            myval.Print();     // (1)

            IPrint printer = myval;
            myval.x = 456;
            myval.Print();     // (2)

            printer.Print();   // (3)
        }
    }
}


и вставляем в него две строчки, выделенные жирным шрифтом. Что получаем?

123
456
123

Выражения (1) и (2) работают как и ожидается. Выражение (3) вроде должно было бы также вывести 456, но выводит 123.

На мой взгляд, имеется в наличии источник трудноотлавливаемых ошибок. Значение в поле структуры было изменено, а интерфейс printer помнит старое значение, поскольку именно оно и было неявно упаковано при создании объекта-интерфейса. Теперь в программе значение (в смысле типа, т.е. struct) myval существует в двух ипостасях: со значением (в смысле содержимого) поля x, равным 123, и со значением 456. Что и подтверждает явная распаковка, которую можно добавить после (3):

            MyValue unpacked_myval = (MyValue)printer;
            unpacked_myval.Print();


Вот.

Тестировалось на MS VS 2008.