Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Windows XP - Systray-Leiste automatisch aktualisieren

Frage Entwicklung VB for Applications

Mitglied: uroveits

uroveits (Level 1) - Jetzt verbinden

31.12.2007, aktualisiert 07.01.2008, 6551 Aufrufe, 7 Kommentare

Hallo !

Meine Frage bzw. Problem bezieht sich auf die Systray-Leiste (für Windows XP). Mein Problem ist folgendes:
Ich habe eine Batch-Datei bzw. ein VB-Skript erstellt, dass einen Prozess (d.h. Programm) beendet und nach Abarbeitung bestimmter Punkte diesen Prozess wieder aufruft.
Danach erscheint das Symbol für diesen Prozess zweimal im Systray:
1. Mal: "altes" Symbol wird nach Beenden des Prozeesse nicht gelöscht.
2. Mal: Starten des Prozesses.
Wenn ich nun die Systray-Leiste mit der Maus komplett anzeigen lasse, verschwinden die zwei Symbole und es bleibt nur ein (1) Symbol übrig.
Ich möchte nun wissen, ob es eine Möglichkeit gibt, dass die Systray-Leiste automatisch aktualisiert wird (ohne dass ich mit der Maus "ran" muss).


Folgendes VB-Skript verwende ich:
01.
Dim oWMI, sQuery, Proz, Task 
02.
On Error Resume Next 
03.
Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate,(debug)}") 
04.
sQuery = "select * from win32_process where name = '" & "<Programm>" & "'" 
05.
Set Task = oWMI.ExecQuery(sQuery) 
06.
For Each Proz In Task 
07.
Proz.Terminate 0 
08.
Next
Vielen Dank im Voraus.
Mitglied: misterdemeanor
04.01.2008 um 14:52 Uhr
Grüß Dich,

also mit Win Boardmitteln fällt mir da leider auch nichts ein. Bzw. eben nur über die Win-Api, also eine kleine .Exe proggen die Du dann aus Deinem Skript aufrufst.

Exe sollte schnell getippt sein:

Finden des "SysPager" Handles und ein UpdateWindow Aufruf.

Aber vielleicht kennt ja doch jemand eine bessere Methode...viell. in Richtung Shell...

bg, Felix -misterdemeanor-
Bitte warten ..
Mitglied: uroveits
04.01.2008 um 15:39 Uhr
Hallo Felix,

erst einmal vielen Dank für Deinen Vorschlag.
Exe sollte schnell getippt sein:
Finden des "SysPager" Handles und ein UpdateWindow Aufruf.
Leider kann ich mit der Information auf UpdateWindow nichts anfangen, da ich von den dort besprochenen Punkten keine Ahnung habe. Ich möchte daher anfragen, ob Du Deinen Vorschlag hier darstellen könntest.

Gruß

uroveits
Bitte warten ..
Mitglied: misterdemeanor
04.01.2008 um 15:55 Uhr
Hi,

bei "UpdateWindow" handelt es sich um eine API-32 Funktion die das neuzeichnen eines /Bereiches/ bewirkt. In deinem Fall wäre dieser /Bereich/ eben der /Systray/. Um diesen zu "finden" wäre ein voriger Aufruf einer anderen API-Funktion nötig : FindWindow(...) .

Dummerweise lassen sich API-Funktionen nicht aus einem /Skript/ heraus aufrufen, deswegen müsstest Du mit einer Programmiersprache die kompilierte .Exe Dateien erstellen kann und WIN-32 APi kompatibel ist diesen Zwischenweg einschlagen.

Jetzt weiß ich nicht welche Programiersprache(n) Dir zu Verfügung stehen, kostenlos aber eher Overkill wäre da eine /.Net/ Sprache. Persönlich würde ich das schnell in VB6 tippen, steht mir momentan aber nicht zur Verfügung...
Bitte warten ..
Mitglied: uroveits
04.01.2008 um 16:20 Uhr
Hallo Felix,

Overkill wäre da eine /.Net/ Sprache.
Overkill kenne ich nicht. Einarbeitungszeit rechtfertigt nicht den Benefit.

Persönlich würde ich das schnell in VB6 tippen
Klingt gut. Aber ich verstehe zum einen nicht, warum dies funktionieren sollte. Du hast doch weiter oben gesagt:
Dummerweise lassen sich API-Funktionen nicht aus einem /Skript/ heraus aufrufen
Ist das kein Widerspruch ?
Oder willst Du das von Dir vorgeschlagene Skript kompilieren und als exe-Datei in mein Skript einbinden ?

Zum anderen hätte ich gerne gewußt, was Du in VB6 eintrippen würdest. Vielleicht kannst Du dies bei Gelegenheit posten. Oder noch besser: exe-Datei mailen.

Danke

uroveits
Bitte warten ..
Mitglied: misterdemeanor
06.01.2008 um 20:46 Uhr
Hallo Felix,

Hallo uroveits,

>> Overkill wäre da eine /.Net/ Sprache.

Overkill kenne ich nicht. Einarbeitungszeit
rechtfertigt nicht den Benefit.

eben.

>> Persönlich würde ich das schnell in VB6 tippen

Klingt gut. Aber ich verstehe zum einen
nicht, warum dies funktionieren sollte. Du
hast doch weiter oben gesagt:
>> Dummerweise lassen sich API-Funktionen nicht aus einem /Skript/ heraus aufrufen

deswegen (zB) in Visual Basic 6 eine Exe erstellen. VB6 hat mit VBS (direkt) nichts zu tun. Natürlich Syntax-mäßig praktisch identisch aber eben eine Programmiersprache.

Ist das kein Widerspruch ?

^^Nein.

Oder willst Du das von Dir vorgeschlagene
Skript kompilieren und als exe-Datei in mein
Skript einbinden ?

Wie im ersten Post geschrieben: Exe kompilieren (in zB VB6) und aus dem Skript heraus aufrufen.,


Zum anderen hätte ich gerne
gewußt, was Du in VB6 eintrippen
würdest. Vielleicht kannst Du dies bei
Gelegenheit posten.

So, mit meinem Vorschlag der API-Funktion UpdateWindow(...) funktioniert es ohnehin nicht. Windows scheint in dem /Systray/ tatsächlich nur auf Mausereignisse zu reagieren. Aber mit API lässt sich ja auch dies programmtechnisch bewältigen (SendMessage("MOUSEMOVE@"...).

Und wie ich meine Leute auf ActiveVB kenne, hat sich schon jemand mit Deinem/Unseren Problem auseinandergesetzt. Fertiges Modul. Nur als Konsolenprogramm kompilieren...fertig. Eine Windowsversion-Check Routine ist bereits integriert-->Win98/NT-->NT;2K;XP haben im enstprechenden /Systray-Bereich/ kleine Unterschiede.

Oder noch besser:
exe-Datei mailen.

Wow, da danke ich Dir aber für Dein Vertrauen . Jetzt habe ich noch nicht einmal nach "vb6 compiler" gegoogled, aber wenn Du dieses enorme Risiko eingehen willst schicke ich Dir eine kompilierte Konsolenversion von der fertigen Vorlage von Activevb.de.


Danke

Bitte.

BG, Felix -mrdemeanor-
Bitte warten ..
Mitglied: uroveits
06.01.2008 um 23:44 Uhr
Hallo Felix,

erst einmal vielen Dank für Deine Bemühungen.

Wow, da danke ich Dir aber für Dein Vertrauen
Im Rahmen unseres Dialogs habe ich doch glatt vergessen, dass ich mich im Internet befinde. Dein Hinweis bzgl. einer exe-Datei ist natürlich vollkommen gerechtfertigt.
Ich möchte daher anfragen, ob es möglich ist, das "fertige Modul" als Text zu posten. Ich möchte nicht die zip-Datei öffnen, da ich etwas unsicher geworden bin, ob sich nicht doch jemand einen kleinen Spaß erlaubt.

Gruß

uroveits
Bitte warten ..
Mitglied: misterdemeanor
07.01.2008 um 06:19 Uhr
Hi uroveits,

konnte den Author nicht ausfindig machen, aber wie geschrieben, stammt dieses Modul von ActiveVB.de.

01.
Option Explicit 
02.
 
03.
'Messagekonstante 
04.
Private Const WM_MOUSEMOVE = &H200 
05.
 
06.
'Strucktur mit den Fensterabmaßen 
07.
Private Type RECT 
08.
    Left As Long 
09.
    Top As Long 
10.
    Right As Long 
11.
    Bottom As Long 
12.
End Type 
13.
Dim hSystray As Long 
14.
 
15.
Private Declare Function GetVersionEx Lib "kernel32.dll" Alias "GetVersionExA" (lpVersionInformation As Any) As Long 
16.
Private Type OSVERSIONINFO 
17.
    dwOSVersionInfoSize As Long 
18.
    dwMajorVersion As Long 
19.
    dwMinorVersion As Long 
20.
    dwBuildNumber As Long 
21.
    dwPlatformId As Long 
22.
    szCSDVersion As String * 128 ' Maintenance string for PSS usage 
23.
End Type 
24.
 
25.
Private Type OSVERSIONINFOEX 
26.
    dwOSVersionInfoSize As Long 
27.
    dwMajorVersion As Long 
28.
    dwMinorVersion As Long 
29.
    dwBuildNumber As Long 
30.
    dwPlatformId As Long 
31.
    szCSDVersion As String * 128  ' Maintenance string for PSS usage 
32.
    wServicePackMajor As Integer 
33.
    wServicePackMinor As Integer 
34.
    wSuiteMask As Integer 
35.
    bProductType As Byte 
36.
    bReserved As Byte 
37.
End Type 
38.
 
39.
Private Const VER_NT_DOMAIN_CONTROLLER As Long = &H2 
40.
Private Const VER_NT_SERVER As Long = &H3 
41.
Private Const VER_NT_WORKSTATION As Long = &H1 
42.
 
43.
Private Const VER_SUITE_BACKOFFICE As Long = &H4 
44.
Private Const VER_SUITE_BLADE As Long = &H4 
45.
Private Const VER_SUITE_COMMUNICATIONS As Long = &H8 
46.
Private Const VER_SUITE_DATACENTER As Long = &H80 
47.
Private Const VER_SUITE_EMBEDDEDNT As Long = &H40 
48.
Private Const VER_SUITE_ENTERPRISE As Long = &H2 
49.
Private Const VER_SUITE_SINGLEUSERTS As Long = &H100 
50.
Private Const VER_SUITE_SMALLBUSINESS As Long = &H1 
51.
Private Const VER_SUITE_SMALLBUSINESS_RESTRICTED As Long = &H20 
52.
Private Const VER_SUITE_TERMINAL As Long = &H10 
53.
Private Const VER_SUITE_PERSONAL As Long = &H200 
54.
Private Const VER_SUITE_SERVERAPPLIANCE As Long = &H400 
55.
 
56.
Private Const VER_PLATFORM_WIN32_NT As Long = 2 
57.
Private Const VER_PLATFORM_WIN32_WINDOWS As Long = 1 
58.
Private Const VER_PLATFORM_WIN32s As Long = 0 
59.
 
60.
Private Declare Function GetVersion Lib "kernel32.dll" () As Long 
61.
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long 
62.
Private Declare Function GetClientRect Lib "user32.dll" (ByVal hwnd As Long, lpRect As RECT) As Long 
63.
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 
64.
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 
65.
 
66.
 
67.
Private Function Refresh(ByVal hTray As Long) As Boolean 
68.
Dim x As Long, rRect As RECT, z As Long 
69.
 
70.
If hTray = 0 Then Exit Function 
71.
'Größe des Fensters ermitteln 
72.
x = GetClientRect(hTray, rRect) 
73.
 
74.
'Zeilenweise durchgehen 
75.
For z = 0 To (rRect.Bottom / 20) - 1 
76.
    'zu jerder x Position ein MouseMove senden 
77.
    For x = 0 To rRect.Right 
78.
        SendMessage hTray, WM_MOUSEMOVE, 0, ByVal ((((z * 20) + 10) * &H10000) Or x) 
79.
    Next 
80.
Next 
81.
Refresh = True 
82.
 
83.
End Function 
84.
Private Function FindSysTray() As Long 
85.
Dim h1 As Long, h2 As Long, h3 As Long 
86.
'Handle vom Tray suchen 
87.
h1 = FindWindow("Shell_TrayWnd", vbNullString) 
88.
If h1 <> 0 Then 
89.
    'Handle vom TrayNotify ermitteln 
90.
    h2 = FindWindowEx(h1, 0, "TrayNotifyWnd", vbNullString) 
91.
    If (GetBS > 14) Or (GetBS = 5) Then 
92.
        If GetBS > 15 Then h2 = FindWindowEx(h2, 0, "SysPager", vbNullString) 
93.
        If h2 <> 0 Then 
94.
            'Handle von der Toolbar ermitteln 
95.
            h3 = FindWindowEx(h2, 0, "ToolbarWindow32", vbNullString) 
96.
            FindSysTray = h3 
97.
        End If 
98.
    Else 
99.
        FindSysTray = h2 
100.
    End If 
101.
End If 
102.
 
103.
End Function 
104.
Private Function GetBS() As Long 
105.
Dim WinVer As String 
106.
Dim udtOS As OSVERSIONINFO 
107.
 
108.
udtOS.dwOSVersionInfoSize = Len(udtOS) 
109.
 
110.
Call GetVersionEx(udtOS) 
111.
 
112.
Debug.Print udtOS.dwBuildNumber 
113.
Debug.Print udtOS.dwMajorVersion 
114.
Debug.Print udtOS.dwMinorVersion 
115.
Debug.Print udtOS.szCSDVersion 
116.
 
117.
Select Case udtOS.dwPlatformId 
118.
    Case VER_PLATFORM_WIN32_NT 
119.
        If udtOS.dwMajorVersion = 3 Then 
120.
            GetBS = 13 'NT 3.51 
121.
        ElseIf udtOS.dwMajorVersion = 4 Then 
122.
            GetBS = 14 'NT 4.0 
123.
        ElseIf udtOS.dwMajorVersion = 5 Then 
124.
            If udtOS.dwMinorVersion = 0 Then 
125.
                GetBS = 15 'Win2000 
126.
            ElseIf udtOS.dwMinorVersion = 1 Then 
127.
                GetBS = 16 'WinXP 
128.
            ElseIf udtOS.dwMinorVersion = 2 Then 
129.
                GetBS = 17 'Win .NET/2003 
130.
            End If 
131.
        End If 
132.
    Case VER_PLATFORM_WIN32_WINDOWS 
133.
        If udtOS.dwMinorVersion = 0 Then 
134.
            GetBS = 3 'Win 95 
135.
        ElseIf udtOS.dwMinorVersion = 10 Then 
136.
            GetBS = 4 'Win 98 
137.
        ElseIf udtOS.dwMinorVersion = 90 Then 
138.
            GetBS = 5 'Win ME 
139.
        End If 
140.
    Case VER_PLATFORM_WIN32s 
141.
        GetBS = 1 
142.
End Select 
143.
 
144.
End Function 
145.
Public Function SysTrayRefresh() As Boolean 
146.
 
147.
'Fensterhandle vom Systray ermitteln 
148.
hSystray = FindSysTray 
149.
'Systray refreshen 
150.
If Refresh(hSystray) Then SysTrayRefresh = True 
151.
End Function 
152.
Property Get hwnd() As Long 
153.
hwnd = hSystray 
154.
End Property 
155.
Public Function BSInfo() As String 
156.
Dim WinVer As String, lngBS As Long 
157.
Dim udtOSEX As OSVERSIONINFOEX, udtOS As OSVERSIONINFO 
158.
 
159.
lngBS = GetBS 
160.
 
161.
udtOS.dwOSVersionInfoSize = Len(udtOS) 
162.
udtOSEX.dwOSVersionInfoSize = Len(udtOSEX) 
163.
 
164.
If lngBS > 13 Then 
165.
    If GetVersionEx(udtOSEX) Then 
166.
        If (udtOSEX.bProductType And VER_NT_WORKSTATION) Then 
167.
            If lngBS > 14 Then 
168.
                WinVer = " Profesional" & vbCrLf 
169.
            Else 
170.
                WinVer = " Workstation" & vbCrLf 
171.
            End If 
172.
        Else 
173.
            WinVer = " Server" & vbCrLf 
174.
        End If 
175.
        If (udtOSEX.wSuiteMask And VER_SUITE_PERSONAL) Then WinVer = "Home Edition" 
176.
        WinVer = WinVer & udtOSEX.szCSDVersion 
177.
    Else 
178.
        Call GetVersionEx(udtOS) 
179.
        WinVer = WinVer & udtOS.szCSDVersion 
180.
    End If 
181.
End If 
182.
 
183.
If lngBS = 1 Then BSInfo = "Win32s" 
184.
If lngBS = 3 Then BSInfo = "Win 95" 
185.
If lngBS = 4 Then BSInfo = "Win 98" 
186.
If lngBS = 5 Then BSInfo = "Win ME" 
187.
If lngBS = 13 Then BSInfo = "Win NT 3.51" & WinVer 
188.
If lngBS = 14 Then BSInfo = "Win NT 4.0" & WinVer 
189.
If lngBS = 15 Then BSInfo = "Win 2000" & WinVer 
190.
If lngBS = 16 Then BSInfo = "Win XP" & WinVer 
191.
If lngBS = 17 Then BSInfo = "Win 2003/.NET" & WinVer 
192.
 
193.
End Function 
194.
 
bg, Felix
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows XP
gelöst WPA2 unter Windows XP SP1 nutzen? (10)

Frage von bestelitt zum Thema Windows XP ...

Windows XP
Kann man noch neue Notebooks für Windows XP kaufen ? (9)

Frage von DieterJansen zum Thema Windows XP ...

Microsoft Office
gelöst Excel oder google Sheets automatisch aktualisieren bei neuen Werten? (14)

Frage von Stoffn zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...