β‘ Π£Π±ΠΈΡΡ β Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ;
β‘ Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ β Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± Π°Π²ΡΠΎΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ;
β‘ ΠΠΎΡΠΎΠ²ΠΎ β Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ½Π΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅Π½Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° ΡΠΈΡ. 7.6.
Π ΠΈΡ. 7.6. ΠΠΎΠΌΠ°Π½Π΄Ρ ΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ
ΠΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΡΠΈ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΎΡΠΌΡ MainForm ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ fillTaskList, ΠΊΠΎΠ΄ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 7.24.
ΠΠΈΡΡΠΈΠ½Π³ 7.24private void fillTaskList() {
Cursor.Current = Cursors.WaitCursor;
// ΠΠΎΠ»ΡΡΠΈΠΌ ΡΠΏΠΈΡΠΎΠΊ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
windows = WindowHelper.EnumerateTopWindows();
// ΠΠ°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ListView
ListViewItem lvi;
listView.BeginUpdate();
listView.Items.Clear();
foreach(Window w in windows) {
lvi = new ListViewItem(w.ToString());
listView.Items.Add(lvi);
}
listView.EndUpdate();
if (listView.Items.Count > 0) {
listView.Items[0].Selected = true;
listView.Items[0].Focused = true;
}
Cursor.Current = Cursors.Default;
}
ΠΠ°Π½Π½Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠ»Π°ΡΡ WindowHelper, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ . Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 7.25 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ ΠΌΠ΅ΡΠΎΠ΄Π° EnumerateTopWindows, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡ Π²ΡΠ΅ ΠΎΠΊΠ½Π° Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΠΈΡΡΠΈΠ½Π³ 7.25public static Window[] EnumerateTopWindows() {
ArrayList windowList = new ArrayList();
IntPtr hWnd = IntPtr.Zero;
Window window = null;
// ΠΠΎΠ»ΡΡΠΈΠΌ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ
hWnd = GetActiveWindow();
hWnd = GetWindow(hWnd, GW_HWNDFIRST);
while(hWnd != IntPtr.Zero) {
if (IsWindow(hWnd) && IsWindowVisible(hWnd)) {
IntPtr parentWin = GetParent(hWnd);
if ((parentWin == IntPtr.Zero)) {
int length = GetWindowTextLength(hWnd);
if (length > 0) {
string s = new string('\0', length + 1);
GetWindowText(hWnd, s.length + 1);
s = s.Substring(0, s.IndexOf('\0'));
if (s != "Tray" && s != "Start" && s != "Task Manager") {
window = new Window();
window.Handle = hWnd;
window.Text = s;
windowList.Add(window);
}
}
}
}
hWnd = GetWindow(hWnd, GW_HWNDNEXT);
}
return (Window[])windowList.ToArray(typeof(Window));
}
Π ΡΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Windows API, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΎΡΠΊΡΡΡΡΡ ΠΎΠΊΠΎΠ½. ΠΡΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΠ½Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π² ΡΠΏΠΈΡΠΎΠΊ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠ»ΠΎΠ²ΠΈΡΠΌ. ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΠΎΠΊΠ½Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΎΠΊΠΎΠ½, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΡΠΌΠΈ ΠΈ ΠΈΠΌΠ΅ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ°ΠΌ ΠΠΈΡΠΏΠ΅ΡΡΠ΅Ρ Π·Π°Π΄Π°Ρ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠΏΠ°ΡΡΡ Π² ΡΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ. ΠΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠΊΠ½Π° Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² ΠΌΠ°ΡΡΠΈΠ².
ΠΠΊΡΠΈΠ²Π°ΡΠΈΡ ΠΈ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠ»Ρ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΠΈ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Windows API SetForegroundWindow, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠΊΠ½Π°. ΠΠ»Ρ Π·Π°ΠΊΡΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ SendMessage Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ Π·Π°ΠΊΡΡΡΠΈΡ WM_CLOSE. ΠΠ»Ρ Π·Π°ΠΊΡΡΡΠΈΡ ΡΡΠ°Π·Ρ Π²ΡΠ΅Ρ ΠΎΠΊΠΎΠ½ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Windows API SHCloseApps, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ Π²ΡΠ΅ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΡΠΎΠΌΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ° Π·Π°Π΄Π°Ρ. ΠΠΎΠ΄, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ ΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 7.26.
ΠΠΈΡΡΠΈΠ½Π³ 7.26public static void ActivateWindow(IntPtr hWnd) {
// ΠΠΊΡΠΈΠ²ΠΈΡΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
SetForegroundWindow(hWnd);
}
public static void CloseWindow(IntPtr hWnd) {
// ΠΠ°ΠΊΡΡΠ²Π°Π΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
SendMessage(hWnd, WM_CLOSE, 0, 0);
}
public static void CloseApps() {
// ΠΠ°ΠΊΡΡΠ²Π°Π΅ΠΌ Π²ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
SHCloseApps(int.MaxValue);
}
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
ΠΠ»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΠ΄ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 7.27.
ΠΠΈΡΡΠΈΠ½Π³ 7.27private void fillProcessList() {
Cursor.Current = Cursors.WaitCursor;
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
processes = Process.GetProcesses();
// ΠΠ°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ListView
ListViewItem lvi;
listView.BeginUpdate();
listView.Items.Clear();
foreach (Process p in processes) {
lvi = new ListViewItem(p.ProcessName);
//lvi.SubItems.Add("ID");
listView.Items.Add(lvi);
}
listView.EndUpdate();
if (listView.Items.Count > 0) {
listView.Items[0].Selected = true;
listView.Items[0].Focused = true;
}
Cursor.Current = Cursors.Default;
}
Π‘ΠΏΠΈΡΠΎΠΊ Π°ΠΊΡΠΈΠ²Π½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠ»Π°ΡΡΠ° Process. ΠΡΠ½ΠΎΠ²ΠΎΠΉ ΠΊΠ»Π°ΡΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ GetProcesses, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 7.28.
ΠΠΈΡΡΠΈΠ½Π³ 7.28public static Process[] GetProcesses() {
ArrayList procList = new ArrayList();
IntPtr handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if ((int)handle > 0) {
try {
PROCESSENTRY32 peCurrent;
PROCESSENTRY32 pe32 = new PROCESSENTRY32();
byte[] peBytes = pe32.ToByteArray();
int retval = Process32First(handle, peBytes);
while(retval == 1) {
peCurrent = new PROCESSENTRY32(peBytes);
Process proc =
new Process(new IntPtr((int)peCurrent.PID), peCurrent.Name,
(int)peCurrent.ThreadCount, (int)peCurrent.BaseAddress);
procList.Add(proc);
retval = Process32Next(handle, peBytes);
}
} catch(Exception ex) {
throw new Exception("Exception: " + ex.Message);
}
CloseToolhelp32Snapshot(handle);
return (Process[])procList.ToArray(typeof(Process));
} else {
throw new Exception("Unable to get processes!");
}
}
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ Π΄Π΅ΡΠ°Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅.
ΠΠ°ΠΊΡΡΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°
Π§ΡΠΎΠ±Ρ Π·Π°ΠΊΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ Kill, ΠΊΠΎΠ΄ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 7.29.
ΠΠΈΡΡΠΈΠ½Π³ 7.29public void Kill() {
IntPtr hProcess;
hProcess = OpenProcess(PROCESS_TERMINATE, false, (int) processId);
if (hProcess != (IntPtr) INVALID_HANDLE_VALUE) {
bool bRet;
bRet = TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
}
}
ΠΠ°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ Windows API. Π€ΡΠ½ΠΊΡΠΈΡ OpenProcess ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ TerminateProcess Π΄Π»Ρ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
ΠΠΎΠ΄, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° Π²Π½Π΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ListView, ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ΅Π½ ΠΊΠΎΠ΄Ρ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ. Π’Π΅ΠΏΠ΅ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ° Π·Π°Π΄Π°Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΌΠΎΠΆΠ΅Ρ ΡΠ·Π½Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈΠΌΠΈ.
ΠΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ Π±Π»ΠΎΠΊΠ½ΠΎΡ
ΠΠ΄Π½Π°ΠΆΠ΄Ρ ΠΌΠΎΠΉ Π΄ΡΡΠ³, Π΄Π°Π»Π΅ΠΊΠΈΠΉ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΠΏΡΠΎΡΠΈΠ» ΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΡΠ΅Π½ΡΠΊΠΈΠΉ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Π΄Π»Ρ ΠΊΠ°ΡΠΌΠ°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°. ΠΠ³ΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΡΡΡΠ°ΠΈΠ²Π°Π»ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Word Mobile, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Windows Mobile. ΠΠ°ΠΊΠ°Π·ΡΠΈΠΊ Ρ ΠΎΡΠ΅Π» ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΠ»ΠΎΠΊΠ½ΠΎΡΠ° ΠΈΠ· Windows XP, ΡΠΎ Π΅ΡΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π²ΡΡΠ΅Π·Π°Π½ΠΈΠ΅, Π²ΡΡΠ°Π²ΠΊΡ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ°. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½ Ρ ΠΎΡΠ΅Π» ΠΎΠ±ΠΎΠΉΡΠΈΡΡ Π±Π΅Π· ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ .NET Compact Framework 2.0, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΡΠ°ΡΠ΅Π²ΡΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ Π΅Π³ΠΎ ΠΊΠ°ΡΠΌΠ°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° ΠΎΠ±Π»Π°Π΄Π°Π»Π° ΠΌΠ°Π»ΠΎΠΉ Π΅ΠΌΠΊΠΎΡΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ.
Π ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΈ Π±ΡΠ»Π° Π½Π°ΠΏΠΈΡΠ°Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΠ»ΠΎΠΊΠ½ΠΎΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ Π³Π»Π°Π²Ρ.
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° ΡΠΎΡΡΠΎΡΠ»Π° Π² ΡΠΎΠΌ, ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° .NET Compact Framework 1.0 Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π±ΡΡΠ΅ΡΠΎΠΌ ΠΎΠ±ΠΌΠ΅Π½Π° Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΡΠΈΠ±Π΅Π³Π°ΡΡ ΠΊ Π²ΡΠ·ΠΎΠ²Π°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ Windows API.
ΠΠ°Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ½ΠΎΠ²Ρ Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ Ρ ΠΎΡΠ΅Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΉ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Π΄Π»Ρ .NET Compact Framework 1.0. ΠΠ°Π΄ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π±Ρ Ρ ΡΡΠ°Π» ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ .NET Compact Framework 2.0, ΡΠΎ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Ρ Π·Π°Π΄Π°ΡΠ΅ΠΉ Π±ΡΠ»ΠΎ Π±Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»Π΅Π³ΡΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΡΠΎΡΠ°Ρ Π²Π΅ΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΏΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ.
ΠΠ΅ΡΠ²ΡΠ΅ ΡΠ°Π³ΠΈ
ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° Visual Studio .NET 2005 Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΡΠΈ Π²ΡΠ±ΠΎΡΠ΅ ΡΠΈΠΏΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π°Π΄ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ .NET Compact Framework 1.0. ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½Π° ΡΠΎΡΠΌΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ txtEditor. ΠΠ»Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° Multiline Π½Π°Π΄ΠΎ Π·Π°Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ True, Π° ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ScrollBars ΠΏΠΎΠ»ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Both.
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΎΠ±ΡΡΠ½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π²ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΡΠΎΡΠΌΡ, Π΅Π³ΠΎ Π½ΡΠΆΠ½ΠΎ Π²ΡΡΡΠ½ΡΡ ΡΠ°ΡΡΡΠ½ΡΡΡ Π΄ΠΎ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°. Π£ΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ Ρ ΠΏΠΈΡΠ°Π» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΌΠΎΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡ Π½Π΅ Π±ΡΠ»ΠΎ. ΠΠΎ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π·Π°Π±ΡΠ²Π°ΡΡ, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΠΊΡΠ°Π½Π° Ρ ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ΄ΡΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ. ΠΠΎΡΡΠΎΠΌΡ ΡΡΠΎΠΈΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΠΎΡΠΌΡ.
Π’Π°ΠΊΠΆΠ΅ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π°Π΄ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π² Π½Π΅ΠΌ ΡΠΎΠΊΡΡ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π±ΡΠ» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΡ Form_Load, ΡΡΠΎ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ Π»ΠΈΡΡΠΈΠ½Π³ 7.30.