<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8992986296774627107</id><updated>2024-10-02T09:31:48.527+03:00</updated><category term="Microsoft DNS live sync MySQL WMI"/><category term="VBScript VBS EXE C# исполняемый компилировать внедрить"/><category term="excel vba примеры"/><category term="vba excel примеры"/><category term="vba word поиск замена search replace"/><category term="vbscript wmi insert remove monitor подключение отключение мониторинг"/><category term="word пароль взлом"/><category term="взлом пароль Excel бесплатно VBA макрос"/><category term="скачать утилита runas пароль в командной строке C# CSharp"/><title type='text'>Секреты программирования</title><subtitle type='html'>Прикладное программирование на VBA для MS Office, VBScript, JavaScript и другое.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://procod.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://procod.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>xedoc</name><uri>http://www.blogger.com/profile/04461259729025237418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8992986296774627107.post-6995791482174619411</id><published>2011-08-03T17:55:00.000+03:00</published><updated>2011-08-03T17:55:06.407+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="vba word поиск замена search replace"/><title type='text'>Word Поиск и замена в нескольких файлах (VBA)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Данный код поможет заменить определенную строку в нескольких файлах Word одновременно.&lt;br /&gt;
Например это может пригодится, если необходимо заменить номер счета или телефона в корпоративных бланках и т.д.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;a href=&quot;https://sites.google.com/site/xedocfiles/files/Search.zip?attredirects=0&amp;amp;d=1&quot;&gt;Скачать макрос замены в нескольких файлах Word&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
Инструмент сделан на основе документа Word, с помощью кода VBA. Внешне документ выглядит так:&lt;br /&gt;
&lt;img alt=&quot;&quot; src=&quot;data:image/png;base64,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&quot; /&gt;&lt;br /&gt;
Два поля, с привязанными Bookmark-ами (SearchFor и ReplaceWith) позволяют обратиться к ним из кода:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;vb&quot; name=&quot;code&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; searchFor = ThisDocument.Bookmarks(&quot;SearchFor&quot;).Range.Text
&amp;nbsp;&amp;nbsp;&amp;nbsp; replaceWith = ThisDocument.Bookmarks(&quot;ReplaceWith&quot;).Range.Text&lt;/pre&gt;&lt;br /&gt;
Кнопка вызывает стандартный диалог выбора файлов. Для обработки файлов создается отдельный объект Word, который на всякий случай делается видимым:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;vb&quot; name=&quot;code&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set wordApp = New Application
&amp;nbsp;&amp;nbsp;&amp;nbsp; wordApp.Visible = True&lt;/pre&gt;&lt;br /&gt;
Выключаются предупреждения:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;vb&quot; name=&quot;code&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Application.DisplayAlerts = wdAlertsNone
&amp;nbsp;&amp;nbsp;&amp;nbsp; wordApp.DisplayAlerts = wdAlertsNone&lt;/pre&gt;&lt;br /&gt;
Все файлы последовательно открываются, обрабатываются в цикле и закрываются с сохранением. &lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;vb&quot; name=&quot;code&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; For Each FileName In picker.items
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set wordDocument = wordApp.Documents.Open(FileName)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; With wordDocument.Content.Find
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Text = searchFor
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Replacement.Text = replaceWith
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Forward = True
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .MatchCase = False
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Execute Replace:=wdReplaceAll
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End With
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wordDocument.Close SaveChanges:=True
&amp;nbsp;&amp;nbsp;&amp;nbsp; Next&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://procod.blogspot.com/feeds/6995791482174619411/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://procod.blogspot.com/2011/08/word-vba.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/6995791482174619411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/6995791482174619411'/><link rel='alternate' type='text/html' href='http://procod.blogspot.com/2011/08/word-vba.html' title='Word Поиск и замена в нескольких файлах (VBA)'/><author><name>xedoc</name><uri>http://www.blogger.com/profile/04461259729025237418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8992986296774627107.post-9052276883798414757</id><published>2011-08-01T11:35:00.004+03:00</published><updated>2011-08-01T22:22:41.650+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="VBScript VBS EXE C# исполняемый компилировать внедрить"/><title type='text'>Внедрение скрипта VBScript в EXE-файл (C#)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Создаем пустой консольный проект в C#.&lt;br /&gt;
&lt;br /&gt;
Затем добавляем файл скрипта в ресурсы проэкта&lt;br /&gt;
В VS2010 это можно сделать через:&lt;br /&gt;
RMB на имени проекта-&amp;gt;Properties-&amp;gt;Resources-&amp;gt;Add Resource-&amp;gt;Add New Text File&lt;br /&gt;
&lt;br /&gt;
Теперь можно получить содержимое скрипта, сохранить и запустить его.&lt;br /&gt;
Исходный код достаточно прост.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Чтобы получить содержимое скрипта, я использую:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;cpp&quot; name=&quot;code&quot;&gt;Properties.Resources.MyEmbeddedScript&lt;/pre&gt;где MyMbeddedScript - имя ресурса со скриптом.&lt;br /&gt;
&lt;br /&gt;
Получить случайное, временное имя файла для сохранения скрипта:&lt;br /&gt;
&lt;pre class=&quot;cpp&quot; name=&quot;code&quot;&gt;string scriptFileName = Path.GetTempFileName().Replace(&quot;.tmp&quot;,&quot;.vbs&quot;);&lt;/pre&gt;&lt;br /&gt;
Сохранение и запуск скрипта:&lt;br /&gt;
&lt;pre class=&quot;cpp&quot; name=&quot;code&quot;&gt;File.WriteAllText(scriptFileName, content);
startedProcess = Process.Start(scriptFileName);&lt;/pre&gt;&lt;br /&gt;
Чтобы запустить скрипт под другим пользователем, можно использовать следующий метод:&lt;br /&gt;
&lt;a href=&quot;http://procod.blogspot.com/2011/07/runas.html&quot;&gt;RunAs без ввода пароля&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Аналогичным способом можно превратить любой скрипт (.vbs, .js, .ahk и т.д) в исполняемый .exe-файл.&lt;br /&gt;
&lt;br /&gt;
Исходный код программы:&lt;br /&gt;
&lt;pre class=&quot;cpp&quot; name=&quot;code&quot;&gt;using System;
using System.Security;
using System.Diagnostics;
using System.IO;

namespace scriptEmbed
{
    class Program
    {
        static int Main(string[] args)
        {
            return RunScript(Properties.Resources.MyEmbeddedScript);
        }
        static int RunScript(string content)
        {
            string scriptFileName = Path.GetTempFileName().Replace(&quot;.tmp&quot;,&quot;.vbs&quot;);
            Process startedProcess;
            try
            {
                File.WriteAllText(scriptFileName, content);
                startedProcess = Process.Start(scriptFileName);
                
                while (!startedProcess.HasExited) ;

                File.Delete(scriptFileName);
                
                return startedProcess.ExitCode;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return 1;
            }
        }
        static string GetTempFolder()
        {
            return System.Environment.GetEnvironmentVariable(&quot;TEMP&quot;);
        }
    }

}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://procod.blogspot.com/feeds/9052276883798414757/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://procod.blogspot.com/2011/08/vbscript-exe-c.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/9052276883798414757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/9052276883798414757'/><link rel='alternate' type='text/html' href='http://procod.blogspot.com/2011/08/vbscript-exe-c.html' title='Внедрение скрипта VBScript в EXE-файл (C#)'/><author><name>xedoc</name><uri>http://www.blogger.com/profile/04461259729025237418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8992986296774627107.post-7036255199365728141</id><published>2011-07-31T16:10:00.002+03:00</published><updated>2011-07-31T16:11:18.307+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="скачать утилита runas пароль в командной строке C# CSharp"/><title type='text'>Утилита RunAs с паролем в командной строке (C#)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Альтернатива стандартной утилите RunAs с возможностью задать пароль в командной строке.&lt;br /&gt;
&lt;br /&gt;
Программа делает то-же самое, что и стандартная runas.exe. Единственное отличие - возможность указать пароль напрямую, в командной строке.&lt;br /&gt;
&lt;br /&gt;
Одним из возможных применений может быть выполнение пакетных заданий из под учетной записи администратора.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;a href=&quot;https://sites.google.com/site/xedocfiles/files/runasuser.zip?attredirects=0&amp;amp;d=1&quot;&gt;Скачать утилиту RunAs с паролем в командной строке&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
Синтаксис командной строки:&lt;br /&gt;
runasuser [-u пользователь] [-p пароль] [-d домен] someprogram.exe [параметры программы] &lt;br /&gt;
&lt;br /&gt;
Ниже приведен полный исходный код:&lt;br /&gt;
&lt;pre class=&quot;cpp&quot; name=&quot;code&quot;&gt;using System;
using System.Diagnostics;
using System.Security;

namespace RunAsUser
{
    class Program
    {
        static int Main(string[] args)
        {
            string username = &quot;&quot;, password = &quot;&quot;, domain = &quot;&quot;, apppath = &quot;&quot;, arguments = &quot;&quot;;

            for( int i=0; i&amp;lt;args.Length; i++)
            {
                switch (args[i].ToLower())
                {
                    case &quot;-u&quot;:
                        username = args[++i];
                        break;
                    case &quot;-p&quot;:
                        password = args[++i];
                        break;
                    case &quot;-d&quot;:
                        domain = args[++i];
                        break;
                    default:
                        if (apppath == &quot;&quot;)
                            apppath = args[i];
                        else
                            arguments += args[i] + (i&amp;lt;args.Length?&quot; &quot;:&quot;&quot;);
                        break;
                }
            }

            if (args.Length == 0 || apppath == &quot;&quot; )
            {
                Console.WriteLine(&quot;\nCommand line syntax:\nrunasuser [-u user] [-p password] [-d domain] someprogram.exe [params]\n&quot;);
                return 1;
            }
            Console.WriteLine(arguments);
            return RunAs(apppath, arguments, domain, username, password);

        }
        static int RunAs(string apppath, string arguments, string domain, string username, string password)
        {
            Process userProcess;
            try
            {
                userProcess = Process.Start( apppath, arguments, username, GetSecure(password), domain);
                while (!userProcess.HasExited) ;
                return userProcess.ExitCode;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            return -1;
        }

        static SecureString GetSecure(string str)
        {
            SecureString SecureStr = new SecureString();
            foreach (char c in str)
            {
                SecureStr.AppendChar(c);
            }

            return SecureStr;
        }
    }
}&lt;/pre&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://procod.blogspot.com/feeds/7036255199365728141/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://procod.blogspot.com/2011/07/runas.html#comment-form' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/7036255199365728141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/7036255199365728141'/><link rel='alternate' type='text/html' href='http://procod.blogspot.com/2011/07/runas.html' title='Утилита RunAs с паролем в командной строке (C#)'/><author><name>xedoc</name><uri>http://www.blogger.com/profile/04461259729025237418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8992986296774627107.post-8136088654051904687</id><published>2011-07-26T10:43:00.002+03:00</published><updated>2011-07-26T11:08:02.868+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft DNS live sync MySQL WMI"/><title type='text'>Синхронизация Microsoft DNS с MySQL (VBScript)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Иногда полезно иметь реплику записей DNS на сервере MySQL. Эти данные можно использовать для построения различных схем сети, подсчета компьютеров и т.д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В данном примере я использовал WMI для синхронизации базы Microsoft DNS с MySQL сервером.&lt;br /&gt;
&lt;br /&gt;
В начале скрипт делает полную копию базы DNS. Затем устанавливает обработчик для каждого из событий Создания/Изменения/Удаления&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Каждое событие вносит изменения в MySQL. Такой подход позволяет иметь точную реплику записей DNS в MySQL без заметных задержек.&lt;br /&gt;
&lt;br /&gt;
&lt;div closure_uid_aw62dd=&quot;189&quot; style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://sites.google.com/site/xedocfiles/files/dnsmonitor.zip?attredirects=0&amp;amp;d=1&quot;&gt;&lt;span closure_uid_aw62dd=&quot;213&quot; style=&quot;font-size: large;&quot;&gt;&lt;b closure_uid_aw62dd=&quot;224&quot;&gt;Скачать скрипт dnsmonitor.vbs&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div closure_uid_aw62dd=&quot;189&quot; style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;Исходный код можно увидеть ниже.&lt;br /&gt;
Не забудьте изменить имя NetBios сервера DNS и учетные данные MySQL в верху кода. &lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;vb&quot; name=&quot;code&quot;&gt;&#39;NetBios имя DNS сервера
Const SERVERNAME = &quot;SERVER&quot;

&#39;Учетные данные MySQL
Const host=&quot;localhost&quot;
Const Db=&quot;system&quot;
Const login= &quot;user&quot;
Const password=&quot;userpassword&quot;

&#39;Опции подключения к MySQL
Const MYDRIVER = &quot;MySQL ODBC 5.1 Driver&quot;
Const FLAG_BIG_PACKETS = 8 &#39;Allow big results
Const FLAG_NO_PROMPT = 16 &#39;Dont prompt anything
Const FLAG_DYNAMIC_CURSOR = 32 &#39;Allow dynamic cursor
Const FLAG_COMPRESSED_PROTO = 2048 &#39;Use compressed protocol
Const FLAG_NO_BIGINT = 16384 &#39;Change bigint(8) to int(4)
Const FLAG_MULTI_STATEMENTS = 67108864 &#39;Enable batch statements
Const FLAG_AUTO_RECONNECT = 4194304 &#39;Auto reconnect

&#39;ADODB connection
Dim conn

&#39;Создание глобальных объектов
Set oFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set objWMIService = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}\\&quot; &amp;amp; SERVERNAME &amp;amp; &quot;\root\MicrosoftDNS&quot;)
Set objSink = WScript.CreateObject(&quot;WBemScripting.SWbemSink&quot;,&quot;event_&quot;)
Set objShell = CreateObject(&quot;WScript.Shell&quot;)

&#39;Выход, если уже запущен
Set oProcess = Nothing
If alreadyRunning() Then: WScript.Quit

If Not MySQLConnect() Then
WScript.Quit
Else
PrepareDatabase
End If

&#39;Инициализация таблицы
MySQLExecute &quot;DELETE FROM dns_cache&quot;
Set dnsRecords = objWMIService.ExecQuery( &quot;SELECT * FROM MicrosoftDNS_AType&quot;, &quot;WQL&quot;, 48 )
For Each objRecord in dnsRecords
domain = objRecord.DomainName
name = Replace(objRecord.OwnerName,domain,&quot;&quot;)
ip = objRecord.IPAddress 
ttl = objRecord.TTL
timestamp = objRecord.Timestamp
OnCreation domain,name,ip,timestamp,ttl
Next

&#39;Установка обработчика событий
objWMIService.ExecNotificationQueryAsync objSink, &quot;Select * from __InstanceOperationEvent within 1 where TargetInstance ISA &#39;MicrosoftDNS_AType&#39;&quot;

&#39;Бесконечный цикл
Do
WScript.Sleep 1000
Loop

&#39;Обработчик событий
Sub event_OnObjectReady( objEvent, objContext )
With objEvent
domain = objEvent.TargetInstance.DomainName
name = Replace(objEvent.TargetInstance.OwnerName,domain,&quot;&quot;)
ip = objEvent.TargetInstance.IPAddress 
ttl = objEvent.TargetInstance.TTL
timestamp = objEvent.TargetInstance.timestamp
if name &amp;lt;&amp;gt; &quot;&quot; Then
Select Case .Path_.Class
Case &quot;__InstanceModificationEvent&quot;
OnModify domain,name,ip,timestamp,ttl
Case &quot;__InstanceCreationEvent&quot;
OnCreation domain,name,ip,timestamp,ttl
Case &quot;__InstanceDeletionEvent&quot;
OnDeletion domain,name,ip
End Select
End If
End With
End Sub

&#39;Обработчик для события изменения
Sub OnModify( domain, name,ip,timestamp,ttl )
update = &quot;domainname=&#39;&quot; &amp;amp; domain &amp;amp; &quot;&#39;,hostname=&#39;&quot; &amp;amp; name &amp;amp; &quot;&#39;,ipaddress=inet_aton(&#39;&quot; &amp;amp; ip &amp;amp; &quot;&#39;),&quot; &amp;amp; _ 
&quot;refreshon=IF(&quot; &amp;amp; timestamp &amp;amp; &quot;=0,Null,&#39;1601-01-01 00:00&#39;) + INTERVAL &quot; &amp;amp; timestamp &amp;amp; &quot; HOUR,ttl=&quot; &amp;amp; ttl
MySQLExecute &quot;INSERT INTO dns_cache SET &quot; &amp;amp; update &amp;amp; &quot; ON DUPLICATE KEY UPDATE &quot; &amp;amp; update
End Sub

&#39;Обработчик для события создания
Sub OnCreation( domain, name,ip,timestamp,ttl )
update = &quot;domainname=&#39;&quot; &amp;amp; domain &amp;amp; &quot;&#39;,hostname=&#39;&quot; &amp;amp; name &amp;amp; &quot;&#39;,ipaddress=inet_aton(&#39;&quot; &amp;amp; ip &amp;amp; &quot;&#39;),&quot; &amp;amp; _
&quot;refreshon=IF(&quot; &amp;amp; timestamp &amp;amp; &quot;=0,Null,&#39;1601-01-01 00:00&#39;) + INTERVAL &quot; &amp;amp; timestamp &amp;amp; &quot; HOUR,ttl=&quot; &amp;amp; ttl
MySQLExecute &quot;INSERT INTO dns_cache SET &quot; &amp;amp; update &amp;amp; &quot; ON DUPLICATE KEY UPDATE &quot; &amp;amp; update 
End Sub

&#39;Обработчик для события удаления
Sub OnDeletion( domain, name,ip )
MySQLExecute &quot;DELETE FROM dns_cache WHERE hostname=&#39;&quot; &amp;amp; name &amp;amp; &quot;&#39; AND ipaddress=inet_aton(&#39;&quot; &amp;amp; ip &amp;amp; &quot;&#39;) AND domainname=&#39;&quot; &amp;amp; domain &amp;amp; &quot;&#39;&quot;
End Sub

&#39;Создание базы данных, если еще не создана
Function PrepareDatabase
CreateDatabase = False
On Error Resume Next
MySQLExecute &quot;CREATE DATABASE IF NOT EXISTS &quot; &amp;amp; db &amp;amp; &quot; CHARACTER SET utf8 COLLATE utf8_general_ci&quot;
On Error Goto 0
MySQLExecute &quot;USE &quot; &amp;amp; db
MySQLExecute &quot;CREATE TABLE IF NOT EXISTS dns_cache(&quot; &amp;amp; _
&quot;hostname VARCHAR(255) NOT NULL,&quot; &amp;amp; _
&quot;domainname VARCHAR(255) NOT NULL,&quot; &amp;amp; _
&quot;ipaddress INT(11) UNSIGNED NOT NULL,&quot; &amp;amp; _
&quot;refreshon DATETIME DEFAULT NULL,&quot; &amp;amp; _
&quot;ttl INT(11) NOT NULL DEFAULT 0,&quot; &amp;amp; _
&quot;PRIMARY KEY (ipaddress, hostname, domainname),&quot; &amp;amp; _
&quot;INDEX IX_dns_cache_deadline (refreshon),&quot; &amp;amp; _
&quot;INDEX IX_dns_cache_domainname (domainname),&quot; &amp;amp; _
&quot;INDEX IX_dns_cache_ipaddress (ipaddress),&quot; &amp;amp; _
&quot;INDEX IX_dns_cache_name (hostname),&quot; &amp;amp; _
&quot;INDEX IX_dns_cache_ttl (ttl)&quot; &amp;amp; _
&quot;) &quot; &amp;amp; _
&quot;ENGINE = INNODB &quot; &amp;amp; _
&quot;AVG_ROW_LENGTH = 68 &quot; &amp;amp; _
&quot;CHARACTER SET utf8 &quot; &amp;amp; _
&quot;COLLATE utf8_general_ci;&quot;
If Err.Number &amp;lt;&amp;gt; 0 Then: CreateDatabase = True
End Function

Function alreadyRunning()
alreadyRunning = False
wscrCount = ProcessCount( &quot;%wscript%&quot; &amp;amp; WScript.ScriptName &amp;amp; &quot;%&quot; )
cscrCount = ProcessCount( &quot;%cscript%&quot; &amp;amp; WScript.ScriptName &amp;amp; &quot;%&quot; )
If wscrCount &amp;gt; 1 or cscrCount &amp;gt; 1 Then:alreadyRunning = True
End Function

Public Function ProcessCount(likestr)
Set objWMI = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}\\.\root\cimv2&quot;)
Set colItems = objWMI.ExecQuery(&quot;SELECT Name,CommandLine FROM Win32_Process WHERE CommandLine Like &#39;&quot; &amp;amp; likestr &amp;amp; &quot;&#39;&quot;)
ProcessCount = colItems.Count
End Function 

&#39;Процедуры MySQL
Function MySQLExecute( cmd )
On Error Resume Next
Set rst = conn.Execute( cmd )
If conn.Errors.Count &amp;gt; 0 Then
If conn.Errors(conn.Errors.Count-1).NativeError = 2006 Then 
conn.Errors.Clear
If InitConnection() Then
Set rst = conn.Execute( cmd )
End If
End If 
End If
If rst.State = 1 And Err.Number = 0 Then
Set MySQLExecute = rst
Else
Set MySQLExecute = conn.Execute( &quot;SELECT Null LIMIT 0&quot; )
End If
On Error Goto 0
End Function

Function MySQLConnect
Set conn = CreateObject(&quot;ADODB.Connection&quot;)
MySQLConnect = False
On Error Resume next
conn.ConnectionString = &quot;DRIVER={&quot; &amp;amp; MYDRIVER &amp;amp; &quot;};&quot; &amp;amp; _
&quot;SERVER=&quot; &amp;amp; host &amp;amp; &quot;;&quot; &amp;amp; _
&quot;UID=&quot; &amp;amp; login &amp;amp; &quot;;&quot; &amp;amp; _
&quot;PWD=&quot; &amp;amp; password &amp;amp; &quot;;&quot; &amp;amp; _
&quot;OPTION=&quot; &amp;amp; (FLAG_BIG_PACKETS + FLAG_COMPRESSED_PROTO + FLAG_NO_BIGINT + FLAG_MULTI_STATEMENTS)
conn.ConnectionTimeout = 3
conn.Open
If Err.Number = -2147467259 Then
MsgBox &quot;MyODBC isn&#39;t installed. Can&#39;t connect to MySQL!&quot;
Exit Function
End If
If Err.Number &amp;lt;&amp;gt; 0 Then
MsgBox err.description
Exit Function
End If
MySQLConnect = True
On Error GoTo 0
End Function

Sub MySQLDisconnect
conn.Close
Set conn = Nothing
End Sub&lt;/pre&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://procod.blogspot.com/feeds/8136088654051904687/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://procod.blogspot.com/2011/07/microsoft-dns-live-sync-to-mysql.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/8136088654051904687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/8136088654051904687'/><link rel='alternate' type='text/html' href='http://procod.blogspot.com/2011/07/microsoft-dns-live-sync-to-mysql.html' title='Синхронизация Microsoft DNS с MySQL (VBScript)'/><author><name>xedoc</name><uri>http://www.blogger.com/profile/04461259729025237418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8992986296774627107.post-6808123455377811626</id><published>2011-07-16T17:07:00.000+03:00</published><updated>2011-07-16T17:07:49.152+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="vbscript wmi insert remove monitor подключение отключение мониторинг"/><title type='text'>Мониторинг подключения/отключения USB устройств на VBScript</title><content type='html'>Некоторое время назад у меня завялся телефон на Android. Чтобы управлять им с компьютера я установил MyPhoneExplorer.&lt;br /&gt;
Это отличная программа, но все-же в ней не хватает одной важной для меня функции, а именно: автоматического переподключения при подключении телефона к USB. С другой стороны в ней есть такая опция, как &quot;Подключаться при запуске&quot;.&lt;br /&gt;
Отсюда у меня появилась идея написать скриптик, который будет прибивать процесс MyPhoneExplorer при отключении телефона и запускать при подключении.&lt;br /&gt;
Наконец я оформил это на VBScript. Этот скрипт наблюдает за подключением/отключением устройства под названием &quot;Android ADB Interface&quot; и выполняет соответствующие действия:&lt;br /&gt;
&lt;pre class=&quot;vb&quot; name=&quot;code&quot;&gt;Const DEVICENAME = &quot;Android ADB Interface&quot;
Const EXENAME = &quot;MyPhoneExplorer.exe&quot;
Dim lastOperation
Set objWMIService = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}\\.\root\cimv2&quot;)

&#39;Выйти, если скрипт уже запущен
If alreadyRunning() Then: WScript.Quit

Set objSink = WScript.CreateObject(&quot;WBemScripting.SWbemSink&quot;,&quot;event_&quot;)
Set objShell = CreateObject(&quot;WScript.Shell&quot;)
Set deviceIDs = CreateObject(&quot;Scripting.Dictionary&quot;)

&#39;Установим перехватчик событий
objWMIService.ExecNotificationQueryAsync objSink, &quot;Select * from __InstanceOperationEvent within 1 where TargetInstance ISA &#39;Win32_PnPEntity&#39;&quot;

&#39;Получим ID устройств по заданному имени
EnumerateDevices DEVICENAME
objShell.Popup &quot;Мониторинг USB начат!&quot;,2
&#39;Бесконечный цикл
Do
 WScript.Sleep 1000
Loop

&#39;Перехватчик событий подключения/отключения USB устройств
Sub event_OnObjectReady( objEvent, objContext )
 With objEvent
  If deviceIDs.Exists(.TargetInstance.DeviceId) Then
   Select Case .Path_.Class
    Case &quot;__InstanceCreationEvent&quot;
     If lastOperation &amp;lt;&amp;gt; &quot;Insert&quot; Then
      lastOperation = &quot;Insert&quot;
      OnInsert
     End If
      
    Case &quot;__InstanceDeletionEvent&quot;
     If lastOperation &amp;lt;&amp;gt; &quot;Remove&quot; Then
      lastOperation = &quot;Remove&quot;
      OnRemove
     End If
    End Select
  End If
 End With
End Sub

Sub OnInsert
 objShell.Run EXENAME,1,0
End Sub

Sub OnRemove
 objShell.Run &quot;taskkill /f /im &quot; &amp;amp; EXENAME,0,0
End Sub

Sub EnumerateDevices(name)
 Set objDevices = objWMIService.ExecQuery(&quot;SELECT DeviceId FROM Win32_PnPSignedDriver WHERE Description=&#39;&quot; &amp;amp; name &amp;amp; &quot;&#39;&quot;)
 For Each dev in objDevices
  deviceId = dev.DeviceId
  If Not deviceIDs.Exists(deviceId) Then
   deviceIDs.Add deviceId, deviceId
  End If
  d = d + 1
 Next
End Sub

Function alreadyRunning()
 alreadyRunning = False
 wscrCount = ProcessCount( &quot;%wscript%&quot; &amp;amp; WScript.ScriptName &amp;amp; &quot;%&quot; )
 cscrCount = ProcessCount( &quot;%cscript%&quot; &amp;amp; WScript.ScriptName &amp;amp; &quot;%&quot; )
 If  wscrCount &amp;gt; 1 or cscrCount &amp;gt; 1 Then:alreadyRunning = True
End Function

Public Function ProcessCount(likestr)
 Set colItems = objWMIService.ExecQuery(&quot;SELECT Name,CommandLine FROM Win32_Process WHERE CommandLine Like &#39;&quot; &amp;amp; likestr &amp;amp; &quot;&#39;&quot;)
 ProcessCount = colItems.Count
End Function   
&lt;/pre&gt;&lt;br /&gt;
VBS-файл можно скачать &lt;a href=&quot;https://sites.google.com/site/xedocfiles/files/usbevent.zip?attredirects=0&amp;amp;d=1&quot;&gt;здесь&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://procod.blogspot.com/feeds/6808123455377811626/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://procod.blogspot.com/2011/07/usb-vbscript.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/6808123455377811626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/6808123455377811626'/><link rel='alternate' type='text/html' href='http://procod.blogspot.com/2011/07/usb-vbscript.html' title='Мониторинг подключения/отключения USB устройств на VBScript'/><author><name>xedoc</name><uri>http://www.blogger.com/profile/04461259729025237418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8992986296774627107.post-6722446573840944348</id><published>2010-01-22T09:09:00.004+02:00</published><updated>2010-01-22T09:24:02.870+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="взлом пароль Excel бесплатно VBA макрос"/><title type='text'>Взлом пароля Excel. Макрос VBA, на основе Excel</title><content type='html'>Существует простой способ взломать забытый пароль Excel. И что немаловажно, сделать это можно абсолютно бесплатно с помощью самого Excel. &lt;br /&gt;
Итак если файл открывается, но Вам необходимо убрать защиту листа или книги, используйте надстройку, которую я написал:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://sites.google.com/site/xedocfiles/files/password_crack_ru.xla&quot;&gt;Скачать надстройку&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Идея алгоритма заключается в использовании недостатка стандартного метода шифрования Excel. Программа перебирает пароли от 1 до 8 символов. Последний символ пароля подбирается из диапазона кодов от 32 до 255. Остальные символы подбираются из кодов 65 и 66. В результате используется пароль отличный от оригинального, но тем не менее рабочий. К сожалению для открытия файла, через Workbook.Open(), этот метод не подходит. Метод также не работает в Excel 2007, где используется более стойкий алгоритм шифрования. Исключение составляет французская версия Excel 2007, где из-за местных законов шифрование остается прежним.&lt;br /&gt;
&lt;br /&gt;
Ниже приведен исходный код надстройки для взлома пароля в Excel:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;vb&quot; name=&quot;code&quot;&gt;Const MENUNAME = &quot;ЗАЩИТА&quot;
&#39;Установка ярлыка меню
Sub Auto_Open()
    Install
    MsgBox &quot;Меню установлено, используйте &quot;&quot;ЗАЩИТА-&amp;gt;Снять защиту&quot;&quot; для снятия защиты с активной книги Excel и всех листов&quot;
End Sub

&#39;Взлом всех паролей, путем перебора.
Sub BruteForceUnprotect()
    Dim ProtectedObjects As New Collection
    Const LastCharStart = 32
    Const LastCharFinish = 255
    
    Application.DisplayAlerts = False
    
    &#39;Добавление защищенной книги в набор объектов для вскрытия
    If (ActiveWorkbook.ProtectStructure Or ActiveWorkbook.ProtectWindows) Then
        ProtectedObjects.Add ActiveWorkbook
    End If
    
    &#39;Добавление в набор защищенных листов
    On Error Resume Next
    For Each WSheet In ActiveWorkbook.Worksheets
        WSheet.Protect (&quot;&quot;)
        If Not WSheet.Unprotect(&quot;&quot;) Then: ProtectedObjects.Add WSheet
    Next
    On Error GoTo 0
    
    &#39;Поиск подставного пароля. Оригинальный пароль не может быть восстановлен этим способом.
    For i = 1 To 255
        fakepassword = FakePass(i)
        If ProtectedObjects.Count = 0 Then: Exit For
        For LastCharIndex = LastCharStart To LastCharFinish
            Password = fakepassword &amp;amp; Chr(LastCharIndex)
            If ProtectedObjects.Count &amp;gt; 0 Then
                For j = 1 To ProtectedObjects.Count
                    If UnprotectObject(ProtectedObjects(j), Password) = True Then
                        ProtectedObjects.Remove (j)
                        If ProtectedObjects.Count &amp;gt; 0 Then: j = j - 1
                    End If
                Next
            End If
        Next
    Next
    
    If ProtectedObjects.Count = 0 Then
        MsgBox &quot;Пароли на текущую книгу и листы сняты!&quot;
    Else
        MsgBox &quot;Похоже используется нестандартное шифрование. Защита некоторых объектов не может быть снята.&quot;
    End If
    Application.DisplayAlerts = True
End Sub
Function UnprotectObject(obj, pass)
  UnprotectObject = False
  On Error GoTo WrongPassword
  obj.Unprotect pass
  UnprotectObject = True
WrongPassword:
End Function
&#39;Возвращает пароль на основе переданного числового значения
Function FakePass(Value)
    Mask = 1
    FakePass = &quot;&quot;
    While Mask &amp;lt;= Value
        If (Value And Mask) = 0 Then
            FakePass = &quot;A&quot; &amp;amp; FakePass
        Else
            FakePass = &quot;B&quot; &amp;amp; FakePass
        End If
        Mask = Mask * 2
    Wend
    If Len(FakePass) &amp;gt; 0 Then: FakePass = Right(FakePass, Len(FakePass) - 1)
End Function
&#39;Установка меню
Sub Install()
    Uninstall True
    AddButton MENUNAME, &quot;Снять защиту&quot;, &quot;BruteForceUnprotect&quot;
    AddButton MENUNAME, &quot;Удалить меню надстройки&quot;, &quot;Uninstall&quot;
End Sub
&#39;Удаление меню надстройки
Sub Uninstall(Optional silent = False)
    If Not silent Then
        If MsgBox(&quot;Вы действительно желаете удалить меню надстройки ?&quot;, vbYesNo) = vbNo Then
            Exit Sub
        End If
    End If
    On Error Resume Next
    Application.CommandBars(&quot;Worksheet Menu Bar&quot;).Controls(MENUNAME).Delete
    On Error GoTo 0
End Sub
&#39;Добавить пункт в меню
Sub AddButton(menu As String, submenu As String, macro As String, Optional descr As String = &quot;&quot;)
    On Error GoTo createmenu
    If IsNull(Application.CommandBars(&quot;Worksheet Menu Bar&quot;).Controls(menu)) Then: GoTo createmenu
    On Error GoTo create
    If IsNull(Application.CommandBars(&quot;Worksheet Menu Bar&quot;).Controls(menu).Controls(submenu)) Then: GoTo create
    End
createmenu:
    Set mnu = Application.CommandBars(&quot;Worksheet Menu Bar&quot;).Controls.Add(Type:=10)
    mnu.Caption = &quot;&amp;amp;&quot; &amp;amp; menu
    mnu.Visible = True
    
create:
    Set Button = Application.CommandBars(&quot;Worksheet Menu Bar&quot;).Controls(menu).Controls.Add(Type:=1, ID:=2950)
    With Button
        .DescriptionText = descr
        .TooltipText = descr
        .Caption = &quot;&amp;amp;&quot; &amp;amp; submenu
        .Style = 3
        .OnAction = macro
    End With
End Sub
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://procod.blogspot.com/feeds/6722446573840944348/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://procod.blogspot.com/2010/01/excel.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/6722446573840944348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/6722446573840944348'/><link rel='alternate' type='text/html' href='http://procod.blogspot.com/2010/01/excel.html' title='Взлом пароля Excel. Макрос VBA, на основе Excel'/><author><name>xedoc</name><uri>http://www.blogger.com/profile/04461259729025237418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8992986296774627107.post-3047840416274887476</id><published>2010-01-20T13:22:00.001+02:00</published><updated>2010-01-20T13:23:40.008+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="word пароль взлом"/><title type='text'>Взлом пароля в Word.</title><content type='html'>Взломать пароль на чтение документа MS Word можно используя сам Word. Никаких дополнительных утилит для этого не требуется&lt;br /&gt;
&lt;br /&gt;
Проделайте следующее:&lt;br /&gt;
1. Откройте документ.&lt;br /&gt;
2. Нажмите Alt+Shift+F11. Откроется Microsoft Script Editor.&lt;br /&gt;
3. Нажмите Ctrl+F и наберите &quot;pass&quot; (без кавычек) в поле Find what.&lt;br /&gt;
&lt;table style=&quot;width: auto;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://picasaweb.google.com/lh/photo/etXav9tNwwHoSuWlHgN8Nw?feat=embedwebsite&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj_iK8WpvpC6RBcHj0pPyo_PyDTcPKjDsoUl0MstuaFgWhUeTlqThfPXNRIwU-WNXoMq8YFLd9LyVT6e9hBP8Dp3_PoppAXtwz4KOa1oDJnzRLD2Thn0WrkO6_5FMpnChanu1MPEcL6GE/s288/Find%20Word%20password.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;4. Нажмите Find Next. Поиск подсветит строку вида: &amp;lt;w:UnprotectPassword&amp;gt;1234F8E7&amp;lt;/w:UnprotectPassword&amp;gt;&lt;br /&gt;
&lt;table style=&quot;width: auto;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://picasaweb.google.com/lh/photo/EsjVb4EEDOEjiDPaUfaVmA?feat=embedwebsite&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPNSlc6g9xbaTlrSDnjIHxaTrLzjk9_yHFjo286E8QEbAT7PNy1hDNXgs_ONkvrWM4RupV9LuOYs1pA55MiV36rJPxPVRgQ0TH3JS5qZshfeniodx5TJxfzmzlOZEb-KRhXal5lw2GvxM/s288/Word%20script%20editor%20password.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;5. Выделите всю строку и удалите ее&lt;br /&gt;
6. Нажмите Ctrl+S чтобы сохранить документ&lt;br /&gt;
7. Закройте окно Microsoft Script Editor&lt;br /&gt;
8. Выберите Сервис-&gt;Снять защиту. Защита на чтение будет снята, после чего можно вносить изменения.</content><link rel='replies' type='application/atom+xml' href='http://procod.blogspot.com/feeds/3047840416274887476/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://procod.blogspot.com/2010/01/word.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/3047840416274887476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/3047840416274887476'/><link rel='alternate' type='text/html' href='http://procod.blogspot.com/2010/01/word.html' title='Взлом пароля в Word.'/><author><name>xedoc</name><uri>http://www.blogger.com/profile/04461259729025237418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj_iK8WpvpC6RBcHj0pPyo_PyDTcPKjDsoUl0MstuaFgWhUeTlqThfPXNRIwU-WNXoMq8YFLd9LyVT6e9hBP8Dp3_PoppAXtwz4KOa1oDJnzRLD2Thn0WrkO6_5FMpnChanu1MPEcL6GE/s72-c/Find%20Word%20password.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8992986296774627107.post-8256779032891314566</id><published>2010-01-19T08:44:00.000+02:00</published><updated>2010-01-19T08:47:54.780+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="excel vba примеры"/><title type='text'>Последняя ячейка в диапазоне.</title><content type='html'>В канонических учебниках по VBA, для Excel можно встретить пример получения последней ячейки вида:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;vb&quot; name=&quot;code&quot;&gt;Set LastCell = ActiveSheet.SpecialCells(xlLastCell)
&lt;/pre&gt;&lt;br /&gt;
В целом здесь все правильно, за исключением одного момента. Иногда, после вставки и очистки данных в конце листа, последняя ячейка оказывается пустой.&lt;br /&gt;
Тогда как на практике гораздо важнее получить последнюю ячейку в заполненном диапазоне. Используя свойство UsedRange это легко сделать.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;pre class=&quot;vb&quot; name=&quot;code&quot;&gt;Set LastCell = ActiveSheet.UsedRange.SpecialCells(xlLastCell)
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://procod.blogspot.com/feeds/8256779032891314566/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://procod.blogspot.com/2010/01/blog-post.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/8256779032891314566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/8256779032891314566'/><link rel='alternate' type='text/html' href='http://procod.blogspot.com/2010/01/blog-post.html' title='Последняя ячейка в диапазоне.'/><author><name>xedoc</name><uri>http://www.blogger.com/profile/04461259729025237418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8992986296774627107.post-1365723860235619974</id><published>2010-01-18T09:34:00.002+02:00</published><updated>2010-01-20T12:47:22.360+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="vba excel примеры"/><title type='text'>VBA. Чтение и запись в Excel. Оптимизация.</title><content type='html'>&lt;span style=&quot;font-weight: bold;&quot;&gt;1. Оптимизация с помощью Range.Resize()&lt;/span&gt;&lt;br /&gt;
Впервые столкнувшись с задачей программно прочитать содержимое ячеек Excel, многие используют самый очевидный способ: цикл чтений Cells(row,column).value.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;pre class=&quot;vb&quot; name=&quot;code&quot;&gt;For i = 1 To 10
  destination.Cells(i,1).value = source.Cells(i,1).value 
Next
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Не трудно заметить, что в данном примере было произведено 10 чтений.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Для ускорения чтения и записи данных из Excel, через VBA, всегда используйте метод класса Range: Resize().&lt;/span&gt; Метод Resize() позволяет прочитать указанный диапазон ячеек в массив, для последующей обработки.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;pre class=&quot;vb&quot; name=&quot;code&quot;&gt;arSales = Array()
arSales = source.Cells.Resize(10,1)
&lt;/pre&gt;&lt;br /&gt;
В данном примере, в массив arSales помещаются 10 строк и один столбец с листа source. По сравнению с чтением в цикле, данный метод работает в разы быстрее, поскольку чтение происходит за один этап. Таким-же образом данные помещаются в место назначения.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;pre class=&quot;vb&quot; name=&quot;code&quot;&gt;destination.Cells.Resize(10,1) = arSales
&lt;/pre&gt;&lt;br /&gt;
Если имеется заданная переменная класса Range, то для получения массива можно просто использовать свойство Range.Value&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;pre class=&quot;vb&quot; name=&quot;code&quot;&gt;Set rng = Range(&quot;DATA&quot;)
arSales = rng.Value
&lt;/pre&gt;&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;2. Отключение вычислений на время записи данных.&lt;/span&gt;&lt;br /&gt;
При каждой записи ячейки Excel из кода VBA, программа автоматически пересчитывает все формулы в книге. Это вызывает серьезное замедление.&lt;br /&gt;
Для ускорения записи имеет смысл отключить автоматические вычисления  и обновление экрана.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;pre class=&quot;vb&quot; name=&quot;code&quot;&gt;Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
После произведения необходимых действий в VBA, можно вернуть настройки.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;vb&quot; name=&quot;code&quot;&gt;Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
&lt;/pre&gt;&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;3. Использование условного форматирования.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Иногда необходимо заполнить и форматировать(раскрасить) таблицу Excel, используя VBA. Для решения этой задачи есть два способа.&lt;br /&gt;
Первый, &quot;в лоб&quot;: форматировать каждую ячейку или диапазон ячеек в цикле непосредственно из программы. У этого способа два недостатка: скорость и неудобство форматирования.&lt;br /&gt;
&lt;br /&gt;
Второй, оптимизированный способ: задать условное форматирование для заполняемого диапазона. Например, в условном форматировании можно проверять одно или несколько значений в заполняемой строке и если оно не пустое, форматировать всю строку. Таким образом при вставке значений в новую строку, из VBA, формат (цвет, шрифт) будет меняться автоматически, вне кода.  Этот способ оптимален по скорости и удобен тем, что форматирование производится визуально.&lt;br /&gt;
&lt;br /&gt;
Для реализации этого метода можно создать xls-файл, с заголовком и одной строкой, с заданным условным форматированием. Формат этой строки необходимо скопировать в строки, которые будут заполнятся. Поскольку задать формат одновременно для большого кол-ва ячеек нельзя, то делать это придется блоками.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;pre class=&quot;vb&quot; name=&quot;code&quot;&gt;rowscount = 20000 &#39; Кол-во форматируемых строк
colscount= 5 &#39; Кол-во форматируемых столбцов
onepass = 1024 &#39; Кол-во строк форматируемых за один проход
src_row = 1 &#39; Номер строки с заданным условным форматированием
For i = src_row+1 To rowscount Step onepass
  Rows(src_row).Resize(1, colscount).Copy
  If i + onepass &amp;gt; rowscount Then: onepass = rowscount - i
  Rows(i).Resize(onepass, colscount).PasteSpecial _ 
    Paste:=xlPasteFormats, _
    Operation:=xlNone, _
    SkipBlanks:=False, _ 
    Transpose:=False
Next
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Теперь можно вставлять значения. Настройки цвета и шрифта будут применяться автоматически.</content><link rel='replies' type='application/atom+xml' href='http://procod.blogspot.com/feeds/1365723860235619974/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://procod.blogspot.com/2010/01/vba-excel.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/1365723860235619974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8992986296774627107/posts/default/1365723860235619974'/><link rel='alternate' type='text/html' href='http://procod.blogspot.com/2010/01/vba-excel.html' title='VBA. Чтение и запись в Excel. Оптимизация.'/><author><name>xedoc</name><uri>http://www.blogger.com/profile/04461259729025237418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry></feed>