Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 19:12

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Scroll Befehl an andere Anwendung schicken per Window Handle, funktioniert nicht bei

Discussion on Scroll Befehl an andere Anwendung schicken per Window Handle, funktioniert nicht bei within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1

 
Graphicscore's Avatar
 
elite*gold: 3179
Join Date: Mar 2012
Posts: 1,972
Received Thanks: 254
Arrow Scroll Befehl an andere Anwendung schicken per Window Handle, funktioniert nicht bei

Hallo Com. ich habe folgendes Problem ,
Ich möchte den Scroll befehl , also wenn man mit dem Mausrad scrollt an eine andere Anwendung übertragen auch wenn diese nicht im Fokus des Anwenders liegt.
Das funktioniert auch eigentlich alles einwandfrei aber bei ein paar Anwendung kann ich einfach nicht scrollen zb. Visual Studio.

Hier mein Source , dieser erkennt das Fenster das sich unter der Maus befindet und soll dann an dieses Fenster den Scroll Befehl schicken wenn dieses nicht im Fokus ist, wie gesagt funktioniert das bei einigen Programmen(zb. Google Chrome) einwandfrei und bei anderen nicht.

Main


MouseHook.vb
Graphicscore is offline  
Old 12/22/2014, 15:15   #2


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Vielleicht sollte man zuerst mal sagen dass die Nachrichten die du hier an das Fenster schickst keine Befehle sind sondern als Anfragen angesehen werden können. Heißt, das Fenster (bzw. das Programm welches das Fenster besitzt) muss nicht zwingend scrollen nur weil du es möchtest. Genauso könntest du eine Nachricht schicken, die das Programm auffordert sich selbst zu schließen (WM_QUIT war's glaube ich). Ob es das nun aber auch tut, ist eine andere Sache und kommt auf die Implementierung im Callback an.

Chrome hat sicherlich intern auch diesen Callback definiert, wo Nachrichten empfangen und abgearbeitet werden. Sehr wahrscheinlich prüft Chrome die Nachricht und falls die Nachricht WM_VSCROLL ist, wird das ausgeführt was Chrome definiert hat. Da es dort klappt, wurde es so implementiert wie du es erwartest.

Wie sieht's nun bei VS aus? Hm, kann ich nicht sagen - habe das noch nie benötigt aber was man aus deinem Text deuten kann, behandelt VS die von dir (oder der WinAPI) definierte Nachricht WM_VSCROLL nirgendwo, sie rutscht also wahrscheinlich einfach durch den Callback und es passiert nichts weiter.

Das ist blöd für dich. Wie löst du es nun also? Du müsstest herausfinden welche Nachricht geschickt wird, wenn du in VS scrollst. Ich persönlich würde den in der Zielanwendung hooken und protokollieren damit ich sehe, wann welche Nachricht ankommt. VS hat den garantiert genauso implementiert wie Chrome.
Mostey is offline  
Thanks
1 User
Old 12/22/2014, 19:12   #3

 
Graphicscore's Avatar
 
elite*gold: 3179
Join Date: Mar 2012
Posts: 1,972
Received Thanks: 254
Quote:
Originally Posted by Mostey View Post
Vielleicht sollte man zuerst mal sagen dass die Nachrichten die du hier an das Fenster schickst keine Befehle sind sondern als Anfragen angesehen werden können. Heißt, das Fenster (bzw. das Programm welches das Fenster besitzt) muss nicht zwingend scrollen nur weil du es möchtest. Genauso könntest du eine Nachricht schicken, die das Programm auffordert sich selbst zu schließen (WM_QUIT war's glaube ich). Ob es das nun aber auch tut, ist eine andere Sache und kommt auf die Implementierung im Callback an.

Chrome hat sicherlich intern auch diesen Callback definiert, wo Nachrichten empfangen und abgearbeitet werden. Sehr wahrscheinlich prüft Chrome die Nachricht und falls die Nachricht WM_VSCROLL ist, wird das ausgeführt was Chrome definiert hat. Da es dort klappt, wurde es so implementiert wie du es erwartest.

Wie sieht's nun bei VS aus? Hm, kann ich nicht sagen - habe das noch nie benötigt aber was man aus deinem Text deuten kann, behandelt VS die von dir (oder der WinAPI) definierte Nachricht WM_VSCROLL nirgendwo, sie rutscht also wahrscheinlich einfach durch den Callback und es passiert nichts weiter.

Das ist blöd für dich. Wie löst du es nun also? Du müsstest herausfinden welche Nachricht geschickt wird, wenn du in VS scrollst. Ich persönlich würde den in der Zielanwendung hooken und protokollieren damit ich sehe, wann welche Nachricht ankommt. VS hat den garantiert genauso implementiert wie Chrome.
Erstmal vielen Dank für deine Antwort. Könntest du mir vielleicht etwas genauer erklären wie ich da am besten rangehe ? Also ich müsste ja dann den Callback in das andere Programm hooken wahrscheinlich per DLL Injection oder so ? Ich bin auf den Gebiet leider noch etwas unerfahren, wenn du mir das etwas genauer erklären könntest wäre ich dir sehr dankbar.
Graphicscore is offline  
Old 12/23/2014, 00:25   #4


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Quote:
Originally Posted by Graphicscore View Post
Erstmal vielen Dank für deine Antwort. Könntest du mir vielleicht etwas genauer erklären wie ich da am besten rangehe ? Also ich müsste ja dann den Callback in das andere Programm hooken wahrscheinlich per DLL Injection oder so ? Ich bin auf den Gebiet leider noch etwas unerfahren, wenn du mir das etwas genauer erklären könntest wäre ich dir sehr dankbar.
Bin da jetzt selbst nicht sonderlich erfahren aber im Grunde kannst du eine DLL in den Zielprozess injizieren, die Code ausführt um eine Funktion an Adresse X (du brauchst die Adresse, verständlicherweise) an eine deiner eigenen Funktionen umzuleiten. Dafür brauchst du wie bereits erwähnt die Funktionsadresse, die Parameter, Rückgabetyp sowie die Calling Convention. Das geht nun schon tiefer und hat mit einer .NET Anwendung nichts mehr zutun, das sollte dir klar sein. Du platzierst (aus Sichtweise von ASM Code) einen JMP der zu deiner eigenen Funktion springt und die Ausführung der eigentlichen Funktion verhindert. Da das zu großen Problemen führen kann, speicherst du die originale Adresse vor der Platzierung damit du diese jederzeit wieder aufrufen kannst.

In der Regel haut man dann am Ende seiner eigenen Funktion den Call zur originalen Funktion rein. So kann man immer schön mitloggen welche Parameter durch die Funktion gehen ohne irgendetwas zu behindern.

Dafür gibt's auch genug Guides (selbst hier in der Tutorial Sektion) - will nun nicht alles so detailreich erklären weil ich, wie bereits gesagt, selbst nicht so erfahren bin.
Mostey is offline  
Thanks
2 Users
Old 12/23/2014, 03:11   #5
 
elite*gold: 100
Join Date: Aug 2005
Posts: 595
Received Thanks: 208
Quote:
will nun nicht alles so detailreich erklären weil ich, wie bereits gesagt, selbst nicht so erfahren bin.
Passt alles Schön erklärt.

@OP

Ja Dll-Injection + ein Detour bieten sich hier an da es

a) ein fertiges Framework für das hooking gibt
b) unmegen Tutorials dazu
c) einige andere Methoden von anfang an relativ unsinning wären da du es in ein bereits laufendes Programm einschleusen möchtest.

.NET hat wie Mostey schon angespielt hatte zwar die Möglichkeit das ganze zu machen, ist aber einfach nicht das richtige Werkzeug für den Job. (Solang du das ganze nicht aus Neugier und als Lernerfahrung machst)
dready is offline  
Thanks
1 User
Old 12/23/2014, 11:18   #6

 
Graphicscore's Avatar
 
elite*gold: 3179
Join Date: Mar 2012
Posts: 1,972
Received Thanks: 254
Ich habe mir jetzt so einen API Monitor geholt bei dem man sich anscheinend alle API Calls anschauen kann

Screen

Ich finde aber den Call nicht , ich will ja "nur" wissen was wie gecallt wird wenn ich in Visual Studio scrolle(mit dem Mausrad), damit ich diesen Call später von meinem Programm aus "emulieren" kann. Ich hab bei der Anwendung so ziemlich jeden Filter durch aber schlauer bin ich nicht. Bei der UI Api krieg ich die ganze Zeit nur isWindowEnabled und WindowFromPoint, und bei Input devices oder so krieg ich garnichts....

Danke für euere Hilfe schonmal.
Graphicscore is offline  
Reply


Similar Threads Similar Threads
PHP/SQL Update Befehl funktioniert nicht
11/08/2013 - Web Development - 3 Replies
Skript: <?php session_start(); require_once('config.php'); $errmsg_arr = array(); - Pastebin.com Zeile: $updt = "UPDATE * FROM users SET user_firstlogin='1' WHERE username='$login' AND user_password='$password'"; Der Standardbefehl '0' wird nicht durch '1' ersetzt. Weiß jemand Rat?
[DayZ] BattlEye Probleme & ARMA2 OA Anwendung funktioniert nicht mehr [LÖSUNG]
12/21/2012 - DayZ - 3 Replies
Hallo. Ich schreibe hier mal ein kleines Tutorial wie ihr sämtliche BattlEye Probleme beheben könnt - auch die Meldung: ARMA OA funktioniert nicht mehr kann mit dieser Methode behoben werden! 1. Geht unter Start - Systemsteuerung in die Ordneroptionen 2. Switcht zum Tab "Ansicht" rüber und scrollt etwas runter. 3. unter "Versteckte Datein und Ordner" den Haken bzw. den Punkt bei "Ausgeblendete Datein, Ordner und Laufwerke anzeigen" reinsetzten. 4. Übernehmen und Fenster...
/warp.... Befehl nicht funktioniert /command doesn't work
04/16/2012 - Metin2 Private Server - 0 Replies
Hi guys & grls, i have problem with command /warp ,..... Any "warps" teleports to the same place, just where I stand. syser server : first test: SYSERR: Apr 16 19:20:18 :: WarpSet: cannot find map location index 0 x 91110000 y 91110000 name admine scnd test: SYSERR: Apr 16 19:25:15 :: Process: SEQUENCE 461eb500 mismatch 0xaf != 0x0 header 254 SYSERR: Apr 16 19:25:15 :: Process: SEQUENCE_LOG -------------
[vb.net] Anwendung funktioniert nicht mehr
03/06/2012 - .NET Languages - 7 Replies
Hey, ich habe eine kleine Anwendung bezogen auf Skype in Visual Basic 2010 geschrieben, wenn ich sie jedoch einem Freund schicke, stürzt das Programm einfach ab und sagt das die Anwendung nicht mehr funktioniert. Ich bin wirklich ratlos, da ich die gegebenen Lösungen von anderen Threads ausprobiert habe , jedoch keine Lösung die richtige war. Sourcecode : klick mich Betriebsystem : Windows 7 Framework : 4 Wäre über jede Antwort dankbar.
Send Befehl funktioniert nicht
10/06/2010 - AutoIt - 4 Replies
Hallo Community, Habe ein kleines Problem und zwar mit dem Send Befehl. Auf meinem ersten Rechner funktioniert das Script einwandfrei. Nun wollte ich das Script auf meinem Acer Notebook (Vista Home) nutzen. Im Windows erkennt er den Send Befehl aber in einer 3D Anwendung nicht.



All times are GMT +2. The time now is 19:12.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.