eine frage zu desktop icons und fenster identifikation
-
also, ich hab 2 fragen, auf die mir leider auch die suche und msdn keine antwort bringen konnte(oder ich war einfach zu dumm dazu^^).
ich möchte folgendes machen:
LVHITTESTINFO info; LVITEM item; item.iSubItem=0; HWND desktop=GetDesktopWindow(); //... SendMessage(desktop,LVM_HITTEST,0,(LPARAM)&info); //... SendMessage(desktop,LVM_GETITEMTEXT,info.iItem,&item);ich möchte also rauskriegen,ob und wo ein desktopicon geklickt wurde, und seinen namen rausbekommen. das problem ist aber, dass ich nicht im selben prozess wie der desktop bin, ich weis, dass das irgendwie mit hooking gehen soll, aber ich hab keine ahnung wie...
gibt es eine möglichkeit,ein fenster eindeutig zu bestimmen, sodass man es im selben kontext auf einem anderen pc wieder erkennen kann? Das heisst, wenn ich in einem installationsprogramm in textfeld x etwas eingebe, das programm das textfeld später bei einer erneuten installation das textfeld selbstständig erkennt? ich habs mit dem fensternamen versucht, bei buttons funktioniert das ganz gut, aber bei leeren textfeldern bekomm ich einen leeren string

-
zu 1. kann ich dir nur dieses Buch empfehlen (falls du es noch irgendwo herbekommst):
Microsoft Windows Programmierung für Experten | ISBN: 3860636154
Dort wird nämlich genau sowas gemacht.zu 2.: Wenn das Textfeld leer ist, ist es doch nicht verwunderlich, dass du einen leeren String bekommst

-
ich will aber den namen des feldes bekommen, wie zb bei einem button mit der aufschrift next halt den string "next"
in einem formular mit 3 textfeldern will ich dass das programm weis, in welches textfeld was geschrieben wurde, oder wenn ich auf verschiedene tabs klicke, soll das programm wissen, welches tab geklickt wurde, usw.
-
Vielleicht hilft dir GetNextWindow(); Da die Fenster und ChildFenster immer in einer bestimmten reihenfolge sind die sich ja auch nicht von Programmstart zu Programmstart ändert solltest du so ein Fenster eindeutig bestimmen können.
MfG schirrmie
-
Du könntest mal mit Spy++ bzw. WinSpector schauen - evtl. hat das Control eine feste ID?! Willst du jetzt alles mitloggen und dazu wissen, wo was geschieht, oder nur an das Handle kommen

-
es soll so laufen: in einem netzwerk soll auf jedem pc ein neues programm installiert werden.
während der installation des programms auf dem ersten pc soll mein programm die ganze zeit mitlaufen und jede art von eingabe, seis der doppelklick auf ein desktopsymbol oder eine tastatureingabe in einem formular mittloggen und in eine datei speichern,damit die aktionen hinterher auf den anderen pcs automatisch installiert werden kann(dh die datei wird schritt für schritt durchgearbeitet, und jede aktion wird wiederholt).klar, auf desktop bzw ordnerebene kann ich nicht einfach mit positionsangaben arbeiten, da sich die ordner ja an verschiedenen orten befinden können,also brauch ich die namen der icons(btw das buch konnte ich nirgendwo mehr finden, und mit gebraucht büchern hab ich ganz schlechte erfahrungen gemacht, ma schaun obs das in unsrer Bücherei gibt).
so wies nun aussieht, kann ich nun auf formularebene nicht mehr mit dem namenraussuchen arbeiten, weil man keine garantie auf einen namen hat, und auf handlebasis gehts schon garnicht. Aber schirrmies idee ist garnicht schlecht:
könnte ich nicht einfach den namen des gerade aktiven fenster speichern, und dann einfach nur relativ zu diesem fenster die childs numerieren? hmm das wär einen versuch wert
-
Wenn dann würde ich eher die jeweilige ID speichern und die IDs der Parents - dann kannst du dich nachher umgekehrt wieder an diese Stelle durchhangeln.
-
1. frage: welche id?

2.frage: da ich mir das buch wohl in nächster zeit nicht an land ziehen kann(bei bücherei angerufen, gibts net), wollt ich nach einem suchbegriff fragen, damit ich wenigstens nach der lösung suchen kann.
-
1. ich vermute flenders meint die id die zb: bei createwindow (hmenu) mit angegeben wird.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/createwindow.asp
die id bekommst du mit
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/dialogboxes/dialogboxreference/dialogboxfunctions/getdlgitem.asp
-
miller_m schrieb:
1. ich vermute flenders meint die id die zb: bei createwindow (hmenu) mit angegeben wird.
Genau

miller_m schrieb:
die id bekommst du mit
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/dialogboxes/dialogboxreference/dialogboxfunctions/getdlgitem.aspFalsch Adresse erwischt (GetDlgItem kannst du nachher für die umgekehrte Richtung verwenden) - ich meinte GetDlgCtrlID
-
gibts denn immer eine id? ich dachte, die wär optional, oder wird bei übergabe von null in dem hMenu parameter automatisch eine nummer zugewiesen?
-
Funktioniert natürlich nur, wenn im Programm euch eine ID vergeben wurde, was aber wohl meist der Fall sein sollte, da ja sonst die Auswertung (auch innerhalb des Programms) ja nur recht umständlich möglich ist

-
meist
es sollte immer klappen

-
Wenn im Programm selbst keine ID vergeben wurde, wirst du wohl auch nichts bekommen, womit du viel anfängst, oder?!
-
Aber ob eine ID vergeben wurde oder nicht kannst du ja mittels Programme wie Spy++ rausbekommen sonst wenn es keine ID hat evtl doch meine lösung ;).
MfG schirrmie
-
Aber ob eine ID vergeben wurde oder nicht kannst du ja mittels Programme wie Spy++ rausbekommen sonst wenn es keine ID hat evtl doch meine lösung
spy++ setzt voraus, dass man im vorfeld weis, für welche programme das tool benutzt werden soll, das ist hier nicht der fall.
@flenders bei einem kleinen programm müssen ja noch keine ids vergeben werden, wenn man zb in einem formular nur ein eingabefeld und einen "extract" button hat, dann braucht man keine ids, aber trotzdem soll diese aktion mitgeloggt werden.
-
otze schrieb:
die datei wird schritt für schritt durchgearbeitet, und jede aktion wird wiederholt
und wielang wartest du zwischen den Schritten?
-
flenders schrieb:
Falsch Adresse erwischt (GetDlgItem kannst du nachher für die umgekehrte Richtung verwenden) - ich meinte GetDlgCtrlID
jep verklickt

zu 2.) könnte man nicht den desktop (listview) subclassen und dann wm_notify abfangen. somit würde man doch an alle infos dran kommen.
würde das nicht gehen?