![]() |
Mausklick simulieren funktioniert nicht
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich versuche, bei Zone Alarm die Sicherheitsabfrage per Fensterhandle automatisch zu beantworten. (ist für eine Demo wie unsicher Windows ist dank der FensterN) Bei der Windows Firewall klappt dies auch ohne anstand, aber bei ZoneAlarm komme ich über SetFocus nicht hinaus, d.h. der Button "Zulassen" wird zwar focussiert, aber er klickt sich nicht :-( Hier der Code (vorwiegend WinSpy generiert):
Delphi-Quellcode:
function FindWindowEx2(hParent: HWND; ChildClassName: string; ChildNr: Word): HWND;
var i: Word; hChild: HWND; begin hChild := 0; Result := 0; ChildNr := ChildNr - 1; for i := 0 to ChildNr do begin hChild := FindWindowEx(hParent, hChild, PChar(ChildClassName), nil); if hChild = 0 then Exit; Result := hChild; end; end;
Delphi-Quellcode:
Im Anhang ist noch ein Screenshot vom ZA-Fenster und von WinSpy.
procedure TForm1.Button7Click(Sender: TObject);
var wnd: HWND; begin wnd := FindWindow('#32770','ZoneAlarm-Sicherheitswarnung'); wnd := FindWindowEx2(wnd,'ZaButton', 3); if wnd <> 0 then begin //ShowMessage('Window found. Handle: ' + IntToStr(wnd)); SendMessage(wnd, WM_SETFOCUS, 0, 0); PostMessage(wnd, WM_LButtonDown, MK_LBUTTON,0 ); PostMessage(wnd, WM_LButtonUp, 0, 0); } end; |
Re: Mausklick simulieren funktioniert nicht
fehlen da nicht die koordinaten für den klick?
//bei der windows firewall funktioniert der gleiche code(bis eben auf das andere handle)? |
Re: Mausklick simulieren funktioniert nicht
Zitat:
ich könnts ja mal mit koordinaten probieren wie kann ich die koordinaten für den button ermitteln mittels des handles? |
Re: Mausklick simulieren funktioniert nicht
Hallo.
Das ist ja interessant. Könntest du mal den Code posten, mit dem man quasi ein automatisches Klicken der WindowsFirewall erstellen kann hier posten. Das finde ich nämlich total spannend und würde mich freuen, wenn du meinen Wunsch erfüllen würdest. |
Re: Mausklick simulieren funktioniert nicht
Zitat:
Folgendes geht z.b. für den Startbutton: PostMessage(FindWindowEx(FindWindow('Shell_TrayWnd ', nil),0, 'Button', nil), WM_LBUTTONDOWN, MK_LBUTTON, 0); PostMessage(FindWindowEx(FindWindow('Shell_TrayWnd ', nil),0, 'Button', nil), WM_LBUTTONUP, MK_LBUTTON, 0); Fängt ZA die Windows Messages ab oder was kann das sein? Welche Alternativen habe ich? Mit
Delphi-Quellcode:
gehts nämlich auch nicht :-(
SetCursorPos(x, y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); [edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit] |
Re: Mausklick simulieren funktioniert nicht
Du fragst, ob Zone-Alarm die Messages abfängt. Ich hoffe doch! Was wäre das für eine Firewall, wenn jedes bösartige Programm sich selbst so einfach Zugang zum Internet beschaffen könnte!
|
Re: Mausklick simulieren funktioniert nicht
Zitat:
Aber ob das nun so ist mit abfangen oder nicht wissen wohl am besten die WindowsAPI experten ;) |
Re: Mausklick simulieren funktioniert nicht
Abend!
Zitat:
Delphi-Quellcode:
Grüßle!
keybd_event(VK_SPACE, 0, 0, 0);
keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); |
Re: Mausklick simulieren funktioniert nicht
Zitat:
das seltsame: das event wird zwar ausgeführt, aber wohl leider nur auf meinen eigenen button in der delphi app der dann flackert wobei das in dem fall nichts mit ZA zu tun hat, bei anderen handles passiert das gleiche irgendwas stimmt da an deinem code nicht - oder reicht mein setfocus nicht, um die Tastatur auf den jeweiligen Button umzulenken? |
Re: Mausklick simulieren funktioniert nicht
Ähm, der Code tut das gleiche, als das Du die Leertaste drücken würdest.
Warum flackert Dein Button??? Hat der den Fokus, bzw. wie oft rufst Du den Code auf? Mit diesen Makros steure ich immer andere Programme, normal klappt das. |
Re: Mausklick simulieren funktioniert nicht
Zitat:
Irgendwas stimmt also mit meinem Code nicht, vielleicht kann mir jemand weiterhelfen. Fakt ist: Der andere Button bekommt zwar den Focus (gestrichelte Umrandung), aber einzig der Ausgangsbutton von dem die procedure ausgeht flackert (gedrückt, nicht gedrückt etc)
Delphi-Quellcode:
var wnd: HWND;
begin wnd := FindWindow('TForm1','Form1'); wnd := FindWindowEx2(wnd,'TButton', 8); // wnd := FindWindow('#32770','ZoneAlarm-Sicherheitswarnung'); // wnd := FindWindowEx2(wnd,'ZaButton', 3); if wnd <> 0 then begin SendMessage(wnd, WM_SETFOCUS, 0, 0); end; keybd_event(VK_SPACE, 0, 0, 0); keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); |
Re: Mausklick simulieren funktioniert nicht
|
Re: Mausklick simulieren funktioniert nicht
Zitat:
Ich habs mal manuell getestet, also WM_SETFOCUS ist nicht das richtige, es setzt war einen Focus aufs neue Handle, aber nimmt ihn vom alten nicht weg. kennt jemand den korrekten WM befehl der wirklich auch die Tastatur aufs neue Handle setzt? |
Re: Mausklick simulieren funktioniert nicht
Wenn der Focus auf die Taste gesetzt ist, müsste doch mit der Taste ENTER also vk_Return diese ausgeführt werden. Hast du schon mal die Tastenkombination ALT + L versucht?
|
Re: Mausklick simulieren funktioniert nicht
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
habe mal einen screenshot angehangen auf dem man das problem sieht, beide buttons haben focus |
Re: Mausklick simulieren funktioniert nicht
So Leute ich kann einen ersten Erfolg vermelden!
Aktueller Code:
Delphi-Quellcode:
Also wenn ich das Fenster fokussiere springt der Fokus zunächst auf einen Info Button, dann auf eine Checkbox
procedure TForm1.Timer1Timer(Sender: TObject);
var wnd,wnd1,: HWND; begin wnd := FindWindow('#32770','ZoneAlarm-Sicherheitswarnung'); if wnd <> 0 then begin form1.caption:='Window found. Handle: ' + IntToStr(wnd); SetForegroundWindow(wnd); SendMessage(wnd, WM_SETFOCUS, 0, 0); keybd_event(VK_TAB, 0, 0, 0); keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_TAB, 0, 0, 0); keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_SPACE, 0, 0, 0); keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); end; end; "Regel immer anwenden" und dann auf Zulassen. Mit Space kann ich diese nun klicken und die Anwendung wird zugelassen. Nun habe ich jedoch noch 2 Probleme: 1.) Ich kann die Checkbox "Regel immer anwenden" nicht aktivieren wenn ich nach dem ersten tab noch ein space einfüge, obwohl ich so zulassen "klicken" kann. Manuell per Tastatur geht es jedoch! 2.) Wenn ich das ganze in einen Timer tue wird zwar bei jeder ZA Sicherheitsanfrage automatisch "Zulassen" angeklickt, jedoch hängt das komplette System danach weil er das Fenster irgendwie nichtmehr loslassen will. Ich muss dann im passenden Moment auf Alt+F4 drücken, weil irgendwie dauernd weiter geklickt wird, was ja eigentlich nichtmehr sein sollte, wenn das ZA Fenster weg ist. |
Re: Mausklick simulieren funktioniert nicht
Also in Deinem Bild hat der IE Button den Focus
Edit: Nicht vorhandener Roter Kasten :? |
Re: Mausklick simulieren funktioniert nicht
Geht es hiermit?
Delphi-Quellcode:
SendMessage(wnd, messages.BM_CLICK, 0, 0);
|
Re: Mausklick simulieren funktioniert nicht
1. Wenn Du mit den Tabs auf die CheckBox stellst müßte es mit nem Space gehen
2. Timer abgestellt? IMHO Unnötig.
Delphi-Quellcode:
SendMessage(wnd, WM_SETFOCUS, 0, 0);
|
Re: Mausklick simulieren funktioniert nicht
Zitat:
2. Also der grund warum das ganze system hängt: das handle wird ständig gefunden, auch wenn zonealarm grad garkeine warnung ausgibt dies ist auch nach einem windows reboot so obwohl nie eine warnung ausgegeben wurde wenn ich nach dem handle suche, ists da! was kann man da tun? PS: Das SETFOCUS ist nicht unnötig, ohne gehts nicht |
Re: Mausklick simulieren funktioniert nicht
1. Steht der Fokus auf der CheckBox?
2. ![]() ![]() PS: Wieder nicht vorhandener roter Kasten: :? :? Seltsam, ich verwende nie die WM_SetFocus Nachrichten :gruebel: |
Re: Mausklick simulieren funktioniert nicht
Zitat:
Aber die Checkbox kann ich seltsamerweise trotz Focus nicht anhaken :( Hier mal der aktuelle Code:
Delphi-Quellcode:
Also zulassen geht wunderbar mit dem Code, das mit der checkbox nicht, egal ob ich den focus auf die box reinnehme oder nicht
var wnd,wnd1: HWND;
begin wnd := FindWindow('#32770','ZoneAlarm-Sicherheitswarnung'); wnd1 := FindWindowEx2(wnd,'ZaButton', 2); //Checkbox if (wnd <> 0) and (iswindowvisible(wnd)) then begin SetForegroundWindow(wnd); SendMessage(wnd, WM_SETFOCUS, 0, 0); keybd_event(VK_TAB, 0, 0, 0); keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0); SendMessage(wnd1, WM_SETFOCUS, 0, 0); //FOcus auf checkbox keybd_event(VK_SPACE, 0, 0, 0); //checkbox anhaken keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_TAB, 0, 0, 0); keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_SPACE, 0, 0, 0); //Zulassen klicken keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); |
Re: Mausklick simulieren funktioniert nicht
Ähm, Du verwechselst da was:
WM_SETFOCUS wird an als Benachrichtigung an ein Fenster gesendet, das es den Fokus erhalten hat. Was Du suchst ist: ![]() Vorsicht: Windows.SetFocus schreiben :wink: Edit: Deshalb auch die scheinbar 2 Fokusierten Buttons, bzw. hat die CheckBox nicht wirklich den Fokus, sie glaub es nur, weil Du ihr das vorgaukelst :mrgreen: |
Re: Mausklick simulieren funktioniert nicht
Zitat:
wnd1 ist die checkbox
Delphi-Quellcode:
......
keybd_event(VK_TAB, 0, 0, 0); keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0); Windows.SetFocus(wnd1); keybd_event(VK_SPACE, 0, 0, 0); keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); |
Re: Mausklick simulieren funktioniert nicht
Wenn man das selber net Testen kann is etwas schwer :(
Aber Zeit für Plan B :mrgreen: Hab mir das Bild nochmal angeguckt und gesehen, das die CheckBox nen AccelChar hat :stupid: Versuchs mal damit:
Delphi-Quellcode:
// d drücken
keybd_event(68, 0, 0, 0); keybd_event(68, 0, KEYEVENTF_KEYUP, 0); |
Re: Mausklick simulieren funktioniert nicht
Eigentlich wäre es ja so viel zu einfach oder?
:-D (kann es leider auch nicht testen... Leuchtende Grüße Stefan |
Re: Mausklick simulieren funktioniert nicht
Nö warum,
eigentlich müßte das genügen:
Delphi-Quellcode:
Grüßle!
...
begin SetForegroundWindow(wnd); keybd_event(68, 0, 0, 0); // d drücken keybd_event(68, 0, KEYEVENTF_KEYUP, 0); keybd_event(76, 0, 0, 0); // l drücken keybd_event(76, 0, KEYEVENTF_KEYUP, 0); end; |
Re: Mausklick simulieren funktioniert nicht
Zitat:
Haben die Heinis zwar unterstrichen aber nicht implementiert |
Re: Mausklick simulieren funktioniert nicht
Hi Ihr,
kann es sein das ihr grad nen Denkfehler eingebaut habt? um den AccelChar anzusteuern benutzt man doch normalerweise auch die Alt taste oder?? das heißt erst alt taste Drücken dann D drücken dann D loslassen dann alt Loslassen ;-) oder Irre ich mich jetzt? Leuchtende Grüße Stefan |
Re: Mausklick simulieren funktioniert nicht
Zitat:
auch nicht wenn ich vor dem rechner selbst sitze und maus und tastatur benutze ;) |
Re: Mausklick simulieren funktioniert nicht
Zitat:
@snapman: Bist Du sicher, das das ZA-Fenster den Fokus hat? |
Re: Mausklick simulieren funktioniert nicht
Zitat:
wie gesagt alles MANUELL ohne steuerung per software |
Re: Mausklick simulieren funktioniert nicht
Seltsame Sache :gruebel:
Funktioniert eigentlich der "L" AccelChar? |
Re: Mausklick simulieren funktioniert nicht
Zitat:
|
Re: Mausklick simulieren funktioniert nicht
vielen dank,,, wenn jemand nur wüsste, wie mann zonealarm über vnc bezw. teamviewer bezw. bei ähnlichen programmen steuern kann... Zulassen, verweigern bezw. beenden funktioniert nicht...
|
Re: Mausklick simulieren funktioniert nicht
Zitat:
Lösung: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 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-2025 by Thomas Breitkreuz