Tray icon

Status
Niet open voor verdere reacties.

geertd

Gebruiker
Lid geworden
16 nov 2008
Berichten
340
Hallo allemaal,

Hoe kan ik met Visual Basic 2008 een applicatie maken die niet in de taakbalk staat, maar in het systeemvak wordt weergegeven?
En hoe kan ik dan zorgen dat terwijl het programma inactief is toch de toetsenbord snelkoppelingen (Alt-q) voor het programma werken?

Alvast bedankt,

Geert
 
Zoek je welleens op internet? Toen ik voor het eerst een applicatie wilde maken dat draait in de systray, wist ik ook niet waar ik moest beginnen. Ik ben toen gaan googlen en kwam al snel voorbeelden tegen. Echt, bijna elke programma maakt gebruik van de systray, dus het is niet zo gek dat er veel tutorials over te vinden zijn.

Dus kom op, ik weet zeker dat je iets zult vinden.

Ik kan je alvast vertellen wat je nodig hebt: een NotifyIcon control.

Wat je tweede vraag betreft, dat ligt wat minder eenvoudig, maar niet onmogelijk. Ik zal je vertellen hoe je dit voor elkaar moet krijgen zodra je een werkende systray applicatie hebt.
 
Hey,

Ik heb het form af. Ik was alleen eigenlijk van plan om in te stellen dat de [Esc] toets de snelkoppeling was.

Ik wou dit doen door een ContextMenuStrip aan te maken en daar een KeyboardShortcut in te stellen op Esc. Er stonden heel veel snelkoppelingen bij, maar ik kon Escape echt niet kiezen.

Is er niet een mogelijkheid dat ik wel de [Esc] toets als toetsenbordsnelkoppeling kan gebruiken?

Ook heb ik mijn NotifyIcon al af. Ik heb heel lang zitten zoeken op internet... Niets werkte. Later kwam ik erachter dat Visual Basic Express 2008 (dus niet VB6) daar zelf een functie voor heeft gemaakt.

Maar eh, hoe kan ik nu instellen dat als je op de [Esc] toets (of als dat niet kan een andere toets) de bijbehorende code van mijn programma wordt uitgevoerd? OOK wanneer mijn programma in de System Tray staat, dus inactief [ Me.Hide() ] is?

Alvast heel erg bedankt,

Geert
 
Maar eh, hoe kan ik nu instellen dat als je op de [Esc] toets (of als dat niet kan een andere toets) de bijbehorende code van mijn programma wordt uitgevoerd? OOK wanneer mijn programma in de System Tray staat, dus inactief [ Me.Hide() ] is?

Volgens mij kan je dat op verschillende manieren doen. Ik bij een programma van mij gebruik gemaakt van een custom contol die je hier kan downloaden:

http://www.themightyatom.nl/stuff/WindowsHookLib.dll

Deze laadt je in je toolbox, vervolgens plaats je een keyboardhook control op je form, plaats de code die je wilt laten uitvoeren onder het keyboardhook event. Zet deze wel onder een if statement van:

if e.keychar = escape then

Vervolgens zet je de KeyPreview property van je form op true.
 
Wanneer ik die If regel van jou intypt krijg ik fouten:

'Keychar' is not a member of 'WindowsHookLib.StateChangedEventArgs'
en
Name 'escape' is not declared

Hoe kan ik dit oplossen?
 
Ja ik deed dat effe uit mn hoofd. Ik zal VB eens opstarten...

Ah, dat verklaart het...
Ik was een onderdeeltje vergeten.

Je moet de keyboardhook "installeren". Dat doe je door

KeyboardHook.Install

in dezelfde sub te zetten waar je ook de code hebt staan voor het hiden van je form en het activeren van de systray icon.

Dan doe je, onder het KeyDown event van de keyboardhook:

If e.KeyCode = Keys.Escape Then
'Jouw code hier
End If

En als laatste, als je de systrayicon weer uitzet en het form weer zichtbaar maakt, doe je simpelweg:

KeyboardHook.Dispose

Vetgeet niet KeyPreview op True te zeten.
 
Wauw, heel erg bedankt!!!
Het werkt!

Nu heb ik eigenlijk nog een klein vraagje:

Ik wil het zo maken dat wanneer je op een button klikt, de inhoud van de Temporary Internet Files in de map Local Settings wordt gewist. De code om te wissen heb ik al.

Ik moet alleen nog de locatie instellen. Dit wilde ik doen dmv My.Computer.Filesystem.SpecialDirectories. Alleen is de temp map die daarin staat is de map in de WINDOWS locatie.

Nu ik trouwens Windows 7 heb kan ik de map niet eens meer bij Local Settings vinden...

Hoe kan ik dit toch maken?
 
Nog even over dat KeyboardHook.

Ik had net als code ingesteld: Me.Show() dat werkt prima.

Nu ik echter een zelfgemaakt sub (KillProcess) aanvraag:

Code:
Me.Show()
KillProcess("Iexplore.exe")
KillProcess("Chrome.exe")
Me.Hide

wordt het form wel weergegeven en weer verborgen, maar het KillProcess gedeelte wordt blijkbaar niet uitgevoerd....

Ook wordt er geen runtime error of iets anders door VB gegeven wanneer ik debug.

Waar kan dit dan aan liggen?
 
Mogelijk moet je het volledige pad opgeven.

Probeer ook:

Kill("Iexplore.exe")
Kill("Chrome.exe")
 
Maar ik heb ook een button op dat form met precies dezelfde code.
Dus ook:

Code:
KillProcess("Iexplore.exe")
KillProcess("Chrome.exe")

En wanneer ik op die button klik werkt alles wel...
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan