суббота, 11 декабря 2010 г.

четверг, 2 сентября 2010 г.

Сброс параметров сетевых интерфейсов. Вручную.

Сегодня буду краток :)

Если после очередного вируса у вас совсем-совсем сломался интернет (все вроде правильно настроено, но не работает), то можно попробовать сбросить настройки сетевых протоколов. Фактически - преустановить и привести к исходному состоянию после установки винды.

Самые любознательные могут почитать инструкцию и/или справку. Остальным скорее всего будет достаточно попробовать две команды:

netsh winsock reset
netsh int ip reset

Собственно, в большинстве случаев этого достаточно.

пятница, 30 июля 2010 г.

ы :)


четверг, 10 июня 2010 г.

OpenHardwareMonitor

Появилась у меня тут на днях идея прикрутить к IIS на домашней машине страничку с возможностью удаленного контроля состояния домашнего компьютера когда меня нет рядом. Чтобы, значит, узнавать о проблемах, но при этом не подключаться к нему по rdp (что не всегда возможно/удобно/быстро). Соответственно, хотелось мониторить состояние железа, процессов, общую загрузку, ну и т.п. (по ходу дела будет понятно, что там еще надо).

Как ни удивительно, но самое простое - определить температуру процессора и скорость вращения вентиляторов - это практически невыполнимая задача :(

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

В результате - весь интернет наполнен вопросами вида: "как мне узнать температуру процессора?? я тут делаю - но оно не работает" и с единственным вариантом ответа: "напиши свой драйвер или забудь".

Однако, несмотря ни на что, я все-таки нашел решение - OpenHardwareMonitor. Написано на C#, использует собственный драйвер. Исходники доступны тут. Лицензия - Mozilla Pulic License v1.1.

среда, 12 мая 2010 г.

Обновил ExcelExportLib до версии 1.4.0.0

Собственно, обновление здесь. Много чего интересного, в частности:

- теперь можно использовать формулы в ячейках.
- можно задавать имена ячейкам. Имена должны быть уникальны. Имена можно использовать в формулах
- можно задавать комментарии для ячеек. Причем с форматированием

Вообщем, теперь можно получить что-то вроде этого:


воскресенье, 2 мая 2010 г.

Как скрыть AlwaysOnTop-форму, если запущенно полноэкранное приложение

Допустим, у нас есть программа, которая должна показывать свою форму поверх всех окон. Стандартными средствами дотнета - это легко. Но! Если запустить, например, проигрывание фильма на весь экран, наше приложение будет отображаться поверх фильма, что, безусловно, несколько неприятно :)

Однако решить эту проблемы вполне возможно.

    public partial class Form1: Form
    {
        [DllImport("user32.dll")]
        private static extern IntPtr GetForegroundWindow();
        [DllImport("user32.dll")]
        private static extern IntPtr GetDesktopWindow();
        [DllImport("user32.dll")]
        private static extern IntPtr GetShellWindow();
        [DllImport("user32.dll", SetLastError = true)]
        private static extern int GetWindowRect(IntPtr hwnd, out RECT rc);

        private IntPtr desktopHandle; //Хэндл рабочего стола
        private IntPtr shellHandle; //Хэндл оболочки

        public Form1()
        {
            InitializeComponent();

            this.TopMost = true;

            //Получаем хэндлы окон оболочки и рабочего стола
            desktopHandle = GetDesktopWindow();
            shellHandle = GetShellWindow();
        }

        public bool isThereFullScreenWindow()
        {
            //Detect if the current app is running in full screen
            bool runningFullScreen = false;
            RECT appBounds;
            Rectangle screenBounds;
            IntPtr hWnd;

            //get the dimensions of the active window
            hWnd = GetForegroundWindow();
            if (hWnd != null && !hWnd.Equals(IntPtr.Zero))
            {
                //Check we haven't picked up the desktop or the shell
                if (!(hWnd.Equals(desktopHandle) || hWnd.Equals(shellHandle)))
                {
                    GetWindowRect(hWnd, out appBounds);
                    //determine if window is fullscreen
                    screenBounds = Screen.FromHandle(hWnd).Bounds;
                    if ((appBounds.Bottom - appBounds.Top) == screenBounds.Height && (appBounds.Right - appBounds.Left) == screenBounds.Width)
                    {
                        runningFullScreen = true;
                    }
                }
            }
            return runningFullScreen;
        }
Ну а потом уже все просто:

            if (!isThereFullScreenWindow())
               this.TopMost = true;
            else
               this.TopMost = false;

Как спрятать форму от Alt+Tab

Итак, если вдруг хочется, чтобы на форму нельзя было переключиться используя Alt+Tab, то:

1. Можно сделать форму SizableToolWindow или FixedToolWindow, тогда спрятать ее можно вот так:

    this.FormBorderStyle = FormBorderStyle.SizableToolWindow;
    this.ShowInTaskbar = false;
2. Если же нужна форма без границы и без кнопок свернуть/развернуть/закрыть, то надо делать так:

    this.FormBorderStyle = FormBorderStyle.None;
    this.ShowInTaskbar = false;

...

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        // turn on WS_EX_TOOLWINDOW style bit
        cp.ExStyle |= 0x80;
        return cp;
    }
}

понедельник, 26 апреля 2010 г.

Сохраняем в логи содержимое объектов

Иногда в процессе отладки требуется узнать состояние определенных объектов в программе, однако не всегда возможно в нужный момент подключиться к работающей программе при помощи отладчика. Так вот, здесь предлагается готовый алгоритм для сохранения содержимого объектов (с использованием reflection). В итоге получится что-то вроде:


воскресенье, 18 апреля 2010 г.

Про писательство

Наткнулся вот на интересный пост:


Как бы мы не плакались о злых пиратах и негодности дистрибуции текста, печальная правда в том, что природу не обманешь. Мы производим невостребованный товар. Невостребованный коммерчески, ибо кризис перепроизводства. Мы пытаемся продавать песок в пустыне. Количество уже написанных книг, даже если отбросить из этой массы все барахло и оставить лишь признанных классиков и действительно хорошие книги, в разы превосходит то количество, которое может прочитать человек, даже если оставит все прочие занятия и посвятит свою жизнь исключительно чтению. А между тем, человечество продолжает генерировать ежедневные гигабайты текстового контента самых разнообразных форм, без всякой надежды на то, что это кому-нибудь понадобится.
...
Информации настолько много, что, если сравнивать ее с пищей, то человек не успевает даже облизнуть крем со всех пирожных, которые ему подают, не говоря уже о том, чтобы вдумчиво распробовать.
...
Выдернуть основную мысль, получить краткий эмоциональный толчок, принять к сведению приведенные цифры – и дальше, дальше, ведь еще столько непрочитанного! Длинный текст раздражает – из него тяжелее вытащить суть, рассуждения излишни – только факты и выводы, без промежуточных этапов. Длинный текст, скорее всего, проскроллят не читая, или, в лучшем случае, пробегут по врезкам с основными тезисами – если автор потрудился их оформить. На этом фоне книги выглядят просто нелепо. Даже среди тех, кто еще не утратил привычку к их чтению, все большая часть быстро пролистывает всю «занудь» - рассуждения, описания природы, размышления автора, - чтобы побыстрее добраться до действия. «Чтение со скроллом» - очередной новый феномен, часто упоминаемый на всяких книжных форумах.

пятница, 16 апреля 2010 г.

пятница, 12 марта 2010 г.

Нетрадиционное применение контекстно-зависимой грамматики

Попалась мне сегодня вот такая статья. Если честно, у меня нет слов :) Использовать теорию контекстно-зависимых грамматик для того, чтобы в итоге сгенерировать midi-файл, содержащий мелодию, похожую на образцовую - это уже совсем :)

Вообщем, кто знает теорию грамматик - порадуется, остальным это вряд ли пригодится...

среда, 3 марта 2010 г.

Звук

Искал наушники-вкладыши стоимостью до 600 руб - к плееру. Много разных посмотрел. Вообщем, если показать их АЧХ любому меломану (особенно тем, кто фанатеет от lossless-форматов музыки) - инфаркт будет обеспечен...

Это жесть, товарищи! Даже у громкоговорителя на столбе и то будет более ровная АЧХ, чем у этого г...

четверг, 11 февраля 2010 г.

Microsoft Visual Studio 2010 Ultimate RC

Microsoft Visual Studio 2010 Ultimate RC можно скачать здесь (ISO, 2257.1MB).

среда, 10 февраля 2010 г.

Как сжать много картинок в папках до нужного разрешения

Если вдруг вам понадобится массово изменить разрешение картинок, то вот эта утилита будет лучшим решением. Конечно, вы можете попробовать воспользоваться ACDSee и ей подобными программами, но у них есть один недостаток - они умеют работать только с теми картинками, которые расположены в одной папке (подпапки не учитываются). Поэтому, если у вас есть пара сотен папок с картинками, то стандартные программы будут малополезны :)

Настройки качества сжатия задаются в запускаемом файле, который есть в папке куда установлена программа:

Картинки можно сжимать в проводнике, по правой кнопке мыши будет соответствующее меню или же воспользоваться утилитой для массовой обработки, ссылка на которую появится в меню "Пуск":


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

:)


Шаблоны для DateTime.ToString()

Чтобы не потерялось:

0 MM/dd/yyyy 08/22/2006
1 dddd, dd MMMM yyyy Tuesday, 22 August 2006
2 dddd, dd MMMM yyyy HH:mm Tuesday, 22 August 2006 06:30
3 dddd, dd MMMM yyyy hh:mm tt Tuesday, 22 August 2006 06:30 AM
4 dddd, dd MMMM yyyy H:mm Tuesday, 22 August 2006 6:30
5 dddd, dd MMMM yyyy h:mm tt Tuesday, 22 August 2006 6:30 AM
6 dddd, dd MMMM yyyy HH:mm:ss Tuesday, 22 August 2006 06:30:07
7 MM/dd/yyyy HH:mm 08/22/2006 06:30
8 MM/dd/yyyy hh:mm tt 08/22/2006 06:30 AM
9 MM/dd/yyyy H:mm 08/22/2006 6:30
10 MM/dd/yyyy h:mm tt 08/22/2006 6:30 AM
10 MM/dd/yyyy h:mm tt 08/22/2006 6:30 AM
10 MM/dd/yyyy h:mm tt 08/22/2006 6:30 AM
11 MM/dd/yyyy HH:mm:ss 08/22/2006 06:30:07
12 MMMM dd August 22
13 MMMM dd August 22
14 yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK 2006-08-22T06:30:07.7199222-04:00
15 yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK 2006-08-22T06:30:07.7199222-04:00
16 ddd, dd MMM yyyy HH':'mm':'ss 'GMT' Tue, 22 Aug 2006 06:30:07 GMT
17 ddd, dd MMM yyyy HH':'mm':'ss 'GMT' Tue, 22 Aug 2006 06:30:07 GMT
18 yyyy'-'MM'-'dd'T'HH':'mm':'ss 2006-08-22T06:30:07
19 HH:mm 06:30
20 hh:mm tt 06:30 AM
21 H:mm 6:30
22 h:mm tt 6:30 AM
23 HH:mm:ss 06:30:07
24 yyyy'-'MM'-'dd HH':'mm':'ss'Z' 2006-08-22 06:30:07Z
25 dddd, dd MMMM yyyy HH:mm:ss Tuesday, 22 August 2006 06:30:07
26 yyyy MMMM 2006 August
27 yyyy MMMM 2006 August

Взял здесь.

суббота, 6 февраля 2010 г.

Красивые кнопочки для формы

Вот вам еще один интересный проект. На этот раз - замена стандартным кнопкам на форме. Работает на ХР.
Выглядит вот так:


P.S.: не глючит :)

вторник, 2 февраля 2010 г.

...

Ну, пока ничего интересного не происходит - похвалюсь: на моей домашней машине с 2000-го года не используется антивирус. И знаете что самое замечательное? Вирусы там тоже не установлены :-D

P.S.: и никаких линуксов! Win 2000 -> Win XP -> Win 2003 Server (SP1, R1, SP2) -> Win Server 2008 Beta 2 -> Win Server 2008 -> Win Server 2008 R2 RC -> Win Server 2008 R2

пятница, 29 января 2010 г.

А знаете ли вы...

... что стандартные окна Windows (ошибка/информация/предупреждение) поддерживают сочетание клавиш Ctrl+C (заголовок и текст сообщения копируются в буфер обмена) ?

вторник, 19 января 2010 г.

DataGridView + вставка из буфера обмена

Если вы еще с этим не сталкивались - то я вас обрадую: стандартный DataGridView в буфер обмена данные копировать умеет, а вот обратно - нет :( Однако, решение данной проблемы есть.

- В свойствах формы прописать свойство keypreview равным true
- В KeyUp добавить следующий обработчик событий:

private void form1_KeyUp(object sender, KeyEventArgs e)
{
   //if user clicked Shift+Ins or Ctrl+V (paste from clipboard)
   if ((e.Shift && e.KeyCode == Keys.Insert) || (e.Control && e.KeyCode == Keys.V))
   {
      char[] rowSplitter = { '\r', '\n' };
      char[] columnSplitter = { '\t' };

      //get the text from clipboard
      IDataObject dataInClipboard = Clipboard.GetDataObject();
      string stringInClipboard = (string)dataInClipboard.GetData(DataFormats.Text);

      //split it into lines
      string[] rowsInClipboard = stringInClipboard.Split(rowSplitter, StringSplitOptions.RemoveEmptyEntries);

      //get the row and column of selected cell in grid
      int r = grid.SelectedCells[0].RowIndex;
      int c = grid.SelectedCells[0].ColumnIndex;

      //add rows into grid to fit clipboard lines
      if (grid.Rows.Count < (r + rowsInClipboard.Length))
        grid.Rows.Add(r + rowsInClipboard.Length - grid.Rows.Count);

      // loop through the lines, split them into cells and place the values in the corresponding cell.
      for (int iRow = 0; iRow < rowsInClipboard.Length; iRow++)
      {
        //split row into cell values
        string[] valuesInRow = rowsInClipboard[iRow].Split(columnSplitter);

        //cycle through cell values
        for (int iCol = 0; iCol < valuesInRow.Length; iCol++)
        {
          //assign cell value, only if it within columns of the grid
          if (grid.ColumnCount - 1 >= c + iCol)
            grid.Rows[r + iRow].Cells[c + iCol].Value = valuesInRow[iCol];
        }
      }
   }
}

Обращаю внимание, что valuesInRow[iCol] необходимо привести к нужному типу данных, а то потом будут проблемы.

P.S.: Оригинал можно почитать здесь

iTunesOutlook

Вот несмотря на весь мой опыт и как сисадмина, и как программиста - некоторые вещи остаются для меня загадкой:



четверг, 14 января 2010 г.

RCM v1.2

А вот еще одна полезная библиотека, содержащая в себе модифицированные версии базовых контролов Windows Forms с поддержкой скинов. Выглядит все это дело вот так:


или вот так:


среда, 13 января 2010 г.

Навороченный ListView

Иногда находятся действительно уникальные вещи. На этот раз мне попалась статья на Codeproject про ObjectListView. По сути это именно то, что нужно в любом современном приложении, которое выводит данные в табличной форме. Собственно, картинки говорят сами за себя:

ХР:


Виста/7:




Проект так же размещен и на sourceforge.