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 Function
Kumpi 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.