[VB.NET] WM_PASTE en Sendmessage problemen

Pagina: 1
Acties:

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Topicstarter
Ik ben bezig met een kleine test applicatie aan het maken. Deze applicatie moet dmv van een hotkey het clipboard naar het de desktop applicatie dumpen. De hotkey trigger werkt zonder problemen en de correcte handle ophalen van de desktop applicatie ook.

Alleen het copieren van het clipboard naar de applicatie werkt niet.

Ik heb dus de volgende minimale code geschreven om te testen, maar ik kom er niet uit 8)7

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim hwnd As IntPtr = FindWindow("Notepad", vbNullString)
        Dim lpText As String

        lpText = New String(Chr(0), 100)
        If hwnd.Equals(IntPtr.Zero) Then System.Console.WriteLine("Zero: ")
        Dim intLength As Integer = GetWindowText(hwnd, lpText, _
          lpText.Length)
        SendMessage(hwnd, WM_PASTE, 0, 0)
'
' Genereert foutmelding in System.Runtime.InteropServices.Marshal.GetLastWin32Error()
' 
        displayError("button2")
' Laat een foutmelding zien
        System.Console.WriteLine("lptext: " + lpText.ToString)
' Werkt correct
    End Sub

    Public Declare Auto Function SendMessage Lib "user32" (ByVal HWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Long
    Public Const WM_PASTE As Integer = &H302

 Private Sub displayError(ByVal loc As String)
        Dim errorCode As Integer
        errorCode = System.Runtime.InteropServices.Marshal.GetLastWin32Error()
        If errorCode <> 0 Then
            Dim ex As System.ComponentModel.Win32Exception

            ex = New System.ComponentModel.Win32Exception(errorCode)
            System.Console.WriteLine( _
                String.Format("Error: {0} - {1} - {2}", errorCode, ex.Message, loc))
        End If
    End Sub

WM_PASTE op MSDN

Ik krijg de inhoud van de title van Notepad correct terug. Aangezien ik die kan zien in de variable lpText. Dus hwnd heeft de correcte handle. Maar ik krijg het niet voor elkaar om de clipboard te kopieren naar Notepad.

De foutmelding die ik te zien krijg is
code:
1
Error: 127 - The specified procedure could not be found - button2


Iemand een idee wat ik fout doe? 8)7

Programmer - an organism that turns coffee into software.


  • Shezzie
  • Registratie: Januari 2005
  • Laatst online: 01-12 11:21

Shezzie

Lekker hoor!

Het probleem is niet al te groot: je probeert de je clipboard te pasten op de window zelf, niet de editbox die er als child onder zit. Je moet dus nog iets verder snuffelen voor je handle.

Toevoegen:
Visual Basic .NET:
1
Private Declare Ansi Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As IntPtr, ByVal hWnd2 As IntPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As IntPtr


En hier gebruiken:
Visual Basic .NET:
1
2
3
4
5
6
        I
if hwnd.Equals(IntPtr.Zero) Then System.Console.WriteLine("Zero: ")
Dim intLength As Integer = GetWindowText(hwnd, lpText, lpText.Length)

Dim hwnd2 As IntPtr = FindWindowEx(hwnd, 0, Nothing, Nothing)
SendMessage(hwnd2, WM_PASTE, 0, 0)


Lees aub de hulp over FindWindowEx door: je kunt er veel mee, en het werkt alleen met nothingx2 omdat Notepad een simpel programmatje is.

Succes verder!