Archive for the Category: ' Windows '

На работе частенько стали отключать электричество в ночное время, чтобы приехать с утра пораньше и включить сервера, нужно было придумать оповещение. На работе завалялся GSM модем Teltonika TMK-10x, поэтому решил что самый удобный способ оповещения это SMS сообщение.

1. Первое что нужно написать приложение которое будет отсылать AT команды на COM порт, к которому подключен модем. Приложение должно принимать два параметра первый номер телефона, второй сообщение.

Вот исходный код, или можете скачать скомпилированное приложение  SendSMS.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
using System;
using System.IO.Ports;
using System.Text;
using System.Threading;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string phoneNo = args[2];
string message = args[3];
int speed = int.Parse(args[1]);
string port_name = args[0];
SerialPort port = OpenPort(port_name, speed, 8, 1000, 3000);

try
{
ExecCommand(port, "AT", 300, "No phone connected");
ExecCommand(port, "AT+CMGF=1", 300, "Failed to set message format.");
string command = "AT+CMGS=\"" + phoneNo + "\"";
ExecCommand(port, command, 300, "Failed to accept phoneNo");
command = message + char.ConvertFromUtf32(26) + "\r";
ExecCommand(port, command, 3000, "Failed to send message");

}
catch (Exception ex)
{
throw ex;
}

ClosePort(port);
}

//Open Port
public static SerialPort OpenPort(string portName, int baudRate, int dataBits, int readTimeout, int writeTimeout)
{
ReceiveNow = new AutoResetEvent(false);
SerialPort port = new SerialPort();

try
{
port.PortName = portName; //COM1
port.BaudRate = baudRate; //9600
port.DataBits = dataBits; //8
port.StopBits = StopBits.One; //1
port.Parity = Parity.None; //None
port.ReadTimeout = readTimeout; //300
port.WriteTimeout = writeTimeout; //300
port.Encoding = Encoding.GetEncoding("iso-8859-1");
port.DataReceived += PortDataReceived;
port.Open();
port.DtrEnable = true;
port.RtsEnable = true;
}
catch (Exception ex)
{
throw ex;
}
return port;
}

//Close Port
public static void ClosePort(SerialPort port)
{
try
{
port.Close();
port.DataReceived -= PortDataReceived;
}
catch (Exception ex)
{
throw ex;
}
}

public static string ExecCommand(SerialPort port, string command, int responseTimeout, string errorMessage)
{
try
{
port.DiscardOutBuffer();
port.DiscardInBuffer();
ReceiveNow.Reset();
port.Write(command + "\r");

string input = ReadResponse(port, responseTimeout);
if ((input.Length == 0) || ((!input.EndsWith("\r\n> ")) && (!input.EndsWith("\r\nOK\r\n"))))
throw new ApplicationException("No success message was received.");
return input;
}
catch (Exception ex)
{
throw ex;
}
}

public static AutoResetEvent ReceiveNow;

//Receive data from port
public static void PortDataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
if (e.EventType == SerialData.Chars)
{
ReceiveNow.Set();
}
}
catch (Exception ex)
{
throw ex;
}
}

public static string ReadResponse(SerialPort port, int timeout)
{
int tryNo = 0;

string buffer = string.Empty;
do
{
tryNo++;

if (ReceiveNow.WaitOne(timeout, false))
{
string t = port.ReadExisting();
buffer += t;
}

}
while (!buffer.EndsWith("\r\nOK\r\n") && !buffer.EndsWith("\r\n> ") && !buffer.EndsWith("\r\nERROR\r\n") && tryNo < 10);
return buffer;
}
}
}

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

1
2
3
4
5
:begin
ping -n 1 192.168.3.69 || Goto else
exit
:else
C:\SMS\SendSMS.exe COM1 9600 89********* "sveta_net"

Сохраняем код в файле с расширением bat.

3. Создаем назначенное задание, я сделал выполнение под отдельным пользователем, чтобы не было заметно. Периодичность 5 минут.

Статья написана автором Галиев Руслан

Включаем ip routing в Windows XP/2003

В Windows XP и Windows Server 2003 по умолчанию выключена маршрутизация TCP/IP пакетов. Включается она следующим образом:

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

1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

Параметру IPEnableRouter задаем значение 1

Перезагружаем компьютер.

Статья написана автором Галиев Руслан

Снимаем защиту с Word документа

Пакеты Microsoft Word 2002(XP)/2003 содержат ошибку позволяющую снять защиту с документа, защищенного паролем. Следующая последовательность действий демонстрирует ошибку:
1.) Откройте документ в Word’е.
2.) Сохраните документ как Web-страницу и закройте
3.) Откройте HTML документ в Notepad’е.
4.) Выполните “поиск по” тэга <w:UnprotectPassword> и найдите строку, которая должна выглядеть примерно так: <w:nprotectPassword>ABCDEF01</w:UnprotectPassword>.
Сохраните значение пароля.
5.) Откройте оригинальный документ в каком-нибудь шестнадцатеричном редакторе.
6.) Найдите значение пароля и перезапишите его четырьмя 0x00.
7.) Снова откройте документ в Word’е и снимите защиту использовав пустой пароль.

Вариант второй:

1. Сохраните документ с формой в новом формате .docx (родной формат 2007 офиса)
2. Смените расширение на .zip
3. залезьте в архив, извлеките файл settings.xml
4. С помощью текстового редактора найдите и удалите тег <w:documentProtection … />
5. Запакуйте settings.xml обратно в zip
6. Переименуйте .zip обратно в .docx
7. Откройте .docx в ворде. Защиты нет.

Статья написана автором Галиев Руслан

Excel заполнение пустых ячеек

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

Далее »

Статья написана автором Галиев Руслан

Объединение dbf-файлов

Простой java-скрипт для объединения нескольких DBF-файлов с одинаковой структурой в один UNIDBF
Запускаем из командной строки

1
cscript //nologo unidbf.js C:\DBF C:\DBF\all.dbf

При этом объединяются не индексированные, без MEMO-полей DBASE-II,III,IV файлы одинаковой структуры файлы из папки C:\DBF в файл C:\DBF\all.dbf За образец принимается первый, в порядке создания, dbf из исходной папки.
Возврат:
0 – успех;
1 – объединены не все файлы;
2 – файл назначения не создан.

Статья написана автором Галиев Руслан

Вирус internet.com

Проблема была со всеми браузерами
IE делал редирект(переадресацию) на сайт internet.com
Chrome вообще отказывался открывать страницы
Firefox открывал вместо страниц их исходный код

Вирус прописывает в раздел реестра

1
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows

Ключ AppInit_DLLs со значением типо «C:\Windows\system32\nrnpcdh.dll» после удаления ключа, перезагрузки компьютера и удаления самой dll-ки всё встало на круги своя.

Для того чтобы очистить список недавно открытых файлов в 1С 7.7 необходимо сделать следующее:
Пуск>Выполнить

1
reg delete "HKCU\Software\1C\1Cv7\7.7\<ИД_Вашей_Базы>\Config\Recent File List" /f

Проблема заключалась в том, что при нажатии на кнопку междустрочного интервала на панели инструментов, MS Word выдавал ошибку «Неверна задана единица измерения».

на просторах интернета была найдена WWINTL, которая решает эту проблему. Библиотеку необходимо расположить в директории

1
 С:\Program Files\Microsoft Office\Office12\1049

Проблема заключалась в медленном открытии сетевых ресурсов в доменной сети. Причём наблюдалась только там где контроллером выступал сервер с операционной системой Windows Server 2003, в сети с Windows Server 2008 и семёрка и Vista работали нормально.
Решение:
1. Вводим в командной строке две команды:

1
2
netsh interface tcp set global autotuninglevel=disabled
netsh interface tcp set global rss=disabled

2. Если не помог первый шаг, разрешаем все входящие соединения в свойствах брендмауэра Windows
3. В центре управления сетями и общим доступом настраиваем дополнительные параметры общего доступа для всех профилей включаем общий доступ к файлам и принтерам и сетевое обнаружение.

Статья написана автором Галиев Руслан

Создание драйвера для ATI Radeon

Столкнулся с проблемой по поиску нужного драйвера для ATI Mobility Radeon HD 4650 для ноутбука Sony VAIO VGN-FW480J , после долгих поисках на сайтах производителя ноутбука и AMD, форумах и т.д. была найдена программ, которая модифицирует стандартный драйвер Catalyst, под установленную видеокарту. Достаточно установить программу,  скормить ей стандартные дрова с сайта AMD. После модификации можно обновить драйвер на видеокарте. Программу можно скачать тут