Toon posts:

[VB.NET / API] API sendmessage() en Spy++

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi !

Ik ben een .NET coder (vroeger VB6 en java). Werken met API's heb ik zo wat op mezelf geleerd zonder grondige theorie. (dus misschien zit ik er heel ver naast!)

Ik wil een applicatie die de automatische updates zelf gaat installeren als ze beschikbaar zijn. Je kent dat geel schild icoontje van de updates wel.. Nu werk ik zo:

code:
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
33
34
35
36
37
38
If (FindWindow("wuauclt_icon", "") <> 0) Then
'dan zijn er updates beschikbaar!
'enz dan roep ik:

Public Sub showUpdatesWindow()
'deze functie gaat de systemtray vergroten als hij ingeklapt staat en dan gaan zoeken naar het geel icoontje met de funtie getCoordinates()
'ik weet niet direct hoe ik de items uit een systemtray kan enumeraten
   Dim r As RECT
        Dim shelltraywnd As Int32 = FindWindow("Shell_TrayWnd", "")
        Dim traynotifywnd As Int32 = FindWindowEx(shelltraywnd, 0, "TrayNotifyWnd", "")
        GetWindowRect(traynotifywnd, r)
 SetCursorPos(r.Left + 10, r.Top + 15)
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
        SetCursorPos(0, 0)

        Dim t As Int32 = GetTickCount + 500
        Do While t > GetTickCount
            Application.DoEvents()
        Loop

        Dim p As Point = getCoordinates()
        If (p.X <> -1) Then
            SetCursorPos(p.X, p.Y)
            mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
            mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
        End If

'dan verschijnt het venster en stuur ik naar de knop "Installeren" een mouseclick

  If (auhwnd <> 0) Then
            Dim installButtonHwnd As Int32 = FindWindowEx(auhwnd, &H0, "#32770", "")
            installButtonHwnd = FindWindowEx(installButtonHwnd, 0, "Button", "Installeren")
            If (installButtonHwnd <> 0) Then
                PostMessage(installButtonHwnd, WM_LBUTTONDOWN, &H1, &HD0028)
                PostMessage(installButtonHwnd, WM_LBUTTONUP, &H1, &HD0028)
            End If
        End If


Dat werkt, maar niet 100%, het zoeken naar een icoontje op het scherm met getPixel() en dan muis ernaartoe en klikken is euh tja ranzig ;)
Nu zit ik hier al een paar dagen met Spy++ alle messages die naar de wauclt windows en processes gestuurd worden als ik manueel klik op dat icoon te bestuderen, maar ik vind niks!

Ik wil gewoon programmatorisch op dat kl*te icoon klikken of het venster erachter activeren. Als ik dat manueel doe, wordt WM_NCCREATEWINDOW enz aangeroepen.

Mijn vraag: wat moet ik doen? :P

Als ik de API WindowCreateEx aanroep, gaat Windows dan ervoor zorgen dat de message WM_NCCREATEWINDOW worden gesend?

Ik dacht altijd dat als je een API roept, die windows messages gaat genereren, ja toch?
Kan iemand me vertellen wat er precies moet gebeuren om dat window tevoorschijn te laten komen?

Tim

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 01:51
Ik kan je verder niet helpen met je probleem, maar je weet (hopelijk) dat je ook kan instellen dat updates ook gewoon automatisch installeren?

Roomba E5 te koop


Verwijderd

Topicstarter
jaja :)
maar ik wil dit niet, ik wil zelf kunnen bepalen wanneer die geinstalleerd wordt. We hebben WSUS server die de updates verstuurt naar de clients, maar ik wil volledige controle over het installatieproces: per computer anders en per user en per dag enz. En ik wil 't ook gewoon weten hoe je dat hier nu op lost :)