using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication9
{
public partial class Form1 : Form
{
/// <summary>
/// Получает текущее положение ползунка полосы прокрутки.
/// </summary>
/// <param name="hWnd">Дескриптор.</param>
/// <param name="nBar">Тип.</param>
/// <returns></returns>
[DllImport("User32.dll")]
public extern static int GetScrollPos(IntPtr hWnd, int nBar);
/// <summary>
/// Функция для отправки сообщений.
/// </summary>
/// <param name="hWnd">Дескриптор.</param>
/// <param name="msg">Само сообщение.</param>
/// <param name="wParam">Параметры.</param>
/// <param name="lParam">Дополнительные параметры.</param>
[DllImport("User32.dll")]
public extern static int SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
public enum ScrollBarType : uint
{
SbHorz = 0,
SbVert = 1,
SbCtl = 2,
SbBoth = 3
}
public enum Message : uint
{
/// <summary>
/// Сообщение для вертикальной полосы прокрутки
/// </summary>
WM_VSCROLL = 0x0115
}
public enum ScrollBarCommands : uint
{
/// <summary>
/// Положение ползунка полосы прокрутки в конце операции
/// </summary>
SB_THUMBPOSITION = 4
}
private RichTextBox rich1 = new RichTextBox();
private RichTextBox rich2 = new RichTextBox();
public Form1()
{
InitializeComponent();
// тестовый текст
string text = "";
for (int i = 0; i < 99; i++)
{
text += "Имеется 2 richTextBox, нужно установить значение текущего вертикального скролла первого, как у в данный момент у второго. Пробовал всякие offset, копался в гугле, но ничего внятного не нашел.\r\n";
}
// добавляем поля на форму
rich1.Name = "rich1";
rich1.Dock = DockStyle.Top;
rich1.Text = text;
rich1.VScroll += rich_VScroll;
this.Controls.Add(rich1);
rich2.Name = "rich2";
rich2.Dock = DockStyle.Top;
rich2.Text = text;
rich2.VScroll += rich_VScroll;
this.Controls.Add(rich2);
}
/// <summary>
/// Обработчик изменения положения ползунка полосы прокрутки.
/// </summary>
private void rich_VScroll(object sender, EventArgs e)
{
// кто вызвал событие
RichTextBox currentRich = (RichTextBox)sender;
// если событие вызвал rich2, то второй будет rich1 и наоборот
RichTextBox otherRich = currentRich.Name.Equals("rich1") ? rich2 : rich1;
// получаем позицию ползунка полосы прокрутки текущего поля
int pos = GetScrollPos(currentRich.Handle, (int)ScrollBarType.SbVert);
pos <<= 16;
// чтобы не застрять в бесконечности
// (можно так не делать и прикрутить обработчик только к одному полю)
otherRich.VScroll -= rich_VScroll;
// --
// передаем позицию во второе поле
uint par = (uint)ScrollBarCommands.SB_THUMBPOSITION | (uint)pos;
SendMessage(otherRich.Handle, (int)Message.WM_VSCROLL, new IntPtr(par), new IntPtr(0));
otherRich.VScroll += rich_VScroll;
}
}
}
https://ajax.googleapis.com/ajax/services/search/images?v=1.0&imgsz=medium&q=Кот
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if ((e.KeyCode == Keys.V) && (e.Modifiers == Keys.Control))
{
Clipboard.Clear();
this.textBox1.Text =Clipboard.GetText();
}
}
[DllImport("user32.dll", SetLastError = true)]
private static extern void keybd_event( byte bVk, byte bScan, uint dwFlags, int dwExtraInfo );
private static void SendCtrlhotKey( char key ) {
keybd_event( 0x11, 0, 0, 0);
keybd_event( (byte)key, 0, 0, 0);
keybd_event( (byte)key, 0, 0x2, 0);
keybd_event( 0x11, 0, 0x2, 0);
}
// использовать вот так
SendCtrlhotKey( 'C' );
// использовать или так
SendCtrlhotKey( 'V' );
// использовать или так
SendCtrlhotKey( 'A' );
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace ConsoleApplication13
{
class Program
{
[DllImportAttribute("User32.dll")]
private static extern int FindWindow(String ClassName, String WindowName);
[DllImportAttribute("User32.dll")]
private static extern IntPtr SetForegroundWindow(int hWnd);
static void Main(string[] args)
{
int hWnd = FindWindow(null, "Калькулятор");
Console.WriteLine(hWnd);
if (hWnd > 0)
{
Console.WriteLine("К счастью, окно найдено...");
SetForegroundWindow(hWnd);
}
else
{
Console.WriteLine("Окно не найдено!");
}
Console.ReadKey();
}
}
}
static void Main(string[] args)
{
foreach (var p in Process.GetProcessesByName("calc"))
{
SetForegroundWindow(p.MainWindowHandle.ToInt32());
}
Console.ReadKey();
}
[Serializable]
public class MyClass
{
}
// данные, которые будем сериализовать
var data = new List<int> { 1, 2, 3 };
// выполняем сериализацию
// в MemoryStream (можно в любой Stream)
var bf = new BinaryFormatter();
var m = new MemoryStream();
bf.Serialize(m, data);
// курсор потока переводим в начало, т.к. мы работали с потоком выше
// если открывать новый поток, то это делать не обязательно
m.Position = 0;
// выполняем десериализацию данных из MemoryStream
var result = (List<int>)bf.Deserialize(m);
// выводим результат в консоль
result.ForEach(itm => Console.WriteLine(itm));
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
if (info == null)
{
throw new ArgumentNullException("info");
}
info.AddValue("Ключ", "Значение");
info.AddValue("Ключ2", this.ИмяСвойства);
// и т.д.
}
// конструктор
protected ИмяКласса(SerializationInfo info, StreamingContext context)
{
if (info == null)
{
throw new ArgumentNullException("info");
}
this.Свойство = info.GetValue("Ключ", typeof(типДанных));
this.ИмяСвойства = (string)info.GetValue("Ключ2", typeof(string));
// и т.д.
}
[Serializable]
public class MyDictionary : Dictionary<string, object>, ISerializable
{
public MyDictionary() { }
protected MyDictionary(SerializationInfo info, StreamingContext context)
{
if (info == null)
{
throw new ArgumentNullException("info");
}
int count = info.GetInt32("Count"); // получаем число элементов
for (int i = 0; i < count; i++) // перебираем элементы
{
// получаем ключ и значение по индексу элемента
string key = info.GetString(String.Format("ItemKey{0}", i));
object value = info.GetValue(String.Format("ItemValue{0}", i), typeof(object));
// добавляем элемент в себя
this.Add(key, value);
}
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
if (info == null)
{
throw new ArgumentNullException("info");
}
// перебираем все элементы коллекции
int i = 0;
foreach (KeyValuePair<string, object> item in this)
{
// добавляем отдельно ключ и значение
info.AddValue(String.Format("ItemKey{0}", i), item.Key, typeof(string));
info.AddValue(String.Format("ItemValue{0}", i), item.Value);
i++;
}
// запоминаем, сколько всего элементов
info.AddValue("Count", this.Count);
}
}
// выполняем сериализацию коллекции
var data = new MyDictionary();
data.Add("Key", "Value");
data.Add("Key2", "Value2");
data.Add("Key3", 123);
var bf = new BinaryFormatter();
var m = new MemoryStream();
bf.Serialize(m, data);
// выполняем десериализацию
m.Position = 0;
var result = (MyDictionary)bf.Deserialize(m);
// выводим результат
foreach (var item in result)
{
Console.WriteLine("{0} = {1}", item.Key, item.Value);
}