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:
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?
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
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?
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