Avatar billede sion Nybegynder
25. august 2002 - 17:35 Der er 10 kommentarer og
1 løsning

Find højden af proceslinjen

Tja, titlen taler jo næsten for sig selv. Hvordan finder man højden af proceslinjen (baren i bunden af skærmen :D) ?
-Sion
Avatar billede kedde65 Praktikant
25. august 2002 - 17:40 #1
Tilføj den control der hedder Microsoft Sysinfo Control 6.0 herefter kan du så bruge følgende kode til at afgøre den sag.

Private Sub Command1_Click()
    MsgBox Screen.Height - SysInfo1.WorkAreaHeight
End Sub

vh ck
Avatar billede sion Nybegynder
25. august 2002 - 19:52 #2
*ahem* Gerne med API-kald, tak
Avatar billede sion Nybegynder
25. august 2002 - 20:00 #3
...for programmet skal gerne kunne køre uden at skulle installere ekstra OCX's :D
Avatar billede kedde65 Praktikant
25. august 2002 - 20:20 #4
Den OCX den ligger også på alle systemer som standard. Men bare afvis mit iøvrigt rigtige svar på dit oprindelige spørgsmål. Jeg kender ikke noget API kald der kan klare det.
VH CK
Avatar billede sion Nybegynder
25. august 2002 - 21:26 #5
CK -> Hehe, små slag! Det var da alt du behøvede at sige, så hvis du opretter et svar kan du få dine (velfortjente) point. Troede faktisk godt at man kunne give points til et svar man tidligere havde afslået, men nok om det...
-Sion
Avatar billede krismort Nybegynder
25. august 2002 - 22:09 #6
Jeg kender et APIopkald der kan gøre det
Avatar billede krismort Nybegynder
25. august 2002 - 22:23 #7
kedde65: Faktisk så er dit svar ikke korrekt !
Du finder kun størrelsen (højden) af det rect der angiver hvor du kan have ikoner på skrivebordet. Det betyder at hvis du har et andet program kørende som ændrer på workarea ligesom ICQ. så vil du få et forkert resultat.

Hvis du skal finde højden af Tray(Processlinien) så kan du bare finde hwnd'et til det og aflæse dets rect

Type RECT
    left As Long
    top As Long
    right As Long
    bottom As Long
End Type

Declare Function GetWindowRect Lib "user32.dll" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Function GetTrayHwnd() As Long
    GetTrayHwnd = FindWindow("Shell_TrayWnd", "")
End Function

public function GetTrayHeight() as long
Dim r As RECT 
dim ret as long
ret  = GetWindowRect(GetTrayHwnd(), r)
GetTrayHeight = r.bottom - r.top
end function
Avatar billede krismort Nybegynder
25. august 2002 - 22:29 #8
hvis du gerne vil bruge kedde65's metode som API opkald kan du gøre flg.

Declare Function SystemParametersInfo Lib "user32.dll" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uiParam As Long, pvParam As Any, ByVal fWinIni As Long) As Long

Type RECT
    left As Long
    top As Long
    right As Long
    bottom As Long
End Type

const SPI_SETWORKAREA = 47

public func() as long
  dim WrkArea as RECT
  SystemParametersInfo SPI_SETWORKAREA, 0, wrkArea, 0
  msgbox (Screen.Height/15) - (WrkArea .bottom - WrkArea .top)
end function
Avatar billede sion Nybegynder
26. august 2002 - 15:23 #9
krismort-> Det ser satme godt ud, men hvad er forskelligen på de to forslag? I øvrigt kan jeg heller ikke få det andet forslag til at virke; siger at 'SPI_SETWORKAREA' er "Invalid Outside Procedure".
-Sion
Avatar billede krismort Nybegynder
26. august 2002 - 20:28 #10
Jeg har ikke testet noget af de eksempler men jeg kan se at der er en fejl under deklaratinoen af proceduren func() der skal stå function inden func()

Forskellen på de to måder er entligt ganske simpel.. Metode nummer2 altså sidste indlæg eller den som kedde65 osse har forslået, finder bare højden på arbejdssområdet af skærmen. Derefter trækker vi hele skærmens højde fra arbejdsområdet.. normalt vil du så få processliniens højde MEEEN hvis du starter eller har et program kørende der ændrer på arbejdsområdets højde så vil du ikke længerer få et korrekt resultat på¨højden af processlinien... resultatet vil simpelt blive for stort... ICQ er et af de programmer der ændrer på arbejdsområdet... men ICQ har dog ikke nogen betydning for ICQ ændrer ikke højden men feks. office olign har en lille menubar som kan sættes i toppen af skærmen og den ændrer osse på arbejdsomrpådet...
Den første metode jeg foreslog er såre simpel ... det er det samme som at tage højden på en form i visual basic.. bare med API opkald... Processlinien er osse en form og jeg finder dens hwnd ved at søge på dens klassenavn "TRAYHWND" (på engelsk hedder den ikke processlinien men Tray!)
Derefter overfører jeg processlinien til et rektangel der svarer til dets størrelse.. aflæser og aflæser højden ved at finde forskellen mellem mellem koordinaterne til vinduet ... delta tror jeg nok det hedder på matematisk!

Kristian
Avatar billede sion Nybegynder
26. august 2002 - 20:34 #11
Kristian -> Holy shit - det har du satme styr på! Du er nu den lykkelige ejer af 30 ekstra points!
MVH
Sion
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester