Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: uroveits

uroveits (Level 1) - Jetzt verbinden

31.12.2007, aktualisiert 07.01.2008, 6655 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 ..
Ähnliche Inhalte
Windows Server
Internet-Statusanzeige im Systray
Frage von Winfried-HHWindows Server1 Kommentar

Hallo in die Runde! Woran erkennt Windows eigentlich (oder meint zu erkennen), ob der Rechner mit dem Internet verbunden ...

Windows XP
Windows XP virtualisieren
gelöst Frage von 129995Windows XP10 Kommentare

Hallo, ich habe folgendes Problem. Ich habe ein Acronis 2014 Backup (.tib-Datei) in eine vmdk.Datei umgewandelt um diese einer ...

Festplatten, SSD, Raid
Windows XP klonen
Frage von alpardacFestplatten, SSD, Raid3 Kommentare

Hallo, ich möchte einen Windows XP Rechner physisch klonen und habe Bedenken ob der Klon mit der neuen Hardware ...

Drucker und Scanner

Windows Scans automatisch auf Desktop speichern

Frage von nistraDrucker und Scanner3 Kommentare

Hallo zusammen. Ich habe ungefähr drei Stunden gesucht/gegoogelt ( falls mal jemand was schreiben sollte) Problem: Ich benutze wfs, ...

Neue Wissensbeiträge
Humor (lol)
Administrator.de Perlen
Tipp von DerWindowsFreak2 vor 1 TagHumor (lol)3 Kommentare

Hallo, Heute beim stöbern auf dieser Seite bin auf folgenden Thread aus dem Jahre 2006 gestossen: Was meint ihr? ...

Erkennung und -Abwehr
OpenSSH-Backdoor Malware erkennen
Tipp von Frank vor 2 TagenErkennung und -Abwehr

Sicherheitsforscher von Eset haben 21 Malware-Familien untersucht. Die Malware soll Hintertüren via OpenSSH bereitstellen, so dass Angreifer Fernzugriff auf ...

iOS
WatchChat für Whatsapp
Tipp von Criemo vor 5 TageniOS5 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor!
Tipp von Criemo vor 6 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Heiß diskutierte Inhalte
Festplatten, SSD, Raid
SSD zeigt falsche Werte
Frage von karl2014Festplatten, SSD, Raid25 Kommentare

Ich habe ein Problem mit der SSD in meinem Laptop mit Windows 10. Es ist eine 1Tb Platte die ...

Grafikkarten & Monitore
PCIe 1.0 Grafikkarte für 3840x2160
Frage von Windows10GegnerGrafikkarten & Monitore24 Kommentare

Hallo, mein Vater hat einen neuen Monitor gekauft, welcher eine native Auflösung von 3840*2160 hat. Diese muss jetzt auch ...

Windows 10
Windows Enterprise 1809 Eval nicht bootbar
Frage von Sunny89Windows 1022 Kommentare

Hallo zusammen, bevor ich mich jetzt noch stundenlang rumärger wollte ich euch fragen, ob Ihr die gleichen Probleme habt ...

Ubuntu
Installation freerdp 2.0.0-rc4
Frage von kristovUbuntu20 Kommentare

Hallo, möchte freerdp 2.0.0-rc4 auf linux mint 18.3 installieren, habe aber keine Ahnung, wie das funktioniert. freerdp 1.1 ist ...