Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Shift Cursor Down an anderes Programm senden (https://www.delphipraxis.net/204723-shift-cursor-down-anderes-programm-senden.html)

Dumpfbacke 22. Jun 2020 09:40

Shift Cursor Down an anderes Programm senden
 
Hallo Delphianer,
ich bin so langsam hier komplett am verzweifeln. Ich muss ein anderes Programm steuern. Hierzu muss ich Datensätzte dort markieren. HIerzu möchte ich mittels VK_Home auf den ersten Datensatz springen. Nun möchte ich nur Shift und zwei mal Cursor down um die erste Drei der 5 Datensätze ich hier zu markieren. Egal was ich versuche es geht einfach nicht. Ich kann kein Shift an der fenster schicken bzw es kommt nur Cursor Down dort an. Dieses hat aber den Nachteil das natürlich die Datensätze nicht merkiert sind.

Was ich schon alles versucht habe kan ich schon gar nich tmehr sagen.

Das Handel des Fenster suchen geht ja ganz einfach.

Dann habe ich mittes LB_SetSel die Datensätze markiert. Es funktioniert und die Datensätze sind dann auch markiert aber wenn die Date Daten dann mit den zweiten Button übernehme ist nur der erst Datensatz übernommen. Also dachte ich mir OK markiere dann einfach den ersten Datsatz und drücke dann shift und Cursor Down bis zum letzte. Also Postmessage oder Sendmessage(wndChild, WM_Keydown, VK_Shift,0) dann Postmessage / Sendmessage (wndChild, WM_keydown, VK_Down,0) und dann bei mit WM_SysKeyUp loslassen. Zuerst den Cursor und dann Shift.

Leider funktioniert es einfach nicht. Hat so etwas hier schon mal jemand gemacht ? Ich habe mir schnell mal ein eigenes Programm geschrieben mit nur einer Listbox drin. Dort geht es auch nicht. Ich wollte prüfen ob es ggf an den anderen Programm liegt.

Kann mir jemand hier helfen und hat etwas schon mal gemacht. Wie gesagt alle Key kommen an nur nicht wenn ich das ganze mittels Shift machen möchte.

Das ganze ist wie verhext. Ich wollte das ganze mal schnell an einem Nachmittag erledigen und nun bin ich schon seit Wochen dran unbd bekomme es einfach nicht hin.

API 22. Jun 2020 11:14

AW: Shift Cursor Down an anderes Programm senden
 
Hast du es mal mit PostKeyEx32 resp. PostKeyExHWND probiert?

Dumpfbacke 22. Jun 2020 11:44

AW: Shift Cursor Down an anderes Programm senden
 
Ja das habe ich auch schon mal versucht geht leider auch nicht bei PostKeyExHWND.
Das ganze ist wie verhext. Das haupt Problem ist das es mit LB_SETSEL nicht funktioniert. Ich kann es zwar markieren aber das Programm erkennt es dann nicht. D.h. es ist in der Listbox markiert aber man kann den Button zu übernehmen nicht drücken. Dieses wird erst dann frei wenn an etwss in der List box ausgewählt hat. Somit erkennt es das Programm leider nicht. Deshalb wollte ich es mit dem Cursor machen.

API 22. Jun 2020 13:09

AW: Shift Cursor Down an anderes Programm senden
 
Funktioniert es, wenn sich das Fenster im Vordergrund befindet / den Focus besitzt?

Dumpfbacke 22. Jun 2020 15:50

AW: Shift Cursor Down an anderes Programm senden
 
Geht auch nicht.

WladiD 22. Jun 2020 16:33

AW: Shift Cursor Down an anderes Programm senden
 
Ich kann es zwar nicht testen, aber das sollte mit SendInputHelper wie folgt funktionieren:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  SIH: TSendInputHelper;
begin
  SIH := TSendInputHelper.Create;
  try
    SIH.AddVirtualKey(VK_HOME);
    SIH.AddShift(ssShift, True, False);
    SIH.AddVirtualKey(VK_DOWN);
    SIH.AddVirtualKey(VK_DOWN);
    SIH.AddShift(ssShift, False, True);
    SIH.Flush;
  finally
    SIH.Free;
  end;
end;

ZYLAGON 22. Jun 2020 17:28

AW: Shift Cursor Down an anderes Programm senden
 
Mit sndkey32.pas sollte das funktionieren.
Die Unit einbinden, sicherstellen, dass das richtige Fenster aktiviert ist und mittels dem Sendkey-Befehl den Tastendruck simulieren.
Sollte dann ungefähr so lauten:
Delphi-Quellcode:
SendKeys('+{DOWN}',true);

Das '+'-Zeichen steht für die Shift-Taste und {DOWN} für Cursor nach unten.

VG ZYL

Dumpfbacke 25. Jun 2020 09:06

AW: Shift Cursor Down an anderes Programm senden
 
Mein Problem ist das ich es direkt an das Fenster schikcen möchte da das Programm auf einen Terminalserver läuft. Dort funktioniert es so nicht oder man muss hier ständig "angemeldet" sein.
Es geht mit allem möglichem hier. Es muss eine Besonderheit bei der Shuft Tasete geben. Alles geht nur wenn ich Shift drücken möchte geht es einfach nicht.
Das ganze ist wie verhext hier.

KodeZwerg 25. Jun 2020 09:23

AW: Shift Cursor Down an anderes Programm senden
 
Hallo Dumpfbacke,

gibt es ein Demoprojekt mit dem man sich beschäftigen könnte um Dein Problem zu lösen?

//edit
also ich mein eine Demo vom Zielprogramm, nicht ein Delphi source der SendKeys o.ä. beinhaltet.

grizzly 25. Jun 2020 12:56

AW: Shift Cursor Down an anderes Programm senden
 
Ich bin mir jetzt nicht mehr sicher (schon ewig nix mehr damit gemacht), aber gab es da nicht auch noch die feine Unterscheidung zwischen den linken und rechten Shift Tasten? Also vk_LShift und vk_RShift? Während das vk_Shift wiederum was spezielles darstellt? Ich denke, da musste ich mal bei der Verwendung der AsyncKeyState Routinen aufpassen. Glaub ich...

Rolf Frei 25. Jun 2020 14:23

AW: Shift Cursor Down an anderes Programm senden
 
Nur so als Tipp: Ändere mal in den Remotedesktop Verbindungseinstellungen unter "Lokale Ressourcen" bei "Tastatur" die Option auf "Auf diesem Computer" oder teste da mal die andern Einstellungen durch. Hatte ein ähnliches Prolbem mit einem QRCode-Leser mit Keyboardermulation, der die Zeichen auch nicht richtig übermittelt hatte. Insbesondere mit der Shift Taste gab es da seltsame Effekte. Nach dem ich das umgestellt hatte, kamen alle Zeichen richtig im Remotedesktop an.

Dumpfbacke 26. Jun 2020 16:33

AW: Shift Cursor Down an anderes Programm senden
 
Zitat:

Zitat von KodeZwerg (Beitrag 1468198)
Hallo Dumpfbacke,

gibt es ein Demoprojekt mit dem man sich beschäftigen könnte um Dein Problem zu lösen?

//edit
also ich mein eine Demo vom Zielprogramm, nicht ein Delphi source der SendKeys o.ä. beinhaltet.

Hallo KodeZwerg,
danke das du mir hier helfen möchtest. Von dem Programm gibt es das leider nicht da es einen Fachanwednung ist. Ich hatte das Teil auch schon in Verdacht aber es muss wirklich an der Shift Taste liegen.

Aus diesen Grund habe ich mir ein Programm unter Delphi erstellt. Es beinhaltet nur eine Listbox mit 5 Einträgen wo man mehr als ein Eintrag auswählen kann. Also MultSelect = True. Wenn ich versuche dieses anzusteuern geht es auch nicht. Es liegt also nicht an der Fachanwendung.
Was tut man nicht alles wenn man nicht weiterkommt. Man das ist wie verhext hier.

Du kannst es Dir somit sehr einfach selbst erstellen. Ein Formular mit einer Listbox drauf. Mehr nicht.

Dumpfbacke 26. Jun 2020 16:37

AW: Shift Cursor Down an anderes Programm senden
 
Zitat:

Zitat von grizzly (Beitrag 1468209)
Ich bin mir jetzt nicht mehr sicher (schon ewig nix mehr damit gemacht), aber gab es da nicht auch noch die feine Unterscheidung zwischen den linken und rechten Shift Tasten? Also vk_LShift und vk_RShift? Während das vk_Shift wiederum was spezielles darstellt? Ich denke, da musste ich mal bei der Verwendung der AsyncKeyState Routinen aufpassen. Glaub ich...

LShift oder Rshift geht leider auch nicht. Habe ich schon mal getestet.

Metschu 28. Jun 2020 15:19

AW: Shift Cursor Down an anderes Programm senden
 
Hallo,

so ein ähnliches Problem hatte ich mal mit der Tab-Taste und Citrix -> klick

Nachdem ich "MapVirtualKey" im Keybd_Event eingefügt habe, wurde die TAB-Taste erkannt.

Delphi-Quellcode:
keybd_event(VK_Tab, MapvirtualKey(VK_Tab, 0), 0, 0);


Vielleicht hilft dies auch bei dir?

Gruß

Torsten

Dumpfbacke 29. Jun 2020 15:32

AW: Shift Cursor Down an anderes Programm senden
 
Das geht leider auch nicht. Ich bin bei weitem noch nicht so weit das es auf den Terminalserver laufen lassen kann. Ich bin noch an den Tests auf den lokalen Rechner unter Windows 10. Selbt hier bekomme ich es nicht hin. Es ist hier also noch kein Einfluss vom Termininalserver usw. vorhanden.

Dumpfbacke 19. Aug 2020 06:28

AW: Shift Cursor Down an anderes Programm senden
 
Man das ganze ich wie verhext hier. Ich bekomme es einfach nicht hin. Hat eventuwll noch jemadn ein Tip für micht.

Danke Tanja

tewes 19. Aug 2020 07:51

AW: Shift Cursor Down an anderes Programm senden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mal in meiner Schatzkiste "gekruschtelt" und die anhängende Unit gefunden:

Shift-Down hat offensichtlich einen eigenen Code (SK_SHIFT_DN)

Dumpfbacke 15. Sep 2020 17:28

AW: Shift Cursor Down an anderes Programm senden
 
Danke Dir aber das geht auch leider nicht. Das ganze ich einfach nicht zu glauben. Wochen lang sitze ich nun das den blöden Problem. Ich kann das komplette Programm fernsteuern und ein Shift Cursor Down geht einfach nicht. Blöd das ich zu 99% am Ziel bin und es nun einfach nicht lösen kann es ist einfach wie verhext hier.

Danke an alle die es hier versucht haben mir zu helfen.Ich weiß nicht mehr weiter. Leider

Tanja

KodeZwerg 16. Sep 2020 07:47

AW: Shift Cursor Down an anderes Programm senden
 
Lokal klappt es prima mit den Sourcen von Waldemar Derr.
Also Ziel-Programm per Code in den Vordergrund schubsen, SendInputHelper ausführen, fertig.

Dumpfbacke 16. Sep 2020 12:02

AW: Shift Cursor Down an anderes Programm senden
 
danke für den Hinweis aber damit bekomme ich es auch nicht hin. Ich muss es unter Delphi 7 machen und dort geht der Code noch nicht. Aus Systen.SysUtils mach eich dann einfach nur SysUtils. Das geht ja noch aber bei System.UITypes und Gernerics.Collections funktioniert es nicht. Ich kann auch nicht im Code erkennen welchen Teil ich hier benötige um nur ein Shift Cursor Down zu schicken.

Das ganze ist vermutlich einfach nicht zu realisieren. Ich müsste ja auch kein Shift Down senden. Ich könnte es ja auch ganz einfach mit Sendmessage LB_SetSel machen. Die Zeilen werden dann ja auch markiert aber dann wir ein Button nicht sichtbar welchen man dann drücken muss. Ich vermute einmal das Programm macht da im Hintergund noch etwas enn man hier von Hnad markiert. Wenn ich es von Hand mache und mit Shift down alles markiere, so wird der Button dann sofort sichtbar. Es soll hier einfachnicht sien.


Danke für Deinen Hilfe.
Tanja


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz