Entwickler-Ecke

Windows API - TNA aktualisieren


carsten - Mi 14.05.03 13:41
Titel: TNA aktualisieren
Hi
ich habe folgendes grundsätzliches Problem:
Damit ich meine Maustasten auch in Spielen nehmen kann, hab ich mir ein Programm geschrieben, dass die Registryeinträge der Logitech Mouseware ändert. Um die Änderungen zu aktivieren muss ich die Mouseware beenden und dann wieder neu starten (das klappt auch ganz gut). Allerdings bleibt nach dem Schliessen der Mouseware das Icon im Tray zurück und verschwindet erst wenn man mit der Maus darüber fährt.

Meine Frage ist nun, wie kann ich die TNA mit Delphi aktualisieren, dass das Mausicon sofort verschwindet.

carsten


BungeeBug - Mi 14.05.03 13:47

Einmal F5 ... anders wärs ja nur umständlich
z.B.: Erst nen Progie Starten ...

oder wenn dus unbedingt mit nem Proggie machen willst dann würd ich vorschlagen Maus position "speichern", Bildschirmauflösung herausfinden , Maus übers SysTray laufen lassen und die Maus wieder zurück.

Aber wiegesagt das ist UMSTÄNDLICH :)

MfG BungeeBug


Delete - Mi 14.05.03 13:53

Wie beendest du die Mouseware? Ich nehme mal an, dass die Mouseware das icon im WM_CLOSE-zewig der Fensterprozedur entfernt. Wenn du jetzt mit TerminateProcess die Anwendung abschießt, bekommt die Mouseware kein WM_CLOSE und das Icon wird nicht entfernt.
Es leigt also nicht am Programm oder an Windows, sondern an dir, wie du mit der Anwendung umspringst.


carsten - Mi 14.05.03 16:19

Hi
ich verwende terminateprocess um die mouseware zu beenden.
Wenn es aber eine bessere Möglichkeit gibt, wäre ich dafür dankbar. Allerdings läuft die Mouseware als Prozess von dem ich nur den Namen weis.


thebe - Mi 14.05.03 17:24

TerminateProcess zerschießt den Prozess auf rabiate Weise, das Programm kann dann nicht mehr reagieren und das Icon ausser Taskleiste holen. Wie wärs wenn du nen WM_CLOSE an das Fenster schickst ?


carsten - Mi 14.05.03 17:52

also ich habs mal so versucht


Quelltext
1:
sendmessage(openprocess(PROCESS_TERMINATE,true,getprocessid),WM_close,0,0);                    


geht aber leider nicht


BungeeBug - Mi 14.05.03 17:59

Ich hab das noch nie ausprobiert ... aber wie weis das Programm welche ID es killen soll? ... das geht aus dem Code nicht hervor ....


MfG BungeeBug


Delete - Mi 14.05.03 18:04

Das kann nicht gehen. OpenProcess liefert dir einen Handle auf einen Prozess. Du brauchst aber für SendMessage und WM_CLOSE eine Fenster-Handle.


carsten - Mi 14.05.03 18:13

und wie bekomme ich dann das Handle des Fensters wenn ich blos den Namen des prozesses kenne (EM_EXEC.EXE).