20. maj 2003 - 10:53Der er
11 kommentarer og 1 løsning
Lukke et program vha Lingo
Hej Jeg har i meget lang tid nu forsøgt at lukke et program indenfra et andet program vha Buddy API Xtra'en... men den vil have et winhandle at lukke!
Det jeg skal gøre er at når man klikker på en knap skal den åbne et program som brugeren vælger, det går også godt nok, men så skal jeg også få programmet til at lukke det program igen, hvordan finder jeg ud af hvilket Winhandle det program brugeren har åbnet er? For det er åbenbart et winhandle Buddy API vil lukke! :(
Selvfølgelig hvis der er andre metoder så bruger jeg dem :)
Du ved jo hvilken application du har åbnet. Du kan søge på winhandle via Buddy med: baFindWindow(). Den tager 2 parametre, enten navnet du åbnede med eller vinduets titel. Når du har den kan du lukke den med baCloseApp()
fx. winHandle = baFindWindow("", "Notepad") if winHandle <> 0 then baCloseApp(winHandle) end if
Jaa... den havde jeg nu luret... Vi taler her om et menu-program. og husk at personen der har åbnet programmet indefra menuen kan jo ikke på forhånd have programmeret det ind i menu-programmet. Det jeg søger er en metode hvor computeren selv finder ud af hvilket winhandle der tilhører den fil som bliver åbnet... get it? :)
Men er det ikke dig der laver menu'en, enten med faste programmer eller dynamisk? Så snart bruger klikker på et menupunkt og launcher et program, så gemmer du navnet så du kan søge efter det senere. Evt. kan du også bruge baSetWindowTitle() til at kalde den noget unikt du kan søge på med baFindWindow("Notepad åbnet med lingo", "")
John alt det her er rigtigt nok og smart... men jeg vil gerne have at folk SELV skal kunne klikke på "kør program", også de vælger en tilfældig fil, og computeren så selv finder ud af hvilket nr (winhandle) det program har... det er her mit problem ligger :)
En anden løsning ville faktisk være at kunne åbne et program, også fortælle computeren at det nye vindue der åbnes skal hedde f.eks. "Prog 1" istedet for "notepad" eller hva det nu hedder...
Der er en ting ved din app. jeg ikke helt forstår: Har du genereret en liste med tilfældige filer eller browser bruger sin computer. Men lige meget hvad, så må du kunne søge på det navn du startede programmet med når du laver baRunProgram().
ellers prøv det her:
global gActiveWindow
on run prg, _state baRunProgram( prg, _state, false ) timeout("getActive").new(1, #getActiveWindow) end
on getActiveWindow win = baActiveWindow() if win <> baWinHandle() and win <> 0 then timeout("getActive").forget() _list = getWinNames()
ant = _list.count repeat with r = 1 to ant if _list.getPropAt(r) = win then gActiveWindow = _list[r] return end if end repeat gActiveWindow = -1 end if
Først åbner jeg et program så starter jeg et timeOut object, der hvert millisecond kører handleren getActiveWindow I den handler tester jeg på activeWindow som IKKE må være projectoren selv og IKKE må være 0. Hvis begge er sande sammenligner jeg alle navne i windowslisten med variablen win
Du ville jo gemme det program bruger åbnede, så du kunne referere til det senere ikke? Der kan være forsinkelse på focus af vinduet når det åbnes og så vil baActiveWindow() være 0, hvis der spørges lige efter. Hvis det nederste er fyldestgørende så er det fint, men hvornår og hvordan kaldes CloseApp??? Hvad sker der hvis bruger lukker vinduet selv?? Hmmm.. det kan være at jeg ikke fuldstændig har forstået opgaven ;-)
Jamen det er det fede ved det John... Hvis brugeren lukker det selv sker der ikke noget ved baCloseWindow! Den returnere bare et 0 ! :D Desuden er det jo ligemeget om det er i starten eller til sidst at den tjekker programmet... Jeg glemte i øvrigt at sige at det er et spil, og ikke et program brugeren starter! Dermed er det kun 1 vindue som kører fuld skærm :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.