Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Gewenst functie:
Update & Refresh van de desktop en elk open explorer venster.

Waarom:
Programma gemaakt die verborgen bestanden weergave aan/uit zet via het register.
Echter, de wijziging word pas van kracht na een update van de verschillende vensters.

Handmatig uitvoeren van de actie:
F5 in Window Vista = Update window + Redraw window
F5 in Windows XP = Redraw window
Rechtermuisknop/Refresh Vista+XP = Update window + Redraw window

Het bovenstaande omschrijft meteen het probleem, alleen een Refresh is niet genoeg.
Refresh word helaas zowel als vernieuwen als verversen gebruikt en dat maakt googlen lastig.

Het vinden van de hWnd is het probleem niet, de juiste codes versturen naar het venster wel.

Code:
PostMessage(ChildrenList.Item(X).ToInt32, WM_KEYDOWN, VK_F5, 0)

Deze code werkt prima in Vista met SysListView32 (maar vooralsnog niet met SysTreeView32).
De code refreshed alleen in XP en update niet.

Wat heb ik nog meer geprobeerd (o.a.):
InvalidateRect(), UpdateWindow(), RedrawWindow(), SendMesage ipv PostMessage.

Ik heb inmiddels al heel wat uren achter het scherm gespendeerd op jacht en het proberen van code om het voor mekaar te krijgen. Het lukt me niet vandaar deze post.

Wie kan mij helpen om programmatisch een venster (SysListView32/SysTreeView32) te vernieuwen en te verversen in Visual Basic 2008?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Moet je niet SHChangeNotify hebben?

Visual Basic .NET:
1
2
3
4
5
6
7
Private Declare Function SHChangeNotify Lib "Shell32.dll" (ByVal wEventID As _
Int32, ByVal uFlags As Int32, ByVal dwItem1 As Int32, ByVal dwItem2 As Int32) As Int32

...
...

SHChangeNotify(&H8000000, &H0, 0, 0)

Zie ook http://pinvoke.net/default.aspx/shell32/SHChangeNotify.html

Edit; oh en anders hier of hier even kijken.

[ Voor 29% gewijzigd door RobIII op 08-04-2011 09:20 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor de reactie RobIII.
Link1:
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, vbNull)
Lijkt niet te werken, dan is het onderstaande beter.
Link2:
SendMessage(HWND_BROADCAST, WM_COMMAND, 28931, 0)
SHChangeNotify(HChangeNotifyEventID.SHCNE_ASSOCCHANGED, HChangeNotifyFlags.SHCNF_IDLIST, IntPtr.Zero, IntPtr.Zero)
Dit werkt prima onder XP, zowel de desktop als de explorer window worden geupdated. Alleen de Treeview niet. Onder Vista word alleen de desktop geupdated.

Zo heb ik natuurlijk wel een werkend systeem, een postmessage voor Vista (en waarschijnlijk W7) en een SHChangeNotify voor XP. Dan blijft alleen het updaten van de Treeview over, maar dat is voor mij opzich geen probleem. Dit programma is vooral bedoeld voorals ik een gast-computer over de vloer krijg waarbij ik tijdelijk even de verborgen bestanden wil zien. Echter, mocht iemand nog een betere oplossing hebben dan sta ik daar geheel open voor.

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Een van Raymond Chens recente blogs gaat precies hier over. Waarschuwing: hij is niet al te diplomatiek over dit soort hacks.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
MSalters schreef op vrijdag 08 april 2011 @ 21:40:
Een van Raymond Chens recente blogs gaat precies hier over. Waarschuwing: hij is niet al te diplomatiek over dit soort hacks.
Ik ben ook niet erg happig op het versturen van F5. Liever zie ik een directe manier om het venster te vertellen dat de inhoud vernieuwd moet worden. Maar hoe doe je dat?

Edit:
Voor Windows7 moet de postmessage naar class DirectUIHWND.

[ Voor 7% gewijzigd door Verwijderd op 10-04-2011 01:24 ]