программно заблокировать кнопку пуск

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
dorido
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 107
Зарегистрирован: 27.02.2005 (Вс) 17:10
Откуда: Angarsk

программно заблокировать кнопку пуск

Сообщение dorido » 22.10.2007 (Пн) 23:27

как сделать, что бы винда не реагировала на нажатие кнопки пуск(Win) на клаве?
By oppression’s woes and pains,
By your sons in servile chains,
We will drain our dearest veins
But they shall be free!

t116
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 12.01.2007 (Пт) 12:11

Сообщение t116 » 22.10.2007 (Пн) 23:39

Есть программа. KeyTweak называется. Ею можно блокировать.

Cytron
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 266
Зарегистрирован: 15.02.2007 (Чт) 21:09

Сообщение Cytron » 22.10.2007 (Пн) 23:44

А на VB как? И другие типа alt+tab, ctrl+esc там... Можно конечно все на новый десктоп и лады но должна же быть одна функция.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 23.10.2007 (Вт) 9:21

Имея hwnd, можно ее спрятать.
Вложения
startbutton.rar
(1.65 Кб) Скачиваний: 100
Лучший способ понять что-то самому — объяснить это другому.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 23.10.2007 (Вт) 11:37

Antoniary.. Но она все раво будет работать при вызове с клавиатуры.
label:
cli
jmp label

dorido
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 107
Зарегистрирован: 27.02.2005 (Вс) 17:10
Откуда: Angarsk

Сообщение dorido » 23.10.2007 (Вт) 12:14

есть идея копать в сторону SetWindowHook, но не оень получается выкопать, что-нибудь работающее)
By oppression’s woes and pains,
By your sons in servile chains,
We will drain our dearest veins
But they shall be free!

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 23.10.2007 (Вт) 14:21

SetWindowsHookEx конечно можно использовать, но смысл? Ну отловишь ты нажатие кнопки с кодом 91d (Это клавиша виндовс), но поменять его значение (кода) скажем на 0 не получится. Сам седня с утра проверял (взял пример из API Guide'a). не помогает.

Другими словами. ты будешь знать, когда будет появляться это меню, но предотвратить его появление путем "обмана" винды, типа "неправда ваша, там другая клавища была нажата" не получится. Хотя можно попробовать как-нить скрывать это меню...
Ну или писать свой собственный драйвер клавиатуры...
Подпись проходит рефакторинг

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 23.10.2007 (Вт) 15:40

Lumen писал(а):Другими словами. ты будешь знать, когда будет появляться это меню, но предотвратить его появление путем "обмана" винды, типа "неправда ваша, там другая клавища была нажата" не получится.


Можно, вслед за этим нажатием, съимитировать нажатие Esc :)
Но это, как-то, криво...
Программисты не глючат - глючат компиляторы...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 23.10.2007 (Вт) 15:40

iGrok писал(а):Antoniary.. Но она все раво будет работать при вызове с клавиатуры.
Можно выгнать ее за пределы экрана, вероятно меню не будет доступно. Я ее однажды загнал в левый верхний угол, нажимаю, а меню не видно. Нажимаю с клавиатуры, потом вверх, энтер, и ничего не происходит. А первый снизу пункт - выключение компьютера.
Лучший способ понять что-то самому — объяснить это другому.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 23.10.2007 (Вт) 18:01

Lumen
Пример из апи-гуида работает только внутри процесса. А вот если делать хук по всем правилам, то реально словить.
Изображение

dorido
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 107
Зарегистрирован: 27.02.2005 (Вс) 17:10
Откуда: Angarsk

Сообщение dorido » 24.10.2007 (Ср) 17:46

Код: Выделить всё
using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Runtime.InteropServices;

class TEST
{
private const int WH_KEYBOARD_LL = 13;
private const int WM_KEYDOWN = 0x0100;
private static LowLevelKeyboardProc _proc = HookCallback;
private static IntPtr _hookID = IntPtr.Zero;

public static void Main()
{
_hookID = SetHook(_proc);
Application.Run();
UnhookWindowsHookEx(_hookID);
}

private static IntPtr SetHook(LowLevelKeyboardProc proc)
{
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0);
}
}

private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if ( (nCode >= 0) && (wParam == (IntPtr)WM_KEYDOWN) )
{
int vkCode = Marshal.ReadInt32(lParam);
if( ((Keys)vkCode == Keys.LWin)||((Keys)vkCode == Keys.RWin) )
{
Console.WriteLine("{0} blocked!", (Keys)vkCode);
return (IntPtr)1;
}
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]

есть нечто по тем, но на шарпе. тогда возникает другая задача, как портировать это на вб, что бы ещё и работало?)
By oppression’s woes and pains,
By your sons in servile chains,
We will drain our dearest veins
But they shall be free!

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Сообщение awl100Alex » 17.02.2008 (Вс) 2:23

Какое СИ?!!.. Какое Шарп?!!.. Какой там еще хук?!!.. :(
Тебе же Antonariy правильную мысль сказал, а ты в лес... да в дремучий!.. :(
Делается все элементарно!..

Код: Выделить всё
Option Explicit
Private Declare Function FindWnd Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWiName As String) As Long
Private Declare Function FindWndEx Lib "User32" Alias "FindWindowExA" (ByVal HWnd1 As Long, ByVal HWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetDesktopWindow Lib "User32" () As Long
Private Declare Function SetParent Lib "User32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
'Private Declare Function SetWindowPos Lib "User32" (ByVal HWnd As Long, ByVal HWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal CX As Long, ByVal CX As Long, ByVal WFlags As Long) As Long
Private Declare Function ShowWindow Lib "User32" (ByVal HWnd As Long, ByVal nCmdShow As Long) As Long
Private Const SW_SHOWNORMAL = 1
Private Const SW_HIDE = 0
Private hTrayWnd, hButton As Long

Private Sub Block_Start_Click()
'Блокируем кнопку "Пуск"
SetParent hButton, GetDesktopWindow
ShowWindow hButton, SW_HIDE
End Sub

Private Sub UnBlock_Start_Click()
'Возвращаем кнопку на законное место...
SetParent hButton, hTrayWnd
'SetWindowPos hButton, 0, 0, 0, 54, 24, 0
ShowWindow hButton, SW_SHOWNORMAL
End Sub

Private Sub Form_Load()
'Определяем хэндл кнопки "Пуск"
hTrayWnd = FindWnd("Shell_TrayWnd", vbNullString)
hButton = FindWndEx(hTrayWnd, 0, "Button", vbNullString)
End Sub

Private Sub End_Command_Click()
End
End Sub


Дерзай!.. Удачи!.. :)
Вложения
StartMng.rar
Блокиратор кнопки «Пуск»...
(4.9 Кб) Скачиваний: 76

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Сообщение awl100Alex » 02.03.2008 (Вс) 11:28

P.S.
А вот таким вот способом можно вообще(!) заблокировать "Пуск" в текущей сессии...

Код: Выделить всё
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _
lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendNotifyMessage Lib "user32" Alias "SendNotifyMessageA" (ByVal _
hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Const WM_CLOSE = &H10

Private Sub Command1_Click()
'Находим хэндл кнопки "Пуск"...
hTrayWnd = FindWindow("Shell_TrayWnd", vbNullString)
hButton = FindWindowEx(hTrayWnd, ByVal 0&, "BUTTON", vbNullString)
SendNotifyMessage hButton, WM_CLOSE, ByVal 0&, ByVal 0&
End Sub
Вложения
StartFinal.rar
Полная блокировка "Пуск" в текущей сессии...
(4.18 Кб) Скачиваний: 60


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList