Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.65/37: Рейтинг темы: голосов - 37, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65

Запрет сворачивания формы, в том числе и с помощью горячих клавиш

20.09.2012, 22:05. Показов 8080. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток. Пишу программу на visual basic 6.0. Подскажите пожалуйста какой код нужно написать чтобы программу нельзя было свернуть. Если поставить MinButton = False, то нажатием на клавишу win + d или win + m она сворачивается. Как сделать чтоб при нажатии на клавиши win + d или win +m программа НЕ СВОРАЧИВАЛАСЬ, а оставалась развернутая всегда. Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.09.2012, 22:05
Ответы с готовыми решениями:

Запрет горячих клавиш windows в программе
Как можно сделать, чтобы после запуска программы до ее закрытия, горячие клавиши переставали работать? Например, чтобы программа не...

Регистрация глобальных горячих клавиш с помощью RegisterHotKey
Помогите с регистрацией глобальных горячих клавиш с помощью RegisterHotKey

Полный запрет на сворачивания формы
Подскажите как удержать форму на рабочем столе по нажатию на win+d Облазил весь интернет решений пару нашёл : 1 . поставить хук на...

44
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65
30.09.2012, 23:22  [ТС]
Студворк — интернет-сервис помощи студентам
Dragokas,
Цитата Сообщение от Dragokas Посмотреть сообщение
Visual Basic
1
If Form1.WindowState <> 0 Then Form1.WindowState = 0

А, работает, но только от win + m.

Но если нажать кнопку "свернуть все окна" (находящаяся в пуску) Форма скрывается. Может быть микрософт её не правильно назвал. Возможно конечно "забить" на тайчпад, да вы правы он есть не у всех. Но на кнопку "забить" нельзя. Она есть у всех. И ей пользуются многие.


Visual Basic
1
2
3
4
Private Sub Timer2_Timer()
If Form1.WindowState <> 0 Then Form1.WindowState = 0 Or Timer1.Enabled = True
 
End Sub
Visual Basic
1
2
3
4
5
6
Private Sub Timer1_Timer()
Timer1.Enabled = False
SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
           
        
End Sub
Так тоже не работает.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18035 / 7738 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
01.10.2012, 02:20
Да, прикольно.

Можно конечно по-простому - дописать:
Visual Basic
1
AppActivate ("Key Spy")
Но, если понажимать раз 5-10 на сворачивание - форма все равно исчезнет.

Перепробовал множество вариантов.
Самый вменяемый код получился такой:
Visual Basic
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
Private Type POINTAPI
    x As Long
    y As Long
End Type
 
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
 
Private Type WINDOWPLACEMENT
    Length As Long
    flags As Long
    showCmd As Long
    ptMinPosition As POINTAPI
    ptMaxPosition As POINTAPI
    rcNormalPosition As RECT
End Type
 
Public Const VK_D = &H44
Public Const VK_LWIN = &H5B
Public Const SW_MINIMIZE = 6, SW_NORMAL = 1, SW_MAXIMIZE = 3, SW_RESTORE = 9
Public Const Form_H = 3600, Form_W = 4800
 
Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Function GetWindowPlacement Lib "user32" (ByVal hWnd As Long, lpwndpl As WINDOWPLACEMENT) As Long
Private Declare Function SetWindowPlacement Lib "user32" (ByVal hWnd As Long, lpwndpl As WINDOWPLACEMENT) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function ShowWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
 
 
 
Function GetPressedKey() As String
     If GetAsyncKeyState(VK_LWIN) = -32768 And GetAsyncKeyState(VK_D) = -32768 Then
            GetPressedKey = 1
       End If
End Function
 
 
Sub TimerProc(ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
    ret = GetPressedKey
    If ret = 1 Then
      MsgBox "WIN+D", vbSystemModal
    End If
 
    If Form1.WindowState <> 0 Then
      ret = 0
      Do While ret = 0
          Form1.WindowState = 0
          ret = AppToForeground(Form1.hWnd, SW_NORMAL)
      Loop
    End If
End Sub
 
 
Function AppToForeground(lHwnd As Long, lWindowState As Long) As Long
    Dim tWinPlace As WINDOWPLACEMENT
 
    tWinPlace.Length = Len(tWinPlace)
    'Get the windows current placement
    Call GetWindowPlacement(lHwnd, tWinPlace)
    'Set the windows placement
    tWinPlace.showCmd = lWindowState
    'Change window state
    Call SetWindowPlacement(lHwnd, tWinPlace)
    'Активация окна
    AppActivate ("Key Spy")
    'Светим окно
    Call ShowWindow(Form1.hWnd, SW_NORMAL)
    'Bring to foreground
    AppToForeground = SetForegroundWindow(lHwnd)
    Form1.Height = Form_H
    Form1.Width = Form_W
End Function
А если нажатий на сворачивание более 30, форму корёжит и получается то, что на скрине.
Пришлось еще и размеры указывать. В идеале еще и позицию формы нужно восстанавливать.
Изображения
 
2
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65
02.10.2012, 20:07  [ТС]
Dragokas, Спасибо за внимание. К сожалению при нажатии на кнопку "свернуть все окна" программа мигает и не дает свернуть другие окна. А если и свернулись все окна кроме неё, то при 2 нажатии происходит полный сбой программы и она вылетает и тормозит компьютер.
Если брать гаджеты, то они же нормально работают при сворачивании. Или они совсем по другому устроены?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
03.10.2012, 11:59
У гаджетов совсем другой механизм. Они пишутся в виде HTML с использованием VBscript (JS).
Принцип простой, описан подробно. Есть даже вспомогательные программы.
1
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 65
06.10.2012, 12:14  [ТС]
Dragokas, А можно ли узнать форма моей программы находится поверх рабочего стола или повth[ других окон?
 Комментарий модератора 
Я не знаю. Я такой же начинающий в данном вопросе, как и Вы.
Не стоит обращаться к отдельным участникам форума, т.к. другие могут воспринять это как "личную переписку" и не станут отвечать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.10.2012, 12:14

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

Открытие скрытой формы по нажатию горячих клавиш на клавиатуре
На форме есть кнопка которая скрывает эту форму! Как после этого открыть эту форму по нажатию горячих клавиш? Это код кнопки который...

Получение координат мыши на экране (в том числе за пределами формы)
Здравствуйте! Как сделать чтобы при движение мыши в статус баре отражались координаты. НО не только координаты на форме программы, а везде....

Связать две формы по координатам, в том числе, для одновременного перемещения
Здравствуйте. у меня есть две формы. Вторая ( прозрачная и имеет некие инструменты ) вызывается кнопкой из первой. Подскажите...

Запрет сворачивания окна
Доброго времени суток. После загрузки файла окно автоматически сворачивается (но его можно снова развернуть и работать дальше с...


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

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru