Titelzeile eines anderen Programms abfragen [Erledigt]
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Titelzeile eines anderen Programms abfragen [Erledigt]
Kann ich aus einem Xbase++-Programm heraus abfragen, wie die Titelleiste eines anderen Programms lautet? Der andere Programmname wäre bekannt, ich müsste nur diese Info auslesen können.
Wenn das geht: Was passiert, wenn dieses andere Programm mehrfach geöffnet ist mit unterschiedlichen Titel-Informationen?
Jan
Wenn das geht: Was passiert, wenn dieses andere Programm mehrfach geöffnet ist mit unterschiedlichen Titel-Informationen?
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Titelzeile eines anderen Programms abfragen
vor kurzem hat hier jemand nach der ProzessID gefragt und einen Code zur Abfrage aller Prozesse gepostet (er nahm den ersten, aber es geht auch anders ...) zur ProzessID muss man die EXE und den Fenstertitel abfragen können ...
Bei Pablo findest du ein WildFind... Programm, das ein Programm nach einem Teil des Fenstertitels findet, ob damit die EXE gelesen werden kann weiß ich nicht. Ich nutze FindWindowA() um ein bestimmtes Fenster zu schließen.
Bei Pablo findest du ein WildFind... Programm, das ein Programm nach einem Teil des Fenstertitels findet, ob damit die EXE gelesen werden kann weiß ich nicht. Ich nutze FindWindowA() um ein bestimmtes Fenster zu schließen.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Titelzeile eines anderen Programms abfragen
hi,
wie Hubert schon sagte kann man mit FindWindowA() das Handle eines Fenster ermitteln wenn man die Title hat.
Frage : was willst du machen wenn du "das" Fenster gefunden hast ?
wie Hubert schon sagte kann man mit FindWindowA() das Handle eines Fenster ermitteln wenn man die Title hat.
wenn die Title unterschiedlich sind sehe ich keine Probleme ... oder was meinst du damit ?Wenn das geht: Was passiert, wenn dieses andere Programm mehrfach geöffnet ist mit unterschiedlichen Titel-Informationen?
Frage : was willst du machen wenn du "das" Fenster gefunden hast ?
gruss by OHR
Jimmy
Jimmy
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Titelzeile eines anderen Programms abfragen
Jimmy,
anders herum wird ein Schuh daraus: Ich kenne den Namen der exe, und möchte gerne den Inhalt des Fenstertitels haben.
Jan
anders herum wird ein Schuh daraus: Ich kenne den Namen der exe, und möchte gerne den Inhalt des Fenstertitels haben.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Titelzeile eines anderen Programms abfragen
ich habe mal eine Test mit Word und Acrobat gemacht.Jan hat geschrieben:anders herum wird ein Schuh daraus: Ich kenne den Namen der exe, und möchte gerne den Inhalt des Fenstertitels haben.
wenn ich 2 verschiedene *.DOCX aufrufe habe ich trotzdem nur 1 x WinWord.EXE im Taskmanager stehen.
In diesem Fall würde es gar nichts nützen wenn man WinWord.EXE kennt.
wenn dein EXE sich ähnlich verhält wüsste ich nicht wie du die Instanze feststellen willst die zu dem Fenster gehört.
beim Acrobat Reader habe ich nun 2 x AcroRd32.exe im Taskmanager stehen. welches gehört jetzt zu welchem Fenster ?
gruss by OHR
Jimmy
Jimmy
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Titelzeile eines anderen Programms abfragen
Jimmy,
ich rede doch nicht von irgendwelchen Dokumenten-Titeln. Sondern dem Titel im Programmfenster.
Jan
ich rede doch nicht von irgendwelchen Dokumenten-Titeln. Sondern dem Titel im Programmfenster.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Re: Titelzeile eines anderen Programms abfragen
Hallo Jan
sieh mal unter
http://www.xbaseforum.de/viewtopic.php? ... etTaskList
nach
Liebe Grüße
Rolf
sieh mal unter
http://www.xbaseforum.de/viewtopic.php? ... etTaskList
nach
Liebe Grüße
Rolf
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Titelzeile eines anderen Programms abfragen
Frage : "externe" Programmfenster ? solche die im Taskmanager auftauchen sollten ?Jan hat geschrieben:ich rede doch nicht von irgendwelchen Dokumenten-Titeln. Sondern dem Titel im Programmfenster.
das sind die deren Handle man mit FindWindowA() ermitteln kann.
wenn du 2 DOCX Fenster ( mit Titeln ) hättest würde dir FindWindowA() nicht die Instanze von WinWord.EXE und damit den Titel / Handle des Fenster "nennen"
wenn du 2 PDF ( Acrobat Reader ) hättest würde dir FindWindowA() für die beiden AcroRd32.exe jeweils ein anderes Handle liefern womit du den Zugriff auf den Title bekommst
... was ja dann wohl kein Problem mehr sein sollte (oder ist das dein Problem ?).
sollte des sich nun um den Title eines externen Programm MDI Fenster handeln dann müsste man noch weiter in "dessen" Childlist suchen um das MDI Fenster / Title zu identifizieren.
unter http://www.dennisbabkin.com/software/ findet man das Tool "WinID" was mir Pablo empfohlen hat.
sollte das alles nicht dein Problem sein dann wäre ein wenig Code gut damit dein Problem deutlicher wird.
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Titelzeile eines anderen Programms abfragen
sollte das externe Programm von dir per Runshell aufgerufen werden gibt es noch von Pablo die TRunProcess*** Class.
damit könntest du einen RunShell ähnlichen Befehl besser "kontrollieren" und aufzugreifen was den Title des externen Programms enthalten sollte.
***
http://www.xbwin.com
TRunProcess
ot4xb.examples
27. September 2009
Pablo Botella
damit könntest du einen RunShell ähnlichen Befehl besser "kontrollieren" und auf
Code: Alles auswählen
MEMBER LPSTR lpTitle DYNSZ cTitle
***
http://www.xbwin.com
TRunProcess
ot4xb.examples
27. September 2009
Pablo Botella
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Titelzeile eines anderen Programms abfragen
wir auchJan hat geschrieben:Jimmy,
ich rede doch nicht von irgendwelchen Dokumenten-Titeln. Sondern dem Titel im Programmfenster.
Jan
hier findest du Pablos Beispiel wie man mit einem Teilbegriff des Fenstertitels ein Handle auf ein Fenster bekommt.
In der MSDN gibt es einige ENUM Funktionen, die z.B. auch die ProzessID ermitteln.
Mit diesen Handles bekommt man Zugriff auf die Prozesse/Fenster und vermutlich gibt es auch eine Funktion, die dann den Namen der EXE ausgibt.
Code: Alles auswählen
Subject WildFindWindow
From Pablo Botella
Date Tue, 17 Feb 2009 13:11:56 +0100
Newsgroups ot4xb.examples
Attachment(s) WildFindWindow.zip
Using the XppCbk.exe to provide a callback for EnumWindows()
function WildFindWindow_EnumProc( hWnd , pParam )
.....
if ( iif(n == 0,Empty(cStr), cStr $ c) )
... add the window info to the result array
...
Recent messages in this thread
Gruß
Hubert
Hubert
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Titelzeile eines anderen Programms abfragen
Jimmy,
Du denkst wieder einmal viel zu kompliziert. Es gibt eine exe, deren Namen ich kenne. Und von genau der möchte ich den Inhalt der Titelzeile haben. Nicht mehr, nicht weniger.
Jan
Du denkst wieder einmal viel zu kompliziert. Es gibt eine exe, deren Namen ich kenne. Und von genau der möchte ich den Inhalt der Titelzeile haben. Nicht mehr, nicht weniger.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Titelzeile eines anderen Programms abfragen
Hubert,
Danke für den Hinweis. Aber wie ich eben schon an Jimmy antwortete und wie ich auch schon früher geschrieben habe - der Name der exe ist klar. Den muß ich mir nicht suchen. Ich brauche nur die Titelleiste dieser bekannten exe.
Jan
Danke für den Hinweis. Aber wie ich eben schon an Jimmy antwortete und wie ich auch schon früher geschrieben habe - der Name der exe ist klar. Den muß ich mir nicht suchen. Ich brauche nur die Titelleiste dieser bekannten exe.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Titelzeile eines anderen Programms abfragen
Hallo Jan,
du solltest lesen was man schreibt !
Ich kenne keine Funktion, die zu einer EXE den Titel des MAIN-Fensters liefert, andere wohl auch nicht ...
ABER es gibt die genannten Funktionen die die FensterID bzw. ProzessID liefern.
Diese Liste muß man dann durchsuchen nach dem Fenster, dass der gewünschten EXE entspricht und dann liest man den Namen des Fensters ...
PS: ich finde es auch umständlich, aber was soll man machen ...
du solltest lesen was man schreibt !
Ich kenne keine Funktion, die zu einer EXE den Titel des MAIN-Fensters liefert, andere wohl auch nicht ...
ABER es gibt die genannten Funktionen die die FensterID bzw. ProzessID liefern.
Diese Liste muß man dann durchsuchen nach dem Fenster, dass der gewünschten EXE entspricht und dann liest man den Namen des Fensters ...
PS: ich finde es auch umständlich, aber was soll man machen ...
Gruß
Hubert
Hubert
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Titelzeile eines anderen Programms abfragen
So, ich habe mal alles, was Ihr geschrieben habt, insbesondere den Link von Rolf, und einiges, was ich im Internet dazu gefunden habe, in dieser Funktion zusammengefaßt.
Dummerweise funktioniert das nicht. cWindowName bleibt immer leer. Wo ist da mein Denkfehler?
Jan
Code: Alles auswählen
#define PROCESS_QUERY_INFORMATION (0x0400)
#define PROCESS_VM_READ (0x0010)
DllFunction EnumProcesses(@xPara1, xPara2, @xPara3) USING STDCALL FROM Psapi.dll
DllFunction EnumProcessModules(xPara1, @xPara2, xPara3, @xPara4) USING STDCALL FROM Psapi.dll
DllFunction GetModuleBaseNameA(xPara1, xPara2, @xPara3, xPara4) USING STDCALL FROM Psapi.dll
DllFunction OpenProcess(xPara1, xPara2, xPara3) USING STDCALL FROM Kernel32.dll
DllFunction CloseHandle(xPara1) USING STDCALL FROM Kernel32.dll
DllFunction GetWindowTextA(xPara1, @xPara2, xPara3) USING stdcall FROM user32.dll
FUNCTION getProcessList(lWin)
LOCAL aProcesses := space(10240)
LOCAL aModules := space(4*10)
LOCAL cbNeeded := 0
LOCAL cbNeeded2 := 0
LOCAL cname := space(64)
LOCAL nPid
LOCAL nProcHandle
LOCAL i,nMax
LOCAL nPidId
LOCAL xRet,aProcess:={}
EnumProcesses(@aProcesses, Len(aProcesses), @cbNeeded)
nMax := Len(Trim(aProcesses)) / 4
FOR i := 1 TO nMax
nPid := Bin2U(SubStr(aProcesses, 1 + ((i - 1) * 4), 4))
IF nPidId == NIL .OR. (nPIdId == nPid)
nProcHandle := OpenProcess(PROCESS_QUERY_INFORMATION + PROCESS_VM_READ, 0, nPid)
IF nProcHandle > 0
cWindowname := SPACE(500)
nReturn := getwindowtextA(nProcHandle, @cWindowName, LEN(cWindowName))
IF EnumProcessModules(nProcHandle, @aModules, Len(aModules) / 4, @cbNeeded2) != 0
cName := space(128)
GetModuleBaseNameA(nProcHandle, Bin2U(SubStr(aModules, 1, 4)), @cName, Len(cName))
cName := strtran(cName, Chr(0), "")
CloseHandle(nProcHandle)
cName := Upper(AllTrim(cName))
cWindowName := AllTrim(SubStr(StrTran(cWindowName, Chr(0), ""), 1, 40))
AAdd(aProcess, {cName, cWindowName})
ENDIF
ENDIF
ENDIF
NEXT
RETURN aProcess
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Re: Titelzeile eines anderen Programms abfragen
Hallo Jan,
ich bezweifele, dass Du mit dem Prozess-Handle die Funktion getwindowtextA benutzen kannst. Die erwartet ein Fenster-Handle. An die Fensterhandles kommt man mit EnumWindows. Wie man aber von Prozess- zu Fenster-Handle kommt, weiß ich nicht, aber darin dürfte das Problem liegen...
ich bezweifele, dass Du mit dem Prozess-Handle die Funktion getwindowtextA benutzen kannst. Die erwartet ein Fenster-Handle. An die Fensterhandles kommt man mit EnumWindows. Wie man aber von Prozess- zu Fenster-Handle kommt, weiß ich nicht, aber darin dürfte das Problem liegen...
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Titelzeile eines anderen Programms abfragen
Hallo Jan,
wenn du Pablos Funktion anschauen würderst, findest du dort die Abfrage vom Fenster nPID zum EXE Namen:
:GetModuleBaseNameA(...)
wenn man aber das WindowHandle hat, müsste es auch mit dieser funktion gehen:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
wenn du Pablos Funktion anschauen würderst, findest du dort die Abfrage vom Fenster nPID zum EXE Namen:
:GetModuleBaseNameA(...)
wenn man aber das WindowHandle hat, müsste es auch mit dieser funktion gehen:
Code: Alles auswählen
UINT WINAPI GetWindowModuleFileName(
_In_ HWND hwnd,
_Out_ LPTSTR lpszFileName,
_In_ UINT cchFileNameMax
);
Gruß
Hubert
Hubert
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Titelzeile eines anderen Programms abfragen
Hallo Markus,
schön Dich hier zu sehen!
OK, der Gedanke ist nachvollziehbar. Und ich habe gesehen, das Du hier im Forum schon mal was mit EnumWindows gepostet hast. Damit komme ich aber nicht klar, weil mindestens eine essentiell wichtige Funktion, die Du da aufrufst, nicht in Deinem geposteten Code mit drin ist.
Die Frage in diesem Fall wäre ja: Wie kann ich mir eine Liste aller Fenstertitel zusammenstellen? Das würde mir ja auch schon helfen. Da ich relativ genau weiß, was da drin steht, könnte ich auch diese Titelliste durchforsten nach dem, was ich suche. Den Programmnamen würde ich dann garnicht mehr gebrauchen. Ich war da anscheinend von einem falschen Ansatz ausgegangen.
Jan
schön Dich hier zu sehen!
OK, der Gedanke ist nachvollziehbar. Und ich habe gesehen, das Du hier im Forum schon mal was mit EnumWindows gepostet hast. Damit komme ich aber nicht klar, weil mindestens eine essentiell wichtige Funktion, die Du da aufrufst, nicht in Deinem geposteten Code mit drin ist.
Die Frage in diesem Fall wäre ja: Wie kann ich mir eine Liste aller Fenstertitel zusammenstellen? Das würde mir ja auch schon helfen. Da ich relativ genau weiß, was da drin steht, könnte ich auch diese Titelliste durchforsten nach dem, was ich suche. Den Programmnamen würde ich dann garnicht mehr gebrauchen. Ich war da anscheinend von einem falschen Ansatz ausgegangen.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Titelzeile eines anderen Programms abfragen
Hallo Jan,
Was du brauchst ist die WildFindWindow.ZIP von Pablo weiter oben.
In seinem Beispiel gibt er auch den Namen der EXE aus, wobei bei seiner Funktion ein Teilbegriff des Fenstertitels genügt.
Die API funktion die ich noch genannt hatte liefert bei mir nur "" zurück
Pablos Code mag zwar nicht ganz einfach zu verstehen sein, aber zum Durchsuchen der Fenster muss man eine CallBack Funktion schreiben und das geht ohne Pablos Tools nicht.
Was du brauchst ist die WildFindWindow.ZIP von Pablo weiter oben.
In seinem Beispiel gibt er auch den Namen der EXE aus, wobei bei seiner Funktion ein Teilbegriff des Fenstertitels genügt.
Die API funktion die ich noch genannt hatte liefert bei mir nur "" zurück
Pablos Code mag zwar nicht ganz einfach zu verstehen sein, aber zum Durchsuchen der Fenster muss man eine CallBack Funktion schreiben und das geht ohne Pablos Tools nicht.
Gruß
Hubert
Hubert
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Titelzeile eines anderen Programms abfragen
Hubert,
OK, im zweiten Anlauf habe ich das geschnallt. Hab mir die zip gerade runtergeladen, die macht exakt das, was ich brauche.
Danke für Eure Hilfe.
Jan
OK, im zweiten Anlauf habe ich das geschnallt. Hab mir die zip gerade runtergeladen, die macht exakt das, was ich brauche.
Danke für Eure Hilfe.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Titelzeile eines anderen Programms abfragen [Erledigt]
Falls du das Fenster schließen willst und in MSDN nach einer passenden Funktion suchst, fällt dir eventuell CloseWindow() auf, das schließt es aber nicht, sondern minimiert nur.
So schließt man ein Fenster (laufendes Programm):
So schließt man ein Fenster (laufendes Programm):
Code: Alles auswählen
*--------------------------------------------------------------------------
function CloseRunningExe(cTitle)
local nHWD, lOK := .f.
nHWD := FindWindow(cTitle)
if ! empty(nHWD)
CloseWindow(nHWD)
sleep(50)
nHWD := FindWindow(cTitle)
lOK := empty(nHWD)
endif
return lOK
*--------------------------------------------------------------------------
function FindWindow(cTitle)
local nHWD := 0
if ! empty(cTitle)
nHWD := @User32:FindWindowA(0,cTitle)
endif
return nHWD
*--------------------------------------------------------------------------
#define WM_SYSCOMMAND 0x0112
#define SC_CLOSE 0xF060
function CloseWindow(nHWD)
@User32:SendMessageA(nHWD, WM_SYSCOMMAND, SC_CLOSE, 0)
return .t. // Erfolg prüfen ?
*--------------------------------------------------------------------------
function GetLastError() // Errorcodes: http://msdn.microsoft.com/en-us/library/windows/desktop/ms681381%28v=vs.85%29.aspx
return @Kernel32:GetLastError()
Gruß
Hubert
Hubert
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Titelzeile eines anderen Programms abfragen [Erledigt]
Hubert,
will ich ja garnicht. Ich brauch einfach nur die Info aus der Titelzeile. Manipulieren will ich nichts.
Aber schon interessant, das MS in diesem Fall mit falschen Bezeichnungen spielt. Aber nein, die ist nicht falsch. Man muß die nur richtig interpretieren. Klar... wie konnte ich nur ...
Jan
will ich ja garnicht. Ich brauch einfach nur die Info aus der Titelzeile. Manipulieren will ich nichts.
Aber schon interessant, das MS in diesem Fall mit falschen Bezeichnungen spielt. Aber nein, die ist nicht falsch. Man muß die nur richtig interpretieren. Klar... wie konnte ich nur ...
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Titelzeile eines anderen Programms abfragen [Erledigt]
wenn du mit Pablo TRunProcess Class arbeiten würdest ( was IMHO die beste Kontrolle für CMD Aufrufe ist ) dann bekommst du den Title über die MEMBER cTitle.Jan hat geschrieben:Ich brauch einfach nur die Info aus der Titelzeile.
Code: Alles auswählen
MEMBER LPSTR lpTitle DYNSZ cTitle
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Titelzeile eines anderen Programms abfragen [Erledigt]
das setzt doch aber vorraus, das Jan mit
eine CMD Anwendung gestartet hat (dort könnte er seinen Titel auch selbst festlegen) ... vermutlich meint er aber ein anderes GUI Programm.Jan hat geschrieben:Kann ich aus einem Xbase++-Programm heraus abfragen, wie die Titelleiste eines anderen Programms lautet? Der andere Programmname wäre bekannt, ich müsste nur diese Info auslesen können.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Titelzeile eines anderen Programms abfragen [Erledigt]
ok ... aber die Structure gilt auch für andere API Aufrufe.brandelh hat geschrieben:eine CMD Anwendung gestartet hat (dort könnte er seinen Titel auch selbst festlegen) ... vermutlich meint er aber ein anderes GUI Programm.
normal würde die MEMBER Var nur "o:Title" heissen und wäre mit CHR(0) terminiert.
zum "auslesen" muss man aus Xbase++ eine Variable vor-belegen , welche den gesamten String aufnehmen kann, und per Reference übergeben.
bei Pablo gibt es DYNSZ für den Type LPSTR welche eine dynamische Zuweisung mit ot4xb erlaubt und deshalb "o:cTitle" heisst
gruss by OHR
Jimmy
Jimmy