четверг, 2 февраля 2017 г.

Просмотр FTP через проводник

В реестр необходимо добавить следующие параметры (создаем файл с рассширением *.reg, копируем туда, сохраняем файл, закрываем файл, запускаем файл):

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\ftp]
@="URL:File Transfer Protocol"
"EditFlags"=dword:00000002
"ShellFolder"="{63da6ec0-2e98-11cf-8d82-444553540000}"
"Source Filter"="{E436EBB6-524F-11CE-9F53-0020AF0BA770}"
"FriendlyTypeName"="@C:\\WINDOWS\\system32\\ieframe.dll.mui,-905"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\ftp\DefaultIcon]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
 00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,75,00,72,00,\
  6c,00,2e,00,64,00,6c,00,6c,00,2c,00,30,00,00,00
[HKEY_CLASSES_ROOT\ftp\Extensions]
".IVF"="{C69E8F40-D5C8-11D0-A520-145405C10000}"
[HKEY_CLASSES_ROOT\ftp\shell]
@="open"
[HKEY_CLASSES_ROOT\ftp\shell\open]
[HKEY_CLASSES_ROOT\ftp\shell\open\command]
@="\"C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE\" %1"
[HKEY_CLASSES_ROOT\ftp\shell\open\ddeexec]
@="\"%1\",,-1,0,,,,"
"NoActivateHandler"=""
[HKEY_CLASSES_ROOT\ftp\shell\open\ddeexec\Application]
@="IExplore"
[HKEY_CLASSES_ROOT\ftp\shell\open\ddeexec\ifExec]
@="*"
[HKEY_CLASSES_ROOT\ftp\shell\open\ddeexec\Topic]
@="WWW_OpenURL"

воскресенье, 1 января 2017 г.

Установка и настройка IntelliJ Idea + Android

Установка необходимого ПО:

1. Java Develop Kit 8 (jdk-18_windows-x64_bin.exe),
Java Runtime Environment (jre-8u321-windows-x64.exe)
В свойствах системы создаем переменную системного окружения "JAVA_HOME" со значением "C:\Program Files\Java\jre1.8.0_321" ("C:\Program Files\Java\jdk1.8.0_111");

2. Android SDK Manager (installer_r24.4.1-windows.exe);

В программе "Android SDK Manager" выбираем компоненты для версии нашего андроида (в моем случае это 4.2.2) и нажимаем "Install packages"... ждем окончания.

Примечание: Прежние версии Android SDK Manager (installer_r08-windows.exe) не находили JAVA_HOME, хрень какая-то была... заводил JAVA_HOME - кнопка "Next" не активировалась... колдунства требовалось много. Этот инсталятор *r24* реагирует на JAVA_HOME.

3. Intellij Idea (https://download.jetbrains.com/idea/ideaIC-2016.3.2.exe) скачиваем и устанавливаем;

4. Для того, чтобы отладку разрабатываемого приложения выполнять на присоедененном к ПК телефоне необходимо дополнительно скачать и установить ADB Driver Installer (Universal) с ресурса http://adbdriver.com/. Запускаем, и настраиваем ADB под наш телефон.

понедельник, 20 июля 2015 г.

c# Номер недели в месяце

private int GetWeekOfMonth (DateTime date)
{
    DateTime beginningOfMonth = new DateTime(date.Year, date.Month, 1);

    while (date.Date.AddDays(1).DayOfWeek != System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek)
        date = date.AddDays(1);
    return (int)Math.Truncate((double)date.Subtract(beginningOfMonth).TotalDays / 7f) + 1;
}

среда, 1 июля 2015 г.

C# доступ к сетвой папке по имени пользователя и паролю

using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.Principal;
namespace LogonUser
{
    class Class1
    {
        private const int LOGON32_LOGON_INTERACTIVE = 2;
        private const int LOGON32_LOGON_NETWORK_CLEARTEXT = 3;
        private const int LOGON32_PROVIDER_DEFAULT = 0;
        [DllImport("advapi32.dll", CharSet = CharSet.Auto)]
        static extern int LogonUser(string lpszUserName, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern int DuplicateToken(IntPtr hToken, int impersonationLevel, ref IntPtr hNewToken);
        [STAThread]
        static void Main(string[] args)
        {
            string UserName = "логин к папке";
            string Password = "пароль как папке";
            // Для сохранения текущей имперсонации
            WindowsImpersonationContext impersonationContext = null;
            try
            {
                // Имперсонируем другого пользователя
                WindowsIdentity newIdentity;
                IntPtr token = IntPtr.Zero;
                IntPtr tokenDuplicate = IntPtr.Zero;
                if (LogonUser(UserName, Environment.MachineName, Password,
                    LOGON32_LOGON_NETWORK_CLEARTEXT, LOGON32_PROVIDER_DEFAULT, ref token!= 0)
                {
                    if (DuplicateToken(token, 2, ref tokenDuplicate!= 0)
                    {
                        newIdentity = new WindowsIdentity(tokenDuplicate);
                        // При имперсонации возвращается текущее значение
                        impersonationContext = newIdentity.Impersonate();
                    }
                }
            }
            catch (Exception Ex)
            {
                Console.WriteLine("Ошибка имперсонации пользователя {0}: {1}", UserName, Ex);
            }
            // Новая имперсонация
            WindowsIdentity wi1 = WindowsIdentity.GetCurrent();
            Console.WriteLine("Name={0} --> {1}", wi1.Name, wi1.IsAuthenticated);
            // Действие
            string[] files = Directory.GetFiles(@"\\10.0.0.71\install\");
            Console.WriteLine("--- Files: ---");
            foreach (string name in files)
            {
                Console.WriteLine(name);
            }
            // Возвращаем предыдущую имперсонацию
            if (impersonationContext != null)
                impersonationContext.Undo();
            Console.ReadKey(true);
        }
    }
},

вторник, 10 февраля 2015 г.

Экспорт DataGridView в Excel (путем копирования - вставки)

Подключаем через AddReference "Microsoft.Office.Interop.Excel"

using Excel = Microsoft.Office.Interopt.Excel;

...

private void btnExportToExcel_Click(object sender, EventArgs e)
{
    dgv.SelectAll();

    DataObject dataObj = dgv.GetClipboardContent();

    DataObject dataObject = new DataObject();
    Encoding enc = Encoding.Unicode;
    byte[] bytes = enc.GetBytes(dataObj.GetText());
    System.IO.MemoryStream stream = new System.IO.MemoryStream(bytes);
    dataObject.SetData("UnicodeText", false, stream);
    Clipboard.SetDataObject(dataObject, true);

    Microsoft.Office.Interop.Excel.Application xlexcel;
    Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
    Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
    object misValue = System.Reflection.Missing.Value;
    xlexcel = new Excel.Application();
    xlexcel.Visible = true;
    xlWorkBook = xlexcel.Workbooks.Add(misValue);
    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
    Excel.Range CR = (Excel.Range)xlWorkSheet.Cells[1, 1];
    CR.Select();


    xlWorkSheet.PasteSpecial(CR, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true);
}

среда, 21 января 2015 г.

Excel Сумма ячеек по цвету

Откройте редактор Visual Basic:
  • В Excel 2003 и старше для этого нужно выбрать в меню Сервис - Макрос - Редактор Visual Basic (Tools - Macro - Visual Basic Editor)
  • В новых версиях Excel 2007-2013 перейти на вкладку Разработчик (Developer) и нажать кнопку Visual Basic. Если такой вкладки у вас не видно, то включите ее в настройках Файл - Параметры - Настройка ленты (File - Options - Customize Ribbon)
В окне редактора вставьте новый модуль через меню Insert - Module и скопируйте туда текст вот такой функции:

Public Function SumByColor(DataRange As Range, ColorSample As Range) As Double
     Dim Sum As Double
     Application.Volatile True

     For Each cell In DataRange
         If cell.Font.Color = ColorSample.Font.Color Then
             Sum = Sum + cell.Value
         End If
     Next cell
     SumByColor = Sum
 End Function

Если теперь вернуться в Excel, то в Мастере функций (Вставка - Функция) в появившейся там категории Определенные пользователем (User Defined) можно найти нашу функцию и вставить ее на лист:


Источник: http://www.planetaexcel.ru/techniques/9/162/

вторник, 19 августа 2014 г.

C# данные для TreeView из базы данных

private void LoadTree()
{
    DataTable tbl = new DataTable();


    tbl = oraConnector.ExecQuery("select account_id, parent, 
                                  type, name from account");

    //Use a DataSet to manage the data
    DataSet ds = new DataSet();
    ds.Tables.Add(tbl);

    //add a relationship
    ds.Relations.Add("rsParentChild",  
                     ds.Tables[0].Columns["account_id"],  
                     ds.Tables[0].Columns["parent"]);

    foreach (DataRow dr in tbl.Rows)
    {
        if (dr["parent"] == DBNull.Value)
        {
            TreeNode root = new TreeNode(dr["name"].ToString());
            root.Tag = dr["type"].ToString();
            treeView.Nodes.Add(root);
            PopulateTree(dr, root);
        }
    }

    // treeView.ExpandAll();
}

public void PopulateTree(DataRow dr, TreeNode pNode)
{

    foreach (DataRow row in dr.GetChildRows("rsParentChild"))
    {
        TreeNode cChild = new TreeNode(row["NAME"].ToString());
        cChild.Tag = row["TYPE"].ToString();
        pNode.Nodes.Add(cChild);

        //Recursively build the tree
        PopulateTree(row, cChild);
    }
}

Nginx + Let's Crypt

Шаг 1. Установка Certbot # apt-get install python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing...