Miten saa selville ikkunan otsikkotekstin perusteella ko. ikkunan hwnd -arvon?
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Function PölliHwnd(AkkunanNimi As String)As Long PölliHwnd = FindWindow(vbNullString, AkkunanNimi) End Function
ole hyvä
Tässä on toinen funktio:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Const GW_HWNDNEXT = 2
Function IkkunanKahva(teksti As String) As Long
Dim ikkuna As Long, pituus As Long
Dim otsikko As String * 255
ikkuna = FindWindow(vbNullString, vbNullString)
While ikkuna <> 0
If GetParent(ikkuna) = 0 Then
pituus = GetWindowText(ikkuna, otsikko, 255)
If pituus <> 0 Then
If Left(otsikko, pituus) = teksti Then
IkkunanKahva = ikkuna
Exit Function
End If
End If
End If
ikkuna = GetWindow(ikkuna, GW_HWNDNEXT)
Wend
End FunctionKumpi on tehokkaampi ja nopeampi, Antti? Voisit suositella vb1235:lle sitä.
Kiitti, käytin tuota ensinmainittua ja sitä muokkaamalla sain homman toimimaan. Myös tuo Antin koodi näyttää erittäin hyvältä.
Molemmat ohjelmat toimivat niin nopeasti, että eron huomaa vasta atomikellolla.
Testasin vähän omaa ohjelmaani, ja se ainakin löysi kaikki kokeilemani ikkunat otsikon perusteella.
Minä kokeilin ottaa hwnd:n soodan sivuilta ja firefoxin Lataukset-ikkunasta. Ne kelpasivat, olivat ihan tarpeeksi epäselviä 100 000 > x < 1 000 000-lukuja.
Mistähän sellainen vielä johtuu että kun aktivoi ikkunan vaikka appactive tai settopmostwindow -käskyllä niin ikkuna kyllä aktivoituu alapalkissa muttei "pomppaa" esille näyttöruudulle ?
Kun ton tietäiskin... Minulla ainakin toimi, mikä VB sinulla on?
Tämän aiheen lopussa on kunnollinen funktio:
https://www.ohjelmointiputka.net/keskustelu/
Tuo on hyvä mutta kerrohan Antti että mitä muutoksia ko. koodiin täytyy tehdä että saa asetettua ikkunan sijainnin ruudulla (esim. vasempaan yläkulmaan)?
Ikkunan liikuttamisessa auttaa SetWindowPos-WinAPI.
Woow, vaikuttaa kiinnostavalta :D Ja näillä h-vintti arvoilla saa tehtyä vaikka mitä hauskaa (ja ilkeätä).
KingOfTheWorld kirjoitti:
Woow, vaikuttaa kiinnostavalta :D Ja näillä h-vintti arvoilla saa tehtyä vaikka mitä hauskaa (ja ilkeätä).
Mutta onko se tarkoituksenmukaista? Koodarit tekevät palveluksen (hyvästä rahasta) ihmiskunnalle jotka ovat jostain synnynnäisestä virheestä johtuen koodaustaidottomia.
Ja jos käteistä ei ala näkyä, silloin joidenkin pakko sortua pahantekoon :P
Aihe on jo aika vanha, joten et voi enää vastata siihen.