Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi programm, das ein programm bedient? (https://www.delphipraxis.net/70918-programm-das-ein-programm-bedient.html)

toredo 6. Jun 2006 21:01


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

arbu man 6. Jun 2006 21:07

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

toredo 6. Jun 2006 21:25

Re: programm, das ein programm bedient?
 
hay,

zu dem stichwort findwindows hab ich unter dsdt was gefunden:
Delphi-Quellcode:
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;
aber wo kommt da der code rein der für das fenster gillt, falls es existiert?
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

jfheins 6. Jun 2006 21:32

Re: programm, das ein programm bedient?
 
MSDN-Library durchsuchenFindWindow ist eigentlich eie API-Funktion - aber so wirds wahrscheinlich auch gehen ;)

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. MSDN-Library durchsuchenBM_CLICK

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: http://msdn.microsoft.com/library/de...s/bm_click.asp

ComboBox: http://msdn.microsoft.com/library/de...lectstring.asp

CheckBox: Ist auch nur ein Button ;)

arbu man 6. Jun 2006 21:37

Re: programm, das ein programm bedient?
 
Delphi-Quellcode:
procedure TForm1.Button1Click(sender: TObject);
var TheWindowHandle: THandle;
begin
  TheWindowHandle:=FindAWindow('Title', '');
  if TheWindowHandle=0 then
    ShowMessage('Window not found!')
  else
    BringWindowToTop(TheWindowHandle);
end;
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).
Auf jeden fall ist ein api tutorial wie das von luckie hilfreich.

Bernhard Geyer 6. Jun 2006 22:00

Re: programm, das ein programm bedient?
 
Wenns zum automatischen Programmtest ist: TestComplete

toredo 7. Jun 2006 18:10

Re: programm, das ein programm bedient?
 
wow, das wird ja immer kompilizierter :o

Zitat:

Zitat von arbu man
Delphi-Quellcode:
procedure TForm1.Button1Click(sender: TObject);
var TheWindowHandle: THandle;
begin
  TheWindowHandle:=FindAWindow('Title', '');
  if TheWindowHandle=0 then
    ShowMessage('Window not found!')
  else
    BringWindowToTop(TheWindowHandle);
end;
Wo Title steht setzt du den Title des ProgrammFensters ein....

bis hier hin versteh ich das ganze noch so halbwegs.


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

arbu man 7. Jun 2006 19:10

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

toredo 7. Jun 2006 20:26

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

inherited 7. Jun 2006 20:51

Re: programm, das ein programm bedient?
 
Schau mal im Tutorial-Bereich ;)
:corky:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:20 Uhr.
Seite 1 von 2  1 2      

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