0

calc.exe を起動して非表示にしたいのです
が、exe を起動することしかできませんが
、コード内のどのエラーを非表示にすることはできませんか??

Imports System.Runtime.InteropServices
Imports System.IntPtr
Public Class Form1
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _  
    Private Shared Function ShowWindowAsync(ByVal hwnd As IntPtr, ByVal nCmdShow As Integer) As Boolean
    End Function 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim a As IntPtr = Process.GetProcessesByName("Calc")(0).Id
        ShowWindowAsync(a, 0)
    End Sub
End Class
4

2 に答える 2

2

次のコードは、マネージ コードを使用して必要なことを実行する必要がありますが、calc を使用して試してみると、非表示または最小化されませんでした (他の exe は期待どおりに動作したため、calc に特有のものである可能性があります)。

    Dim procStartInfo As New ProcessStartInfo
    Dim procExecuting As New Process

    With procStartInfo
        .FileName = "calc"
        .WindowStyle = ProcessWindowStyle.Hidden
    End With

    procExecuting = Process.Start(procStartInfo)
于 2011-06-07T10:49:20.900 に答える
0

私は少し前に、どのプロセスでも動作するスニペットを作成しました。これは 2 つの汎用関数であり、再帰モードもあり、使いやすいです。

#Region " Hide-Restore Process "

    ' [ Hide-Restore Process Function ]
    '
    ' // By Elektro H@cker
    '
    ' Examples :
    '
    ' Hide_Process(Process.GetCurrentProcess().MainModule.ModuleName, False)
    ' Hide_Process("notepad.exe", False)
    ' Hide_Process("notepad", True)
    '
    ' Restore_Process(Process.GetCurrentProcess().MainModule.ModuleName, False)
    ' Restore_Process("notepad.exe", False)
    ' Restore_Process("notepad", True)

    Dim Process_Handle_Dictionary As New Dictionary(Of String, IntPtr)

    <System.Runtime.InteropServices.DllImport("User32")> Private Shared Function ShowWindow(ByVal hwnd As IntPtr, ByVal nCmdShow As Int32) As Int32
    End Function

    Private Sub Hide_Process(ByVal Process_Name As String, Optional ByVal Recursive As Boolean = False)

        If Process_Name.ToLower.EndsWith(".exe") Then Process_Name = Process_Name.Substring(0, Process_Name.Length - 4)

        Dim proc() As Process = Process.GetProcessesByName(Process_Name)

        If Recursive Then
            For proc_num As Integer = 0 To proc.Length - 1
                Try
                    Process_Handle_Dictionary.Add(Process_Name & ";" & proc(proc_num).Handle.ToString, proc(proc_num).MainWindowHandle)
                    ShowWindow(proc(proc_num).MainWindowHandle, 0)
                Catch ex As Exception
                    ' MsgBox(ex.Message) ' The handle already exist in the Dictionary
                End Try
                Application.DoEvents()
            Next
        Else
            If Not proc.Length = 0 AndAlso Not proc(0).MainWindowHandle = 0 Then
                Process_Handle_Dictionary.Add(Process_Name & ";" & proc(0).Handle.ToString, proc(0).MainWindowHandle)
                ShowWindow(proc(0).MainWindowHandle, 0)
            End If
        End If

    End Sub

    Private Sub Restore_Process(ByVal Process_Name As String, Optional ByVal Recursive As Boolean = False)

        If Process_Name.ToLower.EndsWith(".exe") Then Process_Name = Process_Name.Substring(0, Process_Name.Length - 4)

        Dim Temp_Dictionary As New Dictionary(Of String, IntPtr) ' Replic of the "Process_Handle_Dictionary" dictionary
        For Each Process In Process_Handle_Dictionary : Temp_Dictionary.Add(Process.Key, Process.Value) : Next

        If Recursive Then
            For Each Process In Temp_Dictionary
                If Process.Key.ToLower.Contains(Process_Name.ToLower) Then
                    ShowWindow(Process.Value, 9)
                    Process_Handle_Dictionary.Remove(Process.Key)
                End If
                Application.DoEvents()
            Next
        Else
            For Each Process In Temp_Dictionary
                If Process.Key.ToLower.Contains(Process_Name.ToLower) Then
                    ShowWindow(Process.Value, 9)
                    Process_Handle_Dictionary.Remove(Process.Key)
                    Exit For
                End If
                Application.DoEvents()
            Next
        End If

    End Sub

#End Region
于 2013-06-09T12:44:07.750 に答える