PostMessage & WM_ACTIVATEAPP

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

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

krukovis84
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 108
Зарегистрирован: 04.08.2009 (Вт) 11:16
Откуда: Кочевник

PostMessage & WM_ACTIVATEAPP

Сообщение krukovis84 » 10.07.2010 (Сб) 11:30

Всем привет!
Подскажите что не так пожалуйста:
Объявляю функцию
Код: Выделить всё
Public Declare Function PostMessage Lib "user32" ( _
    ByVal hwnd As IntPtr, _
    ByVal msg As Integer, _
    ByVal wparam As IntPtr, _
    ByVal lparam As IntPtr _) As Integer

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Integer

    Public Const WM_ACTIVATEAPP = &H1C


Далее ищу окно и отправляю ему команду разморозиться,
Код: Выделить всё
Dim intWinHwnd As Integer = FindWindow(vbNullString, "My_win_name")
        PostMessage(intWinHwnd, WM_ACTIVATEAPP, 1, 0)


А он мне выделяет
PostMessage(intWinHwnd, WM_ACTIVATEAPP, 1, 0)
- и говорит что "Не удается найти точку входа "PostMessage" в DLL "user32"." - Что ему не хватает для полного счастья?

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

Re: PostMessage & WM_ACTIVATEAPP

Сообщение iGrok » 10.07.2010 (Сб) 12:11

А нет такой функции в user32. Есть PostMessageW (Unicode) и PostMessageA (ANSI).
label:
cli
jmp label

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: PostMessage & WM_ACTIVATEAPP

Сообщение FireFenix » 10.07.2010 (Сб) 12:19

iGrok писал(а):А нет такой функции в user32. Есть PostMessageW (Unicode) и PostMessageA (ANSI).

Или можно просто указать Charset = Auto :)

Вообще правильно юзать DllImport - Атрибут из пространства System.Runtime.InteropServices

Код: Выделить всё
Class Form1
    Sub New()
        InitializeComponent()

        Dim WM_KEYDOWN As UInteger = &H100

        Dim proc As New System.Diagnostics.Process()
        proc.EnableRaisingEvents = False
        proc.StartInfo.FileName = "c:\windows\system32\notepad.exe"
        proc.Start()
        proc.WaitForInputIdle()

        Dim lpszParentClass As String = "Notepad"
        Dim lpszParentWindow As String = "Untitled - Notepad"
        Dim lpszClass As String = "Edit"

        Dim ParenthWnd As New IntPtr(0)
        Dim hWnd As New IntPtr(0)

        ParenthWnd = FindWindow(lpszParentClass, lpszParentWindow)

        If ParenthWnd.Equals(IntPtr.Zero) Then
            Debug.WriteLine("Notepad Not Running!")
        Else
            hWnd = FindWindowEx(ParenthWnd, hWnd, lpszClass, "")

            If hWnd.Equals(IntPtr.Zero) Then
                Debug.WriteLine("Notepad doesn't have an Edit component, how strange.")
            Else
                Debug.WriteLine("Notepad Window: " & ParenthWnd.ToString())
                Debug.WriteLine("Edit Control: " & hWnd.ToString())

                PostMessage(hWnd, WM_KEYDOWN, &H48, 1)
                PostMessage(hWnd, WM_KEYDOWN, &H45, 1)
                PostMessage(hWnd, WM_KEYDOWN, &H4C, 1)
                PostMessage(hWnd, WM_KEYDOWN, &H4C, 1)
                PostMessage(hWnd, WM_KEYDOWN, &H4F, 1)
            End If
        End If
    End Sub

    <DllImport("user32.dll", EntryPoint:="PostMessage", SetLastError:=True, CharSet:=CharSet.Auto)>
    Private Shared Function PostMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Boolean
    End Function

    <DllImport("user32.dll", EntryPoint:="FindWindow", SetLastError:=True, CharSet:=CharSet.Auto)>
    Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
    End Function

    <DllImport("user32.dll", EntryPoint:="FindWindow", SetLastError:=True, CharSet:=CharSet.Auto)>
    Private Shared Function FindWindowByClass(ByVal lpClassName As String, ByVal zero As IntPtr) As IntPtr
    End Function

    <DllImport("user32.dll", EntryPoint:="FindWindow", SetLastError:=True, CharSet:=CharSet.Auto)>
    Private Shared Function FindWindowByCaption(ByVal zero As IntPtr, ByVal lpWindowName As String) As IntPtr
    End Function

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
    Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, ByVal childAfter As IntPtr, ByVal lclassName As String, ByVal windowTitle As String) As IntPtr
    End Function
End Class
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

krukovis84
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 108
Зарегистрирован: 04.08.2009 (Вт) 11:16
Откуда: Кочевник

Re: PostMessage & WM_ACTIVATEAPP

Сообщение krukovis84 » 10.07.2010 (Сб) 12:27

:D Понял! Спасибо!


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

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

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

    TopList