Imports System.Runtime.InteropServices

Public Class Form1


    Private Declare Auto Function FindWindow Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
    Private Declare Auto Function FindWindowEx Lib "user32" (ByVal hWndParent As Integer, ByVal hWndChildAfter As Integer, ByVal lpszClass As String, ByVal lpszWindow As String) As Integer

    Private Declare Auto Function SetForegroundWindow Lib "user32" (ByVal hWnd As Integer) As Integer
    Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA"(ByVal hWnd As Integer, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
    Private Const WM_SETTEXT As Integer = &HC
    Private Const WM_COMMAND As Integer = &H111


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click


        ' 通过shell函数运行一个新实例
        Shell("calc.EXE", AppWinStyle.NormalFocus)
        Dim hWnd As Integer = FindWindow(vbNullString, "计算器")

        If hWnd Then
            SendMessage(hWnd, WM_SETTEXT, 0, Trim(TextBox1.Text))
            Dim myhwnd As Integer = FindWindowEx(hWnd, IntPtr.Zero, "CalcFrame", "")
            If myhwnd Then
                SendMessage(myhwnd, WM_COMMAND, 130, 0)
                SendMessage(myhwnd, WM_COMMAND, 131, 0)
                SendMessage(myhwnd, WM_COMMAND, 132, 0)
                SendMessage(myhwnd, WM_COMMAND, 133, 0)
            Else
                MessageBox.Show("没找到计算器编辑")
            End If
        Else
                MessageBox.Show("没找到计算器")
        End If


    End Sub


End Class

首先通过spy++跟踪消息,然后发送消息

.net随笔-vb2015 发送消息给计算器

相关文章: