Gå til innhold

Enum windows... 6.0 til vb.net


Anbefalte innlegg

Videoannonse
Annonse
    'EnumWindows funksjonen
   Private Declare Auto Function EnumWindows Lib "user32" (ByVal myproc As EnumWindowProc, ByVal lParam As Integer) As Integer

   'Delegat for å kunne sende med referanse til callback funksjon
   Private Delegate Function EnumWindowProc(ByVal Hwnd As IntPtr, ByVal lParam As Integer) As Integer


   Public Sub Main()
       EnumWindows(AddressOf MyWindowProcCallbackHandler, 0)

   End Sub

   Private Function MyWindowProcCallbackHandler(ByVal Hwnd As IntPtr, ByVal lParam As Integer) As Integer
       System.Diagnostics.Debug.WriteLine("Vindu: " & Hwnd.ToString())
       Return 1
   End Function

Lenke til kommentar

Tusen takk... dette funket perfekt. :D

 

Du vet vel ikke hvordan jeg kan anvende den over til å benytte denne funksjonen:

 

 Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
  (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

 

Windows API er vanskelig, hjelp. :innocent:

Endret av chills
Lenke til kommentar

Noe i denne duren

Private Declare Auto Function GetWindowTextA Lib "user32" (ByVal hwnd As IntPtr, ByVal lParam As System.Text.StringBuilder, ByVal stringlen As Integer) As Integer

Dim Buffer As System.Text.StringBuilder = New System.Text.StringBuilder(256, 256)
GetWindowTextA(Hwnd, Buffer, Buffer.Capacity)
System.Diagnostics.Debug.WriteLine("VinduNavn: " & Buffer.ToString())

 

Testet det kjapt selv men får bare ut noen kinesiske tegn. Mener tilsvarende kode for c# fungerer. Konverterte nemlig fra tidligere kode jeg har i c#.

Lenke til kommentar

Når jeg kjører denne biten får jeg opp en feilmelding.

GetWindowTextA(Hwnd, Buffer, Buffer.Capacity)

Feilmeldingen:

A call to PInvoke function 'Vinduer!Vinduer.Form1::GetWindowText' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.

Endret av chills
Lenke til kommentar

Kjørte hos meg, men jeg tror ikke den helt virker som den skal. Mulig noen andre ser en brist i koden der?

 

Tilsvarende kode i C# virker:

        [DllImport("user32")]
       private static extern int GetWindowTextA(int hwnd, StringBuilder lpString, int stringlen);

       [DllImport("user32")]
       private static extern int EnumWindows(EnumWindowProc myproc, int lParam);

       private delegate int EnumWindowProc(int hwnd, int lParam);

       /// <summary>
       /// The main entry point for the application.
       /// </summary>
       [STAThread]
       static void Main() {
           EnumWindows(new EnumWindowProc(EnumProcWinsCaption), 0);
       }

       private static int EnumProcWinsCaption(int hwnd, int lParam) {
           StringBuilder buffer = new StringBuilder(256, 256);
           GetWindowTextA(hwnd, buffer, buffer.Capacity);
           Debug.WriteLine(buffer.ToString());
           return 1;
       }

Endret av wolf5
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...