Ручной "Пуск"

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Ручной "Пуск"

Сообщение Alex[fj] » 24.03.2007 (Сб) 19:25

Вот, есть код...
Код: Выделить всё
Option Strict Off
Option Explicit On
Friend Class Form1
   Inherits System.Windows.Forms.Form
   Const WS_CHILD As Integer = &H40000000
   Const WM_LBUTTONDOWN As Short = &H201s
   Const WM_LBUTTONUP As Short = &H202s
   Const SW_HIDE As Short = 0
   Const SW_NORMAL As Short = 1
   Private Structure RECT
        Dim Left_Renamed As Integer
        Dim Top_Renamed As Integer
        Dim Right_Renamed As Integer
        Dim Bottom_Renamed As Integer
   End Structure
   Private Declare Function FindWindowEx Lib "user32"  Alias "FindWindowExA"(ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
   Private Declare Function FindWindow Lib "user32"  Alias "FindWindowA"(ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
   Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Integer, ByVal nCmdShow As Integer) As Integer
    Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Integer, ByRef lpRect As RECT) As Integer
    Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Integer, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hWndParent As Integer, ByVal hMenu As Integer, ByVal hInstance As Integer, ByRef lpParam As Long) As Integer
   Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Integer) As Integer
   Dim bWnd, tWnd, ncWnd As Integer
   Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
        Dim R As RECT

        'находим taskbar's handle
      tWnd = FindWindow("Shell_TrayWnd", vbNullString)
        'находим start-button's handle
      bWnd = FindWindowEx(tWnd, 0, "BUTTON", vbNullString)
        'позиция start'a
      GetWindowRect(bWnd, R)
        'вот и создаем свою кнопку
        ncWnd = CreateWindowEx(0, "BUTTON", "Hello !", WS_CHILD, 0, 0, R.Right_Renamed - R.Left_Renamed, R.Bottom_Renamed - R.Top_Renamed, tWnd, 0, VB6.GetHInstance.ToInt32, 0)
        ShowWindow(ncWnd, SW_NORMAL)
        ShowWindow(bWnd, SW_HIDE)


    End Sub
   Private Sub Form1_FormClosed(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        ShowWindow(bWnd, SW_NORMAL)
        DestroyWindow(ncWnd)
   End Sub
End Class

В общем, все придельно понятно! Создаем кнопку, сажаем вместо пуска... А вот как мне теперь к ней обратиться? Ну, чтобы по нажатию чего-нибудь происходило.
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 25.03.2007 (Вс) 9:22

Сабклассить родителя.
Изображение

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 26.03.2007 (Пн) 8:50

tyomitch, посмотри, сколько у меня звезд!
Чего сабклассить? Ну родитель у кнопочки - taskbar... Только у меня от него только Handle, как, впрочем, и от кнопки!
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 26.03.2007 (Пн) 9:14

Если есть хэндл, то саблассить можно! Собствено это все что для сабклассинга нужно. А пример есть где-то в кирпичах, ежели мне не изменяет память
Весь мир матрица, а мы в нем потоки байтов!

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 26.03.2007 (Пн) 11:41

Код: Выделить всё
Public Class Form1
    Inherits System.Windows.Forms.Form
    Const WS_CHILD As Integer = &H40000000
    Const WM_LBUTTONDOWN As Short = &H201S
    Const WM_LBUTTONUP As Short = &H202S
    Const SW_HIDE As Short = 0
    Const SW_NORMAL As Short = 1
    Dim MyTmpType As Integer

    Private Structure RECT
        Dim Left_Renamed As Integer
        Dim Top_Renamed As Integer
        Dim Right_Renamed As Integer
        Dim Bottom_Renamed As Integer
    End Structure
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
    Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Integer, ByVal nCmdShow As Integer) As Integer
    Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Integer, ByRef lpRect As RECT) As Integer
    Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Integer) As Integer
    Private Declare Function SetParent Lib "user32" (ByVal hwndChild As Integer, ByVal hwndParent As Integer) As Integer
    Dim bWnd, tWnd, ncWnd As Integer

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim R As RECT

        'находим taskbar's handle
        tWnd = FindWindow("Shell_TrayWnd", vbNullString)
        'находим start-button's handle
        bWnd = FindWindowEx(tWnd, 0, "BUTTON", vbNullString)
        'позиция start'a
        GetWindowRect(bWnd, R)

        Button1.Parent = Nothing
        SetParent(Button1.Handle, tWnd)

        Button1.Location = New Point(0, 0)
        Button1.Size = New Size(R.Right_Renamed - R.Left_Renamed, R.Bottom_Renamed - R.Top_Renamed)

        ShowWindow(bWnd, SW_HIDE)

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox("Button Pressed")
    End Sub

    Private Sub Form1_FormClosed(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        ShowWindow(bWnd, SW_NORMAL)
    End Sub

End Class
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 26.03.2007 (Пн) 18:09

Nord777, спасибо! Теперь это действительно "ручной" пуск!
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

GoodWin74
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 80
Зарегистрирован: 29.09.2006 (Пт) 18:58
Откуда: от Верблюда! :)

Сообщение GoodWin74 » 28.03.2007 (Ср) 23:09

охохо....не че се я блин запустил выше указаный код понажымал и чеж вижу пуск изчез?Я идиот! Убейте меня, кто-нибудь! :shock: :?
http:\\start4you.narod.ru

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 29.03.2007 (Чт) 16:01

А чем ты удивлен?
Запусти еще раз и выйди из приложения нормально - кнопка появится ))
Код который восстанавливает кнопку "Пуск" находится в "FormClosed"
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5


Вернуться в Visual Basic .NET

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

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

    TopList