Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/166: Рейтинг темы: голосов - 166, средняя оценка - 4.73
Заблокирован

Отлов нажатия клавиш вне своей формы

10.02.2013, 10:38. Показов 31231. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Вопрос, как можно отловить нажатия клавиш или комбинации клавиш все своей формы, к примеру ALT + S + C подскажите пожалуйста.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.02.2013, 10:38
Ответы с готовыми решениями:

Отлов горячих клавиш вне формы
Хочу сделать горячие клавиши при не активной форме, знаю надо использовать winAPI функции, но нигде нормального ничего не нашел по данному...

Отлов нажатия клавиш в пределах приложения
Клавиши должны перехватываться не глобально, а в пределах приложения с несколькими формами... Подскажите на c# или c++/cli

Отлов нажатия клавиш мышки и клавиатуры через API
Здраствуйте Как через API Windows в C# можно отловить нажатия определенной клавиши мышки или комбинацию клавишь с клавиатуры. Заранее...

10
62 / 62 / 5
Регистрация: 05.01.2013
Сообщений: 235
10.02.2013, 12:40
C#
1
2
3
4
5
[DllImport("user32.dll")]
static extern short GetAsyncKeyState(int keys);
 
if(GetAsyncKeyState(12)!=0 && GetAsyncKeyState(53)!=0 && GetAsyncKeyState(43)!=0)
MessageBox.Show("клавиши нажаты")
как то так. http://vsokovikov.narod.ru/New... ystate.htm
1
Заблокирован
10.02.2013, 13:26  [ТС]
Мне бы по таймеру отловить, ставлю значение таймера, все равно молчит, Timer работает, Enabled = True! В чем проблема?
0
62 / 62 / 5
Регистрация: 05.01.2013
Сообщений: 235
10.02.2013, 15:31
проверил у себя - работает.
Миниатюры
Отлов нажатия клавиш вне своей формы  
1
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
10.02.2013, 18:32
Что будет нагружать систему меньше - таймер или глобальный хук?

Нечто вроде такого (комментарии и критика приветствуются):
C#
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
using System;
//using System.Collections.Generic;
//using System.Linq;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;
//using System.Text;
 
namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        private const int WH_KEYBOARD_LL = 13;
        //private const int WM_KEYDOWN = 0x0100;
        //private const int WM_SYSKEYDOWN = 0x0104;
        private const int WM_KEYUP = 0x0101;
        private const int WM_SYSKEYUP = 0x0105;
 
        private const int VK_SHIFT = 0x10;
        private const int VK_CONTROL = 0x11;
        private const int VK_MENU = 0x12; // ALT
        private const int VK_CAPITAL = 0x14; // CAPS LOCK
 
        private static HookHandlerDelegate proc;
        private static IntPtr hookID = IntPtr.Zero;
        internal delegate IntPtr HookHandlerDelegate(
            int nCode, IntPtr wParam, ref KBDLLHOOKSTRUCT lParam);
 
        internal struct KBDLLHOOKSTRUCT
        {
            public int vkCode;
            int scanCode;
            public int flags;
            int time;
            int dwExtraInfo;
        }
 
        [STAThread]
 
        static void Main()
        {
            hookID = KeyboardHook();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
            api.UnhookWindowsHookEx(hookID);
        }
 
        public static IntPtr KeyboardHook()
        {
            proc = new HookHandlerDelegate(HookCallback);
            using (Process curProcess = Process.GetCurrentProcess())
            using (ProcessModule curModule = curProcess.MainModule)
            {
                return api.SetWindowsHookEx(WH_KEYBOARD_LL, proc,
                    api.GetModuleHandle(curModule.ModuleName), 0);
            }
        }
 
        private static bool Syskey (int keycode)
        {
            switch (keycode)
            {
                case VK_CAPITAL: //CAPSLOCK is ON
                    return (api.GetKeyState(VK_CAPITAL) & 0x0001) != 0;
 
                case VK_SHIFT: //SHIFT is pressed
                    return (api.GetKeyState(VK_SHIFT) & 0x8000) != 0;
 
                case VK_CONTROL: //CONTROL is pressed
                    return (api.GetKeyState(VK_CONTROL) & 0x8000) != 0;
 
                case VK_MENU: //ALT is pressed
                    return (api.GetKeyState(VK_MENU) & 0x8000) != 0;
 
                default:
                    return (api.GetKeyState(VK_MENU) != 0);
            }
        }
 
        private static IntPtr HookCallback(int nCode, IntPtr wParam, ref KBDLLHOOKSTRUCT lParam)
        {
            if (nCode >= 0)
            {
                if (wParam == (IntPtr)WM_KEYUP || wParam == (IntPtr)WM_SYSKEYUP)
                {
                    if (lParam.vkCode == 83 && Syskey(VK_MENU) && Syskey(67))
                    {
                        MessageBox.Show("123");
                        return (System.IntPtr)1;
                    }
                }
            }
            return api.CallNextHookEx(hookID, nCode, wParam, ref lParam);
        }
 
        internal class api
        {
            #region DLLimport
            [ComVisibleAttribute(false), System.Security.SuppressUnmanagedCodeSecurity()]
 
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            internal static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode,
                IntPtr wParam, ref KBDLLHOOKSTRUCT lParam);
 
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            internal static extern IntPtr SetWindowsHookEx(int idHook, HookHandlerDelegate lpfn, IntPtr hMod, uint dwThreadId);
 
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            [return: MarshalAs(UnmanagedType.Bool)]
            internal static extern bool UnhookWindowsHookEx(IntPtr hhk);
 
            [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            internal static extern IntPtr GetModuleHandle(string lpModuleName);
 
            [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]
            internal static extern short GetKeyState(int keyCode);
            #endregion
        }
    }
}
Как переписать, чтобы программа не подвисала после вывода MessageBox-a?
2
25 / 25 / 10
Регистрация: 27.11.2011
Сообщений: 272
11.02.2013, 18:56
Лучший ответ Сообщение было отмечено aleks_pilipenko как решение

Решение

Вот еще один глобал хук.
Создаем класс:
C#
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
 
namespace Utilities
{
    /// <summary>
    /// A class that manages a global low level keyboard hook
    /// </summary>
    class globalKeyboardHook
    {
        #region Constant, Structure and Delegate Definitions
        /// <summary>
        /// defines the callback type for the hook
        /// </summary>
       // public delegate int keyboardHookProc(int code, int wParam, ref keyboardHookStruct lParam);
 
        public struct keyboardHookStruct
        {
            public int vkCode;
            public int scanCode;
            public int flags;
            public int time;
            public int dwExtraInfo;
        }
 
        const int WH_KEYBOARD_LL = 13;
        const int WM_KEYDOWN = 0x100;
        const int WM_KEYUP = 0x101;
        const int WM_SYSKEYDOWN = 0x104;
        const int WM_SYSKEYUP = 0x105;
        #endregion
 
        #region Instance Variables
        /// <summary>
        /// The collections of keys to watch for
        /// </summary>
        public List<Keys> HookedKeys = new List<Keys>();
        /// <summary>
        /// Handle to the hook, need this to unhook and call the next hook
        /// </summary>
        IntPtr hhook = IntPtr.Zero;
        #endregion
 
        #region Events
        /// <summary>
        /// Occurs when one of the hooked keys is pressed
        /// </summary>
        public event KeyEventHandler KeyDown;
        /// <summary>
        /// Occurs when one of the hooked keys is released
        /// </summary>
        public event KeyEventHandler KeyUp;
        #endregion
 
        #region Constructors and Destructors
        /// <summary>
        /// Initializes a new instance of the <see cref="globalKeyboardHook"/> class and installs the keyboard hook.
        /// </summary>
        public globalKeyboardHook()
        {
            hook();
        }
 
        /// <summary>
        /// Releases unmanaged resources and performs other cleanup operations before the
        /// <see cref="globalKeyboardHook"/> is reclaimed by garbage collection and uninstalls the keyboard hook.
        /// </summary>
        ~globalKeyboardHook()
        {
            unhook();
        }
        #endregion
 
        #region Public Methods
        /// <summary>
        /// Installs the global hook
        /// </summary>
        public void hook()
        {
            
            IntPtr hInstance = LoadLibrary("User32");
            //hhook = SetWindowsHookEx(WH_KEYBOARD_LL, hookProc, hInstance, 0);
            delegateHookProc = hookProc;
            hhook = SetWindowsHookEx(WH_KEYBOARD_LL, delegateHookProc, hInstance, 0);
        }
        public delegate int keyboardHookProc(int code, int wParam, ref keyboardHookStruct lParam);
        keyboardHookProc delegateHookProc;
        /// <summary>
        /// Uninstalls the global hook
        /// </summary>
        public void unhook()
        {
            UnhookWindowsHookEx(hhook);
        }
 
        /// <summary>
        /// The callback for the keyboard hook
        /// </summary>
        /// <param name="code">The hook code, if it isn't >= 0, the function shouldn't do anyting</param>
        /// <param name="wParam">The event type</param>
        /// <param name="lParam">The keyhook event information</param>
        /// <returns></returns>
        public int hookProc(int code, int wParam, ref keyboardHookStruct lParam)
        {
            if (code >= 0)
            {
                Keys key = (Keys)lParam.vkCode;
                if (HookedKeys.Contains(key))
                {
                    KeyEventArgs kea = new KeyEventArgs(key);
                    if ((wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) && (KeyDown != null))
                    {
                        KeyDown(this, kea);
                    }
                    else
                    if ((wParam == WM_KEYUP || wParam == WM_SYSKEYUP) && (KeyUp != null))
                    {
                        KeyUp(this, kea);
                    }
                    if (kea.Handled)
                        return 1;
                }
            }
            return CallNextHookEx(hhook, code, wParam, ref lParam);
        }
        #endregion
 
        #region DLL imports
        /// <summary>
        /// Sets the windows hook, do the desired event, one of hInstance or threadId must be non-null
        /// </summary>
        /// <param name="idHook">The id of the event you want to hook</param>
        /// <param name="callback">The callback.</param>
        /// <param name="hInstance">The handle you want to attach the event to, can be null</param>
        /// <param name="threadId">The thread you want to attach the event to, can be null</param>
        /// <returns>a handle to the desired hook</returns>
        [DllImport("user32.dll")]
        static extern IntPtr SetWindowsHookEx(int idHook, keyboardHookProc callback, IntPtr hInstance, uint threadId);
 
        /// <summary>
        /// Unhooks the windows hook.
        /// </summary>
        /// <param name="hInstance">The hook handle that was returned from SetWindowsHookEx</param>
        /// <returns>True if successful, false otherwise</returns>
        [DllImport("user32.dll")]
        static extern bool UnhookWindowsHookEx(IntPtr hInstance);
 
        /// <summary>
        /// Calls the next hook.
        /// </summary>
        /// <param name="idHook">The hook id</param>
        /// <param name="nCode">The hook code</param>
        /// <param name="wParam">The wparam.</param>
        /// <param name="lParam">The lparam.</param>
        /// <returns></returns>
        [DllImport("user32.dll")]
        static extern int CallNextHookEx(IntPtr idHook, int nCode, int wParam, ref keyboardHookStruct lParam);
 
        /// <summary>
        /// Loads the library.
        /// </summary>
        /// <param name="lpFileName">Name of the library</param>
        /// <returns>A handle to the library</returns>
        [DllImport("kernel32.dll")]
        static extern IntPtr LoadLibrary(string lpFileName);
        #endregion
    }
}
В проекте пишем:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
globalKeyboardHook gkh = new globalKeyboardHook();
private void Form1_Load(object sender, EventArgs e)
        {
            gkh.HookedKeys.Add(Keys.F5);
            gkh.HookedKeys.Add(Keys.F6);
            gkh.HookedKeys.Add(Keys.F7);
            gkh.HookedKeys.Add(Keys.F2);
            gkh.HookedKeys.Add(Keys.F3);
            gkh.KeyUp += new KeyEventHandler(gkh_KeyUp);
        }
void gkh_KeyUp(object sender, KeyEventArgs e)
        {
                if (e.KeyCode == Keys.F5)
                ....
        }
5
Заблокирован
11.02.2013, 20:19  [ТС]
llFreeManll, Спасибо ! Подошло просто идеально !
0
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 26
03.06.2014, 19:11
Добавлено через 44 секунды
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
       
            
        private void Form1_KeyDown_1(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F10)
            {
                System.Diagnostics.Process[] localByName = System.Diagnostics.Process.GetProcesses();
                foreach (System.Diagnostics.Process pr in localByName)
                    if (pr.ProcessName == "name")
                    {
                        pr.Kill();
                        
                    }
            }
        }}
А как сделать отлов для такого кода?.
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
03.06.2014, 19:27
Ice Frog, если брать готовый класс который создали выше то так
C#
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.IO;
using System.Diagnostics;
using System.Runtime.InteropServices;
 
namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        globalKeyboardHook gkh = new globalKeyboardHook();
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            gkh.HookedKeys.Add(Keys.F10);
            gkh.KeyUp += new KeyEventHandler(gkh_KeyUp);
        }
        private void gkh_KeyUp(object sender, KeyEventArgs e)
        {
                if (e.KeyCode == Keys.F10)
                {
                    System.Diagnostics.Process[] localByName = System.Diagnostics.Process.GetProcesses();
                    foreach (System.Diagnostics.Process pr in localByName)
                        if (pr.ProcessName == "name")
                        {
                            pr.Kill();
 
                        }
                }
        }
    }
 
 
    class globalKeyboardHook
    {
 
        public struct keyboardHookStruct
        {
            public int vkCode;
            public int scanCode;
            public int flags;
            public int time;
            public int dwExtraInfo;
        }
 
        const int WH_KEYBOARD_LL = 13;
        const int WM_KEYDOWN = 0x100;
        const int WM_KEYUP = 0x101;
        const int WM_SYSKEYDOWN = 0x104;
        const int WM_SYSKEYUP = 0x105;
        public List<Keys> HookedKeys = new List<Keys>();
        IntPtr hhook = IntPtr.Zero;
        public event KeyEventHandler KeyDown;
        public event KeyEventHandler KeyUp;
 
        public globalKeyboardHook()
        {
            hook();
        }
 
        ~globalKeyboardHook()
        {
            unhook();
        }
 
        public void hook()
        {
 
            IntPtr hInstance = LoadLibrary("User32");
            //hhook = SetWindowsHookEx(WH_KEYBOARD_LL, hookProc, hInstance, 0);
            delegateHookProc = hookProc;
            hhook = SetWindowsHookEx(WH_KEYBOARD_LL, delegateHookProc, hInstance, 0);
        }
        public delegate int keyboardHookProc(int code, int wParam, ref keyboardHookStruct lParam);
        keyboardHookProc delegateHookProc;
 
        public void unhook()
        {
            UnhookWindowsHookEx(hhook);
        }
        public int hookProc(int code, int wParam, ref keyboardHookStruct lParam)
        {
            if (code >= 0)
            {
                Keys key = (Keys)lParam.vkCode;
                if (HookedKeys.Contains(key))
                {
                    KeyEventArgs kea = new KeyEventArgs(key);
                    if ((wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) && (KeyDown != null))
                    {
                        KeyDown(this, kea);
                    }
                    else
                        if ((wParam == WM_KEYUP || wParam == WM_SYSKEYUP) && (KeyUp != null))
                        {
                            KeyUp(this, kea);
                        }
                    if (kea.Handled)
                        return 1;
                }
            }
            return CallNextHookEx(hhook, code, wParam, ref lParam);
        }
 
        [DllImport("user32.dll")]
        static extern IntPtr SetWindowsHookEx(int idHook, keyboardHookProc callback, IntPtr hInstance, uint threadId);
 
        [DllImport("user32.dll")]
        static extern bool UnhookWindowsHookEx(IntPtr hInstance);
 
        [DllImport("user32.dll")]
        static extern int CallNextHookEx(IntPtr idHook, int nCode, int wParam, ref keyboardHookStruct lParam);
 
        [DllImport("kernel32.dll")]
        static extern IntPtr LoadLibrary(string lpFileName);
    }
}
1
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 26
03.06.2014, 19:44
Друг) Я тебя просто обожаю)
0
74 / 26 / 19
Регистрация: 13.10.2014
Сообщений: 89
18.11.2014, 23:48
и да не стать мне некрофилом, однако...
Win7, x64. После LoadLibrary GetLastError возвращает 5, что означает
ERROR_ACCESS_DENIED
5 (0x5)
Access is denied.
(смотрел на http://msdn.microsoft.com/en-u... s.85).aspx)
Лады, компилирую, запускаю .exe с правами администратора... вижу в выводе (для тестов использую консольное приложение, может в этом фишка, объясните пожалуйста), что теперь GetLastError возвращает 2, что значит
ERROR_FILE_NOT_FOUND
2 (0x2)
The system cannot find the file specified.
И тут я перестал понимать что-либо, ведь импорт функций из user32.dll работает, как файл может быть не найден?в общем, поясните, почему вышла такая ситуация

Код
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
static globalKeyboardHook hooker = new globalKeyboardHook();
        static void Main(string[] args)
        {
            hooker.HookedKeys.Add(Keys.Space);
            hooker.KeyUp += hooker_KeyUp;
            Console.ReadLine();
        }
 
        static void hooker_KeyUp(object sender, KeyEventArgs e)
        {
            Console.WriteLine(e.KeyData);
        }


Добавлено через 30 минут
В дополнение хочу отметить свою лень перед написанием предыдущего поста. на WinForms все работает)
Теперь хочется выяснить, почему же на ConsoleApp не работает...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.11.2014, 23:48
Помогаю со студенческими работами здесь

Не работает отлов нажатия клавиш даже с KeyPrewiev в true
KeyPrewiev стоит true все равно не работает. Я короче сразу пишу в textBox1 пишу например yandex.ru, нажал и он должен заходить, а тут он...

Отлов нажатия клавиш в пользовательском приложении "Калькулятор"
как в калькуляторе подключить ввод с клавиатуры? нужно, чтобы после ввода числа в textBox, при нажатии /*-+ поле textBox обновлялось для...

Отлов нажатия клавиш в пределах своей формы
Добрый день, никак не могу найти свойство, где посмотреть нажата ли в данный момент определенная клавиша на клавиатуре. у меня...

Отлов нажатия мыши в пределах формы на любом элементе в форме
Как это осуществить? кроме как тупо отлавливать вообще все нажатия мыши(и вне формы тоже) или каждый элемент в форме подписывать к одному...

Эмулирование нажатия кнопки на клавиатуре вне формы
В общем, мне нужно, чтобы программа зажимала кнопку вперед в игре (и при этом не отпускала). Хотел сделать так, но не вышло private...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru