Gå til innhold

Lage skin til windows


Anbefalte innlegg

Hallo

 

Tenker på å lage et "skin" til windows her nå, men har en del spørsmål så jeg lurer på om noe har gjort det før? Hvordan få lista opp alle vinduene som er oppe o.l. Hvordan "end" prosesser i listen? sånne ting.

 

Noen som skjønner?

 

Edit: et sånt program er jo ganske stort så er det noe muligheter for å "adde" deler av programmet inn i et "hovedprogram" sånn at jeg kan gjøre ferdig en del av programmer og bruke det mens jeg holder på med en ny del? eventuelt lagre koder i text filer og henter de opp når det trengs :roll:

Endret av jonas22282460
Lenke til kommentar
Videoannonse
Annonse

Hvordan bruker jeg dll filer? har aldri vært borti de :blush:

 

Edit: hvordan lage dll filer egentlig?

 

Edit2: ser at noen har prøvd å vise det på PSC men ingen har komentert koden.. Blir som å lære seg kinesisk fra en japansk mann :p noen som har et lite ekempel på hvordan loade noe (dll txt e.l.) med kode inni og kjører den?

Endret av jonas22282460
Lenke til kommentar

Visual Basic kan bare lage Active X dller, skal du lage Windows skin, må du mest sannsynlig ha en del spesielle komandoer, men Visual Basic støtter bare et svakt klasse system, (ja, Viusal Basic støtter veldig lite av slike ting også)

 

Du må nok kikke litt på C++.

 

Som jeg har sagt ganske mange ganger før, skal du bruke Windows DLLer er API Text Viewer et utmerket verktøy, sammen med MSDN.

 

Funksjonen du spør etter heter EnumProcesses

 

Du kan ikke bruke den i Visual Basic, fordi Visual Basic sine arrays starter med 20 byte som forklarer hvordan arrayet er, men C++ trenger en peker (DWORD*)

Du kan ikke få tak i peker til variabler i VB (du kunne det i QB)

Lenke til kommentar

Skjønte ikke helt 'Visual Basic sine arrays starter med 20 byte' men med..

 

En på PSC har lagd dette og han hadde lista opp alle vinduer med sitt eget skin og ram (eller var det cpu?) usage o.l. så det skal jo funker..

 

Hva ville du egentlig frem til? At jeg bare skulle glemme hele greia?

Lenke til kommentar
Du kan ikke bruke den i Visual Basic, fordi Visual Basic sine arrays starter med 20 byte som forklarer hvordan arrayet er, men C++ trenger en peker (DWORD*)

Du kan ikke få tak i peker til variabler i VB (du kunne det i QB)

Ikke helt korrekt.

 

I EnumProcesses kan du ganske enkelt peke til det første elementet i f.eks en long array. (Med ByRef hvis du forstår hva jeg mener).

 

Og du kan faktisk få pekeren til en variabel med funskjonene VarPtr, StrPtr og ObjPtr. Disse er ikke fullstendig dokumentert, så det er ikke lett å oppdage dem, men de brukes relativt ofte.

 

Jeg ville brukt denne metoden for å liste opp alle processes:

 

Private Declare Function CreateToolhelp32Snapshot Lib "Kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function Process32First Lib "Kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "Kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "Kernel32" (ByVal hPass As Long)

Const TH32CS_SNAPHEAPLIST = &H1
Const TH32CS_SNAPPROCESS = &H2
Const TH32CS_SNAPTHREAD = &H4
Const TH32CS_SNAPMODULE = &H8
Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)
Const TH32CS_INHERIT = &H80000000
Const MAX_PATH As Integer = 260

Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type

Private Sub Form_Load()

Dim hSnapShot As Long, uProcess As PROCESSENTRY32, r&

hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&)

uProcess.dwSize = Len(uProcess)
r = Process32First(hSnapShot, uProcess)
Me.AutoRedraw = True

Do While r
Me.Print Left$(uProcess.szExeFile, IIf(InStr(1, uProcess.szExeFile, Chr$(0)) > 0, InStr(1, uProcess.szExeFile, Chr$(0)) - 1, 0))
r = Process32Next(hSnapShot, uProcess)
Loop

CloseHandle hSnapShot

End Sub

Lenke til kommentar

Først, legg til disse API-deklareringene:

 

Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hPass As Long) As Long

 

For å avslutte en process med koden jeg la ut, legg dette i DO-loopen.

 

If uProcess.szExeFile = <HVA DU LETER ETTER> Then
Ret = OpenProcess(&H1, 0&, uProcess.th32ProcessID)
TerminateProcess Ret, 0
CloseHandle Ret
End If

 

Husk også å legge til en Dim Ret As Long i begynnelsen av sub-en.

<Hva du leter etter> skal være EXE-navnet som brukeren har valgt til å avslutte fra f.eks en listbox.

Lenke til kommentar

Jeg fikk ikke helt til den siste koden din jeg :blush:

 

jeg fikk error på alle de 'Declare Function' så jeg la til 'private' forann. Gjorde det noe?

 

Dette er da form_load koden som ikke funker. Steam kjører fortsatt helt fint etter programmet er kjørt:

 

Private Sub Form_Load()
Dim Ret As Long
Dim hSnapShot As Long, uProcess As PROCESSENTRY32, r&

hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&)

uProcess.dwSize = Len(uProcess)
r = Process32First(hSnapShot, uProcess)


Do While r
If uProcess.szExeFile = "Steam.exe" Then
Ret = OpenProcess(&H1, 0&, uProcess.th32ProcessID)
TerminateProcess Ret, 0
CloseHandle Ret
End If
List1.AddItem Left$(uProcess.szExeFile, IIf(InStr(1, uProcess.szExeFile, Chr$(0)) > 0, InStr(1, uProcess.szExeFile, Chr$(0)) - 1, 0))
r = Process32Next(hSnapShot, uProcess)
Loop

CloseHandle hSnapShot

End Sub

Er det bare jeg som har blingsa litt?

Lenke til kommentar

Beklager, tabbe. Slik skal koden være:

 

Private Sub Form_Load()
Dim Ret As Long, ProcessName As String
Dim hSnapShot As Long, uProcess As PROCESSENTRY32, r&

hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&)

uProcess.dwSize = Len(uProcess)
r = Process32First(hSnapShot, uProcess)


Do While r
ProcessName = Left$(uProcess.szExeFile, IIf(InStr(1, uProcess.szExeFile, Chr$(0)) > 0, InStr(1, uProcess.szExeFile, Chr$(0)) - 1, 0))

If ProcessName = "Steam.exe" Then
Ret = OpenProcess(&H1, 0&, uProcess.th32ProcessID)
TerminateProcess Ret, 0
CloseHandle Ret
End If

List1.AddItem ProcessName
r = Process32Next(hSnapShot, uProcess)
Loop

CloseHandle hSnapShot

End Sub

Lenke til kommentar
Ta en titt på wincustomize.com

Der finner du ca 2700stk skins til windows. Det er også forskjellige guider/linker der.

Er det ikke bare skins der da? Jeg skal ikke lage et sånt skin.. Jeg skal lage et program som bare ligger oppå det vanlige. Om noen har dette ferdig lagd ute uten source så har ikke jeg noe nytte av det! jeg skal lage det ikke bare ha meg et nytt skin..

 

Hva er morsomt med å instalere et nytt skin når man kan lage sitt eget? ;)

 

Jeg gjør dette fordi det er gøy, ikke for å bruke det.. :ermm:

Lenke til kommentar
  • 1 måned senere...

Jeg regner med at det du mener er at du vil lage et eget shell til windows. Altså en erstatter for vår alles kjære explorer.exe. Det ligger maaaaaasse eksempler på nettet. Søk f.eks på planet-source-code etter "windows shell"..

Lenke til kommentar

Har sett der, og fått mye hjelp ja.

 

Men jeg har et problem til: siden jeg skal avslutte explorer så kan jeg jo ikke åpne noen mapper! Noen som vet om noe løsning til dette, eller må jeg bruke FileListBox og de kjedelige greiene?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...