Handle voor het Liberty Edit Venster.

Alles over het toepassen van API en DLL's in Liberty BASIC

Moderator: anthonio

Handle voor het Liberty Edit Venster.

Berichtdoor glpape » di apr 17, 2012 6:48 am

Om plaatjes uit Internet pagina's te pakken als bitmap, met Liberty's Getbmp, wil ik onbelemmerd zicht op dat Internet. Ik moet van de Lbty Editor af en
daarvoor heb ik de handle ervan nodig. Wat is de eenvoudigste manier ?

1. "EnumWindows". Te ingewikkeld, met callbacks. Liever niet.

2. "FindWindow". Erg lastig om die lange titel van het venster in te voeren, vooral omdat long path + filename in de titel balk verschijnt. Op mijn computer
ook, met een geregistreerde versie van Liberty, verschijnt soms mijn naam en soms niet.

3. "GetWindow". Met actie parameter 2 krijg je de handle van het vorige venster. Ik dacht, als ik van het mainwin een stap terug ga krijg ik de Editor. Maar
nee, op mijn computer moet ik 3 stappen terug.

Hier een probeersel met "FindWindow" en "GetWindow".
Werkt alleen goed als je bij wdw$ (2de regel) de titel van je Editor invoert.
Na 3 seconden verdwijnt de Editor en komt terug als je met <Enter> afsluit; het rode kruisje (CloseBox) is disabled.

Code: Selecteer alles
Gosub [SetUpMainwin]

' wdw$ = "Liberty BASIC v4.04 [] - .bas"

calldll #user32, "FindWindowA", 0 as long, wdw$ as ptr, hEd as ulong     ' handle of Lbty Editor
print cr$(3); " OUTPUT  FROM  <FindWindow>  FUNCTION :"
print "--------------------------------------------------------------"
print cr$(1); " Handle of Lbty Editor is :  "; hEd

print cr$(3); " OUTPUT  FROM  <GetWindow>   FUNCTION FOR 6 PREVIOUS WINDOWS :"
print "--------------------------------------------------------------"

action = 2                              ' to get handle for the previous window
calldll #user32, "GetWindow", hmain as ulong, action as long, rtnE as ulong
print cr$(1); " 1 :  handle "; rtnE
call GetWdwTxt rtnE

for n = 2 to 6
calldll #user32, "GetWindow", rtnE as ulong, action as long, rtnE as ulong
print cr$(1); " "; n; " :  handle "; rtnE
call GetWdwTxt rtnE
next n

calldll #kernel32, "Sleep", 3000 as long, rtn as void

' 0=hide  5=show+activate  8=show+noactivate  6=minimize  9=restore
calldll #user32, "ShowWindow", hEd as ulong, 6 as long, rtn as long      ' minimizes the Editor


input " "; cr$(4); space$(30); "PRESS  <ENTER>  TO CLOSE :  "; aa

calldll #user32, "ShowWindow", hEd as ulong, 9 as long, rtnC as long     ' restores Editor
calldll #user32, "PostMessageA", hmain as ulong, _WM_CLOSE as long, _    ' closes Mainwin
        0 as long, 0 as long, rtn as void  :  end

' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

[SetUpMainwin]
calldll #user32, "GetActiveWindow", hmain as ulong
calldll #user32, "GetSystemMenu", hmain as ulong, 0 as long, hmenu as ulong
calldll #user32, "RemoveMenu", hmenu as ulong, _SC_CLOSE as long, _       ' disables CloseBox
       _MF_BYCOMMAND as long, rtn as long
cx = DisplayWidth-300  :  cy = DisplayHeight-75
calldll #user32, "SetWindowPos", hmain as ulong, 0 as long, 275 as long, 30 as long, _
        cx as long, cy as long, 0 as long, rtn as boolean
Return

Sub GetWdwTxt h
title$ = space$(256)
calldll #user32, "GetWindowTextLengthA", h as ulong, length as long
length = length+1
calldll #user32, "GetWindowTextA", h as ulong, title$ as ptr, length as long, rtn as long
title$ = left$(title$, rtn)
print " title of this window is  :  "; title$
End Sub

' = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

Function cr$(k)                             ' Gives k carriage returns [chr$(13)]
   for i = 1 to k
   cr$ = cr$; chr$(13)
   next i
End Function



Er zitten twee aardigheidjes in de gosub [SetUpMainwin]: het mainwin wordt met "SetWindowPos" hoogte en breedte gegeven. Dat kan ook met Liberty's <mainwin> command maar dan veranderen de Rows en Columns in de Setup van Liberty blijvend. En het afsluit kruisje dus.

Ik heb twee vragen :
Weet iemand een truc om "FindWindow" te gebruiken met alleen een deel van de window titel? Met het sterretje als wildcard had ik geen succes.
En : mag ik erop rekenen dat ik met "GetWindow" altijd 3 stappen terug moet, of zou dat kunnen varieren met een andere versie van Windows b.v.?

Vr groet,

George Pape.
glpape
 
Berichten: 83
Geregistreerd: za nov 08, 2008 5:32 pm

Keer terug naar API/DLL

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast

cron