vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
FindWindowEx Handle wird falsch zurückgegeben 
Autor: oimel
Datum: 21.03.12 15:22

Hallo allerseits,
Ich hoffe hierdurch Hilfe bei meinem Problem zu erhalten. Danke schon mal im Voraus.

Ich versuche den Wert eines Controls aus einem externen Programm auszulesen. Hierfür verwende ich das Tool "WinSpy 2008". Mit WinSpy 2008 kann man ein Control anklicken und es generiert einen Code um das Handle des Controls ausfindig zu machen. Das habe ich gemacht und erhalte diesen Code:

var
  wndMain, wndChild: HWND;
begin
  wndMain := FindWindow('ArFrame','BMC Remedy User');
  if wndMain <> 0 then
  begin
    wndChild := FindWindowEx(wndMain, 0, 'MDIClient', nil);
    wndChild := FindWindowEx(wndChild, 0, _
      'Afx:00400000:b:00000000:00000006:000106F3', nil);
    wndChild := FindWindowEx(wndChild, 0, 'AfxMDIFrame70', nil);
    wndChild := FindWindowEx(wndChild, 0, 'AfxFrameOrView70', nil);
    wndChild := FindWindowEx(wndChild, 0, 'RichEdit20A', nil);
    if wndChild <> 0 then
    begin
      ShowMessage('Window Handle: ' + IntToStr(wndChild));
      FlashControl(wndChild); // internal function
    end;
  end;
end.
Den Code kann man dann gleich ausführen und er funktioniert auch. Jetzt wollte ich das ganze mit VB.net programmieren. Ich testweise nach jedem FindWindowEx eine MsgBox(wndChild) gesetzt, mein Handle ist ab dem Control "MDIClient" falsch.

Hier mein VBCode:
    Declare Auto Function FindWindow Lib "USER32.DLL" (ByVal lpClassName As _
      String, ByVal lpWindowName As String) As IntPtr
    Declare Function FindWindowEx Lib "USER32.DLL" Alias "FindWindowExA" (ByVal _
    hwndParent As Long, ByVal hwndChildAfter As Long, ByVal lpszClass As _
    String, ByVal lpszWindow As String) As Long
    Private Declare Function SendMessageByInt Lib "user32.dll" Alias _
    "SendMessageA" (ByVal hWnd As IntPtr, ByVal uMsg As Integer, ByVal wParam _
    As Integer, ByVal lParam As Integer) As Integer
    Private Declare Function SendMessageByString Lib "user32.dll" Alias _
    "SendMessageA" (ByVal hWnd As IntPtr, ByVal uMsg As Integer, ByVal wParam _
    As Integer, ByVal lParam As StringBuilder) As Integer
    Const WM_GETTEXT As Integer = &HD
    Const WM_GETTEXTLENGTH As Integer = &HE
    Public Shared Function GetArsNumber()
        Dim wndMain, wndChild As Long
 
        wndMain = FindWindow("ArFrame", "BMC Remedy User")
 
        wndChild = FindWindowEx(wndMain, 0, "MDIClient", vbNullString)
 
        wndChild = FindWindowEx(wndChild, 0, _
          "Afx:00400000:b:00000000:00000006:000106F3", vbNullString)
 
        wndChild = FindWindowEx(wndChild, 0, "AfxMDIFrame70", vbNullString)
 
        wndChild = FindWindowEx(wndChild, 0, "AfxFrameOrView70", vbNullString)
 
        wndChild = FindWindowEx(wndChild, 0, "RichEdit20A", vbNullString)
 
        MsgBox(wndChild.ToString)
 
        Return (GetText(wndChild))
End Function
Public Shared Function GetText(ByVal hwnd As IntPtr) As String
        If (Not hwnd.Equals(IntPtr.Zero)) Then
            Dim length As Integer = SendMessageByInt(hwnd, WM_GETTEXTLENGTH, 0, _
              0)
 
            If length > 0 Then
                Dim SB As New StringBuilder(length)
                Dim Result As Int32 = SendMessageByString(hwnd, WM_GETTEXT, _
                  length + 1, SB)
 
                If Result <> 0 Then
                    Return SB.ToString()
                Else
                    Return String.Empty
                End If
            Else
                Return "Kein Text vorhanden"
            End If
        Else
            Return "Handle nicht gefunden"
        End If
    End Function
Ab dem "MDIClient" kommt mir mit MsgBoxen nach jedem FindWindowEx eine geschätzt 20-stellige Zahl raus.

Danke für eure Zeit,
Ciao,
oimel
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
FindWindowEx Handle wird falsch zurückgegeben1.745oimel21.03.12 15:22
Re: FindWindowEx Handle wird falsch zurückgegeben985oimel21.03.12 15:25
Re: FindWindowEx Handle wird falsch zurückgegeben989oimel21.03.12 19:01
Re: FindWindowEx Handle wird falsch zurückgegeben1.024ModeratorDaveS21.03.12 20:41
Re: FindWindowEx Handle wird falsch zurückgegeben974oimel27.03.12 14:36
Re: FindWindowEx Handle wird falsch zurückgegeben1.011ModeratorDaveS27.03.12 19:16

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel