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.