Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
.NET 4.x

Запуск своей программы при нажатии горячей клавиши в другой

09.01.2017, 12:48. Показов 2128. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем знатокам доброго времени суток!

Допустим, в программе "Блокнот", при нажатии "SHIFT" + "Т" должна выполниться мои программа, а результат выполнения был бы отображен в программе "Блокнот".

В какую сторону копать и возможно ли это вообще?

Спасибо за помощь и понимание.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.01.2017, 12:48
Ответы с готовыми решениями:

Запуск своей программы по нажатию глобальной горячей клавиши
Всем знатокам доброго времени суток! Как сделать, чтобы при нажатии сочетания клавиш "Ctrl+E" в любом месте экрана...

Показать toolTip при нажатии горячей клавиши
Здравствуйте, не могу понять почему ошибка, вот код: .h class item_Ping : public QObject, public QGraphicsEllipseItem { ...

Не отправляется параметр (CommandParameter) при нажатии горячей клавиши
Приведу самый простой пример, взятый из видео урока. <Window x:Class="CommandParameters.MainWindow" ...

29
117 / 110 / 31
Регистрация: 05.04.2014
Сообщений: 224
09.01.2017, 23:13
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Anderis49 Посмотреть сообщение
из программы "Блокнот", посылаются данные на форму
Блокнот их не может послать, потому что комбинации "SHIFT" + "Т" в нем не заложено.
Если это горячие клавиши Вашей программы, которая должна прочитать текст из активного окна блокнота, то нужно эти самые горячие клавиши привязать к Вашей форме и научить ее читать блокнот.
0
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
10.01.2017, 09:26  [ТС]
Цитата Сообщение от Bidgo Посмотреть сообщение
Блокнот их не может послать, потому что комбинации "SHIFT" + "Т" в нем не заложено.
Если это горячие клавиши Вашей программы, которая должна прочитать текст из активного окна блокнота, то нужно эти самые горячие клавиши привязать к Вашей форме и научить ее читать блокнот.
Верно мыслите. Но есть такая функция - SendMessage, но привязать ее к моим задачам ума не хватает.
Вот и прошу помощи у более умных и грамотных, а они - удочку...рыбу...
0
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
10.01.2017, 16:25
Лучший ответ Сообщение было отмечено edward_freedom как решение

Решение

С коленки:
VB.NET
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
Imports System.Runtime.InteropServices
Public Class Form1
 
    Public Const MOD_SHIFT As Integer = &H4
    Public Const WM_HOTKEY As Integer = &H312
    Private Const WM_PASTE = &H302
    Private Const WM_GETTEXT As Integer = &HD
    Declare Auto Function SendMessage Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal msg As Integer,
    ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
 
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
    Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr,
                                     ByVal childAfter As IntPtr,
                                     ByVal lclassName As String,
                                     ByVal windowTitle As String) As IntPtr
 
    End Function
    Declare Auto Function FindWindow Lib "user32.dll" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
 
    <DllImport("User32.dll")>
    Public Shared Function RegisterHotKey(ByVal hwnd As IntPtr,
                        ByVal id As Integer, ByVal fsModifiers As Integer,
                        ByVal vk As Integer) As Integer
    End Function
 
    <DllImport("User32.dll")>
    Public Shared Function UnregisterHotKey(ByVal hwnd As IntPtr,
                        ByVal id As Integer) As Integer
    End Function
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        RegisterHotKey(Me.Handle, 200, MOD_SHIFT, Keys.T)
    End Sub
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        If m.Msg = WM_HOTKEY Then
            Dim id As IntPtr = m.WParam
            Select Case (id.ToString)
                Case "200"
                    Clipboard.SetText("Hello notepad")
                    Dim Hwnd As IntPtr = FindWindow(Nothing, "Безымянный -- Notepad")
                    SendMessage(Hwnd, WM_PASTE, 0, 0)
 
 
            End Select
        End If
        MyBase.WndProc(m)
    End Sub
 
    Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
        UnregisterHotKey(Me.Handle, 200)
    End Sub
End Class
Если и это не поможет - значит не с того ты начал свое обучение.
А вообще ранновато тебе такое, если базовых знаний не хватает.

P.S. FindWindow может не найти по заголовку, значит переименовать заголовок придется сохранив файл в блокноте пустым с каким нибудь именем на латинице

Добавлено через 49 минут
Чуть поправлюсь:
VB.NET
1
2
3
4
5
                Case "200"
                    Clipboard.SetText("Hello notepad")
                    Dim Hwnd As IntPtr = FindWindow(Nothing, "qw — Блокнот")
                    Hwnd = FindWindowEx(Hwnd, Nothing, "Edit", "")
                    SendMessage(Hwnd, WM_PASTE, 0, 0)
А то скажут "Обманула"
4
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
10.01.2017, 21:30  [ТС]
Цитата Сообщение от Hikari Посмотреть сообщение
А то скажут "Обманула"
А почему бы и не сказать?
После запуска вашего кода через F8 процесс "крутиться" здесь
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        If m.Msg = WM_HOTKEY Then
            Dim id As IntPtr = m.WParam
            Select Case (id.ToString)
                Case "200"
                    Clipboard.SetText("Hello notepad")
                    Dim Hwnd As IntPtr = FindWindow(Nothing, "Безымянный -- Notepad")
                    SendMessage(Hwnd, WM_PASTE, 0, 0)
 
 
            End Select
        End If
        MyBase.WndProc(m)
    End Sub
а именно в условии

VB.NET
1
  If m.Msg = WM_HOTKEY
которое не! выполняется.

И вообще, что, по вашему, ваш код должен делать?

Добавлено через 1 час 3 минуты
Нашел таки пример, который мне подходит.
Вот код

VB.NET
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
Imports System.Runtime.InteropServices
 
Public Class Form1
    Const WM_SETTEXT As Integer = &HC
    Const WM_GETTEXT As Integer = &HD
    Const WM_GETTEXTLENGTH As Integer = &HE
 
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, ByVal childAfter As IntPtr, ByVal lclassName As String, ByVal windowTitle As String) As IntPtr
    End Function
 
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As Integer, ByVal lParam As String) As Integer
    End Function
 
    'THIS BUTTON SENDS THE TEXT TO NOTEPAD
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '[
        Dim myProcess As New Process()
        Try
 
            ' Create an instance of process component.
 
            ' Create an instance of 'myProcessStartInfo'.
            Dim myProcessStartInfo As New ProcessStartInfo()
            myProcessStartInfo.FileName = "notepad"
            myProcess.StartInfo = myProcessStartInfo
            ' Start process.
            myProcess.Start()
            ' Allow the process to finish starting.
            myProcess.WaitForInputIdle()
            MsgBox("Main window Title : " & myProcess.MainWindowTitle)
 
            ' myProcess.CloseMainWindow()
            ' myProcess.Close()
        Catch ex As ApplicationException
            '  Console.Write(" Message : " + e.Message)
        End Try
        ']
 
        Dim hParent As IntPtr = FindWindowEx(IntPtr.Zero, hParent, "Notepad", myProcess.WaitForInputIdle())  '  "Безымянный-Блокнот")
        If Not hParent.Equals(IntPtr.Zero) Then
            Dim hChild As IntPtr = FindWindowEx(hParent, hChild, "Edit", vbNullString)
            If Not hChild.Equals(IntPtr.Zero) Then
                SendMessage(hChild, WM_SETTEXT, 0, TextBox1.Text)
            Else
                MessageBox.Show("Child Window Not Found")
            End If
        Else
            MessageBox.Show("Main Window Not Found")
        End If
    End Sub
 
    'THIS BUTTON GETS THE TEXT FROM NOTEPAD
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim hParent As IntPtr = FindWindowEx(IntPtr.Zero, hParent, "Notepad", "Notepad")  '  "Untitled - Notepad")
        If Not hParent.Equals(IntPtr.Zero) Then
            Dim hChild As IntPtr = FindWindowEx(hParent, hChild, "Edit", vbNullString)
            If Not hChild.Equals(IntPtr.Zero) Then
                Dim txtlen As Integer = SendMessage(hChild, WM_GETTEXTLENGTH, 0, vbNullString)
                Dim txt As String = Space(txtlen + 1)
                SendMessage(hChild, WM_GETTEXT, txtlen + 1, txt)
                TextBox1.Clear()
                TextBox1.Text = txt
            Else
                MessageBox.Show("Child Window Not Found")
            End If
        Else
            MessageBox.Show("Main Window Not Found")
        End If
    End Sub
 
End Class
Но этот код не находит блокнот!
Пишет - "Main Window Not Found"
"прикрутил" поиск окна по заголовку - то же самое.
0
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
10.01.2017, 21:58
Hikari, у меня заработало, если изменить вот так
VB.NET
1
2
3
4
5
6
7
 Select Case (id)
                Case 200
                    Clipboard.SetText("Hello notepad")
                    Dim Hwnd As IntPtr = FindWindow(Nothing, "тест.txt — Блокнот")
                    Dim hChild As IntPtr = FindWindowEx(Hwnd, 0, "Edit", vbNullString)
                    SendMessage(hChild, WM_PASTE, 0, 0)
            End Select
1
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
10.01.2017, 22:12  [ТС]
Цитата Сообщение от edward_freedom Посмотреть сообщение
у меня заработало
Простите, что "заработало"?
0
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
10.01.2017, 22:22
Anderis49, все что написано тс, в первом посте
0
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
10.01.2017, 22:40  [ТС]
Цитата Сообщение от edward_freedom Посмотреть сообщение
все что написано тс, в первом посте
Ну-у-у-у...., в этом случае тему можно считать себя исчерпавшей.
0
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
10.01.2017, 22:49
Цитата Сообщение от Anderis49 Посмотреть сообщение
А почему бы и не сказать?
Все с тобой ясно. Больше помогать не стану.
Удачи.
1
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
11.01.2017, 14:25  [ТС]
Цитата Сообщение от Hikari Посмотреть сообщение
Больше помогать не стану.
Вот так всегда с блондинками, особенно с хитрыми - поманят-поманят и продинамят.

Остерегайтесь молодые люди блондинок за рулем и тех, кто помогают!

Но по серьезному Вам СПАСИБО!
Хоть и не во всём, но помогли.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.01.2017, 14:25
Помогаю со студенческими работами здесь

Как при старте обеспечить запуск своей программы после другой?
мне нужно что бы моя программа, при запуске компьютера запускалась обязательно после другой, которая запускается не из StartUp... и...

Заплатка для своей программы посредством другой своей программы
Доброго времени... друзья! Есть программа: program Project1; uses Windows; var

Остановка программы при нажатии клавиши BS
Напишите программу, выполняющую вывод на экран произвольных наборов символов до тех пор, пока не будет нажата клавиша BS Заранее...

Окончание программы при нажатии клавиши
. Ввести массив из n чисел. Далее требуется вывести все элементы массива, размещая их на экране случайным образом и случайным цветом;...

Завершить работу программы при нажатии клавиши q
.model tiny .code org 100h begin: mov ax,0003h int 10h ;*********************HORIZONTAL*************** ramka proc near


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru