3

私のvb.net Windowsフォームアプリケーションでは、ユーザーがボタンをクリックしたときにデスクトップが表示されるボタンを作成したいと思います (Show Desktop Button) 。

フォーム名を form1 と見なし、「デスクトップを表示」のようなボタンを取得すると、ユーザーがクリックすると、すべてのアプリケーションが最小化され、デスクトップが表示されます。VB.NET Windows フォーム アプリケーションのコードはありますか。

4

5 に答える 5

4

編集

私の提案した解決策は機能しますが、以下の Code Gray の 回答を使用することをお勧めします。これが正しい方法です。


C# では次のようになります。

using System;
using System.Runtime.InteropServices;

namespace ConsoleApplication1 {
class Program {
    [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    [DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true)]
    static extern IntPtr SendMessage(IntPtr hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam);

    const int WM_COMMAND = 0x111;
    const int MIN_ALL = 419;
    const int MIN_ALL_UNDO = 416;

    static void Main(string[] args) {
        IntPtr lHwnd = FindWindow("Shell_TrayWnd", null);
        SendMessage(lHwnd, WM_COMMAND, (IntPtr)MIN_ALL, IntPtr.Zero); 
        System.Threading.Thread.Sleep(2000);
        SendMessage(lHwnd, WM_COMMAND, (IntPtr)MIN_ALL_UNDO, IntPtr.Zero);
    }
}
}

オンライン変換ツールを使用して上記のコードを変換しました。動作するかどうかを確認してください

Imports System
Imports System.Runtime.InteropServices

Namespace ConsoleApplication1
    Class Program
        <DllImport("user32.dll", EntryPoint := "FindWindow", SetLastError := True)> _
        Private Shared Function FindWindow(lpClassName As String, lpWindowName As String) As IntPtr
        End Function
        <DllImport("user32.dll", EntryPoint := "SendMessage", SetLastError := True)> _
        Private Shared Function SendMessage(hWnd As IntPtr, Msg As Int32, wParam As IntPtr, lParam As IntPtr) As IntPtr
        End Function

        Const WM_COMMAND As Integer = &H111
        Const MIN_ALL As Integer = 419
        Const MIN_ALL_UNDO As Integer = 416

        Private Shared Sub Main(args As String())
            Dim lHwnd As IntPtr = FindWindow("Shell_TrayWnd", Nothing)
            SendMessage(lHwnd, WM_COMMAND, DirectCast(MIN_ALL, IntPtr), IntPtr.Zero)
            System.Threading.Thread.Sleep(2000)
            SendMessage(lHwnd, WM_COMMAND, DirectCast(MIN_ALL_UNDO, IntPtr), IntPtr.Zero)
        End Sub
    End Class
End Namespace
于 2012-04-28T06:11:05.657 に答える
1

このリンクを確認してください。これには、デスクトップを表示するすべてのウィンドウを最小化するコードが含まれています。 http://www.dreamincode.net/code/snippet2109.htm

Public Sub ShowDesktop()
keybd_event(VK_LWIN, 0, 0, 0)
keybd_event(77, 0, 0, 0)
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0)
End Sub

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_LWIN = &H5B

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)         Handles Button1.Click
Call ShowDesktop()
End Sub
于 2012-04-28T06:11:41.737 に答える