![]() |
programm, das ein programm bedient?
hay,
ich muss bzw. möchte ein programm schreiben, dass auf befehl eine exe im hintergrund startet und bei der dann bei ner checkbox das häckchen setzt, dann bei ner combobox ein anderes item auswählt und dann wieder das häckchen bei der checkbox entfernt. schlussendlich muss es dann noch auf übernehmen und ok klicken. ich hoffe das ist realisierbar, ansonsten ists auch ned soo schlimm, aber es wäre schon geil. mfG toredo |
Re: programm, das ein programm bedient?
Du btauchst erst mal das Fenster Handle such mal nach FindWindow der rest ist dann einfach da sollte ein api tutorial helfen
|
Re: programm, das ein programm bedient?
hay,
zu dem stichwort findwindows hab ich unter dsdt was gefunden:
Delphi-Quellcode:
aber wo kommt da der code rein der für das fenster gillt, falls es existiert?
type
PFindWindowStruct = ^TFindWindowStruct; TFindWindowStruct = record Caption: string; ClassName: String; WindowHandle: THandle; end; function EnumWindowsProc(hWindow: hWnd; lParam: LongInt): boolean; stdcall; var lpBuffer: PChar; WindowCaptionFound: boolean; ClassNameFound: boolean; begin GetMem(lpBuffer, 255); result:=true; WindowCaptionFound:=false; ClassNameFound:=false; try if GetWindowText(hWindow, lpBuffer,255)>0 then if Pos(PFindWindowStruct(lParam).Caption, StrPas(lpBuffer))>0 then WindowCaptionFound:=true; if PFindWindowStruct(lParam).ClassName='' then ClassNameFound:=true else if GetClassName(hWindow, lpBuffer, 255)>0 then if Pos(PFindWindowStruct(lParam).ClassName, StrPas(lpBuffer))>0 then ClassNameFound:=true; if (WindowCaptionFound and ClassNameFound) then begin PFindWindowStruct(lParam).WindowHandle:=hWindow; result:=false; end; finally FreeMem(lpBuffer, sizeof(lpBuffer^)); end; end; function FindAWindow(WinCaption: string; WinClassName: string): THandle; var WindowInfo: TFindWindowStruct; begin with WindowInfo do begin caption := WinCaption; className := WinClassName; WindowHandle := 0; EnumWindows(@EnumWindowsProc, LongInt(@WindowInfo)); result := WindowHandle; end; end; procedure TForm1.Button1Click(sender: TObject); var TheWindowHandle: THandle; begin TheWindowHandle:=FindAWindow('Netscape -', ''); if TheWindowHandle=0 then ShowMessage('Window not found!') else BringWindowToTop(TheWindowHandle); end; und den code für das "fremde" fenster kann ich auch normal benutzen z.b. combobox1.text:='blabla';, aber ich weiss bei dem fenster ja nicht wie die objekte heissen. ich weiss nicht mal in welcher sprache das programm gecodet wurde... mfG toredo |
Re: programm, das ein programm bedient?
![]() Du musst im Grunde Die richtigen Controls finden (FindWindow & Co) und dann die richtige Message schicken (Send/PostMessage). Für nen Button wäre dass bspw. ![]() Für ne Combobox oder ne Checkbox weis ich jetzt grad' nicht, müsste aber auf jeden Fall im msdn stehen :mrgreen: Also eigentlich ganz einfach :zwinker: (Wenn man jetzt noch Vieren davon abhalten könnte, dein Antivirus-Prog so fernzusteuern ... ^^) Also mal kurz geguckt: Button: ![]() ComboBox: ![]() CheckBox: Ist auch nur ein Button ;) |
Re: programm, das ein programm bedient?
Delphi-Quellcode:
Wo Title steht setzt du den Title des ProgrammFensters ein. Dann hast du in TheWindowHandle das Handle des Fensters dann musst du noch mit EnumChildWindows die Unter fenster auflisten, auch eine combobox ist ein fenster! es gibt auch eine api funktion um die caption herruaszu finden (foren suche) damit könntest du die caption der checkbox herraus finden und dann suchen wie man eine checkbox über api setzt. alles ohne gewähr (aber mit pistole).
procedure TForm1.Button1Click(sender: TObject);
var TheWindowHandle: THandle; begin TheWindowHandle:=FindAWindow('Title', ''); if TheWindowHandle=0 then ShowMessage('Window not found!') else BringWindowToTop(TheWindowHandle); end; Auf jeden fall ist ein api tutorial wie das von luckie hilfreich. |
Re: programm, das ein programm bedient?
Wenns zum automatischen Programmtest ist:
![]() |
Re: programm, das ein programm bedient?
wow, das wird ja immer kompilizierter :o
Zitat:
das prob ist auch noch ich kann die exe zuhause ned ausführen, da man dazu ein programm auf dem pc bräuchte, das ich aber nicht habe und es wäre auch ned legal, ne raubkopie zu machen. aber vielleicht kann man ja aus der exe heraus diese daten lesen, vielleicht mit nem resource hacker oder so was? vielleicht könnte mri die function auch jemand machen, ich würde dieser person auch was als gegenleistung geben. mfG toredo |
Re: programm, das ein programm bedient?
Mit einen Res Hacker geht da auch nicht viel Handles werden dyn. erstellt d.h. bei jeden start hast du andere Handles
Es sei denn die Formulardaten stehen in der exe dann ist es einfach |
Re: programm, das ein programm bedient?
hat jemand zufälligerwiese ein beispiel oder ein tut für das ganze?
also die funktion um das fenster zu finden schaff ich wahrscheinlich noch aber den rest ned... mfG toredo |
Re: programm, das ein programm bedient?
Schau mal im Tutorial-Bereich ;)
:corky: |
Re: programm, das ein programm bedient?
Was ist denn jetzt genau dein Problem ?
Du musst die einzelnen Handles der Combobox, checkbox und des Buttons finden und die oben geposteten Messages an diese Handles senden ... |
Re: programm, das ein programm bedient?
bei dem finden der handles hab ich probs und bei dme senden der messages.
ich bin halt (leider noch(?)) ein anfänger :oops: mfG toredo |
Re: programm, das ein programm bedient?
Zum Finden der Handles kannst du z.b.
![]() Das senden der Messages ist einfach - SendMessage(Handle, Message_siehe_oben, w&lparam_sieh link oben) - wenn du willst kann ich die drei aufrufe auch noch hinkloppen ... dann müsstest du mir aber z.B. noch sagen, wie das Item der Combobox heißt ;) |
Re: programm, das ein programm bedient?
hay,
das standartitem der combobox heisst "Automatisch starten", das soll, wenn es noch nicht so ist, auf "Manuell starten" geändert werden. mit einer zweiten funktion halt andersrum. die checkbox die auch an- und abgekreuzt werden muss heisst "Symbol in Task-Leiste anzeigen". der titel des fenster ist Eigenschaften, aber ich glaube das braucht man ja nur um das fenster zu finden. winspy werd ich mir mal saugen und anschauen. grosses dankeschön für die hilfe, mfG toredo |
Re: programm, das ein programm bedient?
öhm, kannst du mir jetzt trozdem ned helfen?
ist auch ned so schlimm, dann mach ich halt ne anleitung für das was ich amchen wollte, ist ja auch end so schlimm, eventuel schaff ichs auch noch. trotzdem vielen dank für die hilfe bis jetzt. mfG toredo |
Re: programm, das ein programm bedient?
Oh, muss ich wohl übersehen haben ^^
Also: CheckBox:
Delphi-Quellcode:
Combobox:
SendMessage(Handle, BM_SETCHECK, 1, 0); // gecheckt
SendMessage(Handle, BM_SETCHECK, 0, 0); // ungecheckt
Delphi-Quellcode:
Button:
SendMessage(Handle, CB_SELECTSTRING, 1, PChar('Manuell starten')); //ausgewählt
Delphi-Quellcode:
Die Handles musste dir halt suchen, da hilft dir z.B. WinSpy ;)
SendMessage(Handle, BM_CLICK, 0, 0); // geklickt
|
Re: programm, das ein programm bedient?
wred ich gleich ausprobieren.
thx mfG toredo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz