vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Windows API
keybd_event Anwendungen steuern 
Autor: SCHAUAN
Datum: 06.04.05 12:13

Hallo allerseits,
ich möchte gern Daten aus Excel in einer zweiten Anwendung bearbeiten und zurück an Excel geben. Also in Excel kopieren, die Anwendung starten --> Anwendung erhält dabei den Focus, die Daten einfügen, bearbeiten und kopieren, die Anwendung schließen --> Excel sollte dann wieder den Focus haben, und am Ende wieder in Excel einfügen. Alle Aktionen werden ausschließlich mit Tastenkombinationen ausgeführt. Leider stecke ich da zuwenig drin. Ich habe mal ein "einfaches" Beispiel erstellt, um in Notepad Zeichen ( a <--> c) auszutauschen. Das kann man natürlich auch in Excel, sollte aber für mich zum einfacheren Verständnis der Lösung mit keybd_events dienen.
Da habe ich schon 3 Probleme.
1. Aus Excel wird nichts kopiert. Es werden im Notepad vorhandene Daten der Zwischenablage eingefügt
2. Notepad wird nicht beendet
3. In Excel wird nichts eingefügt
Versionen: Excel XP, NT 4
Hier ist der code:
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)

Const KEYEVENTF_KEYUP = &H2
Public Ergebnis

Sub bearbeiten3()
DoEvents
copy_excel3 'in Excel kopieren
oeffne3 'Notepad öffnen
paste_notepad3 'in Notepad einfügen
replace_notepad3 'in Notepad ersetzen
copy_excel3 'in Notepad kopieren - Tastenkombination Kopieren in Excel = Notepad
schliesse3 'Notepad schliessen
paste_notepad3 'in Excel einfügen - Tastenkombination Einfügen in Excel = Notepad
End Sub
Sub copy_excel3()
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyB, 0, 0, 0 'Alt-B für Bearbeiten
keybd_event vbKeyB, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyDown, 0, 0, 0 ' unter XP ist zuweilen die Down-Taste nötig
keybd_event vbKeyDown, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyK, 0, 0, 0 'K für Kopieren
keybd_event vbKeyK, 0, KEYEVENTF_KEYUP, 0
End Sub
Sub paste_notepad3()
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyB, 0, 0, 0 'Alt-B für Bearbeiten
keybd_event vbKeyB, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyE, 0, 0, 0 'E für Einfügen
keybd_event vbKeyE, 0, KEYEVENTF_KEYUP, 0
End Sub
Sub replace_notepad3()
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyS, 0, 0, 0 'Alt-S für Suchen
keybd_event vbKeyS, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyE, 0, 0, 0 'E für Ersetzen
keybd_event vbKeyE, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyC, 0, 0, 0 'kleines c, für großes c vorher shift betätigen
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyTab, 0, 0, 0
keybd_event vbKeyTab, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyA, 0, 0, 0 'kleines a, für großes a vorher shift betätigen
keybd_event vbKeyA, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyL, 0, 0, 0 'Alt-L für alles ersetzen
keybd_event vbKeyL, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyF4, 0, 0, 0 'Alt-F4 für Ersetzen-Fenster schließen
keybd_event vbKeyF4, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
End Sub
Sub oeffne3()
Ergebnis = Shell("C:\WINnt\notepad.EXE", 3)
End Sub
Sub schliesse3()
Close Ergebnis
End Sub
Bin für jede Hilfe dankbar,

Gr??e, SchauAn

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: keybd_event Anwendungen steuern 
Autor: ModeratorMartoeng (Moderator)
Datum: 07.04.05 00:07

Sorry, dass ich das so hart sage: aber das ist alles müll!
Warum nicht einfach das COM von Excel nutzen!?


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: keybd_event Anwendungen steuern 
Autor: SCHAUAN
Datum: 07.04.05 07:26

Hallo Martoeng,
wie ich geschrieben habe, dass dient dem Verständnis. Dass was ich dann tun will geht mit Excel nicht.
... ich glaube, ich bin einen Schritt weiter. Am Ende vom Makro copy_excel4
ein DoEvents.
Hier der komplette Entwicklungsstand.

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)

Const KEYEVENTF_KEYUP = &H2
Public Ergebnis

Sub bearbeiten4()
copy_excel4 'in Excel kopieren
oeffne4_NT 'Notepad öffnen
paste_notepad4 'in Notepad einfügen
replace_notepad4_NT 'in Notepad ersetzen
copy_excel4 'in Notepad kopieren - Tastenkombination Kopieren in Excel = Notepad
schliesse4 'Notepad schliessen
paste_notepad4 'in Excel einfügen - Tastenkombination Einfügen in Excel = Notepad
End Sub
Sub copy_excel4()
keybd_event vbKeyControl, 0, 0, 0 'STRG-C für Kopieren,
keybd_event vbKeyC, 0, 0, 0 'im Notepad muss ggf. vorher alles markiert werden !
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyControl, 0, KEYEVENTF_KEYUP, 0
DoEvents
End Sub
Sub paste_notepad4()
keybd_event vbKeyControl, 0, 0, 0 'STRG-V für Einfügen
keybd_event vbKeyV, 0, 0, 0
keybd_event vbKeyV, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyControl, 0, KEYEVENTF_KEYUP, 0
End Sub
Sub replace_notepad4_NT()
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyS, 0, 0, 0 'Alt-S für Suchen - in XP Alt-H !
keybd_event vbKeyS, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyE, 0, 0, 0 'E für Ersetzen
keybd_event vbKeyE, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyC, 0, 0, 0 'kleines c, für großes c vorher shift betätigen
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyTab, 0, 0, 0
keybd_event vbKeyTab, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyA, 0, 0, 0 'kleines a, für großes a vorher shift betätigen
keybd_event vbKeyA, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyL, 0, 0, 0 'Alt-L für alles ersetzen
keybd_event vbKeyL, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyF4, 0, 0, 0 'Alt-F4 für Ersetzen-Fenster schließen
keybd_event vbKeyF4, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
End Sub
Sub oeffne4_NT()
Ergebnis = Shell("C:\WINnt\notepad.EXE", 3)
End Sub
Sub oeffne4_XP()
Ergebnis = Shell("C:\WINDOWS\notepad.EXE", 3)
End Sub
Sub schliesse4()
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyF4, 0, 0, 0 'Alt-F4 für Ersetzen-Fenster schließen
keybd_event vbKeyF4, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
'Close Ergebnis
End Sub
Sub replace_notepad4_XP()
keybd_event vbKeyControl, 0, 0, 0 'Alt-B für Bearbeiten
keybd_event vbKeyH, 0, 0, 0 'Alt-B für Bearbeiten
keybd_event vbKeyH, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyControl, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyC, 0, 0, 0 'kleines c, für großes c vorher shift betätigen
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyTab, 0, 0, 0
keybd_event vbKeyTab, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyA, 0, 0, 0 'kleines a, für großes a vorher shift betätigen
keybd_event vbKeyA, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyL, 0, 0, 0 'Alt-L für alles ersetzen
keybd_event vbKeyL, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyF4, 0, 0, 0 'Alt-F4 für Ersetzen-Fenster schließen
keybd_event vbKeyF4, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
End Sub

Gr??e, SchauAn

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: keybd_event Anwendungen steuern 
Autor: ModeratorMartoeng (Moderator)
Datum: 07.04.05 10:32

Wieso? Was willst Du denn danach tun?


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: keybd_event Anwendungen steuern 
Autor: SCHAUAN
Datum: 07.04.05 17:12

Hallo Martoeng,
ich möchte z.B. eine Grafik aus einem Excel-Sheet in Paint spiegeln. Das bekomme ich anders nicht gebacken. Den Test-Code für Notepad habe ich jetzt soweit, dass er läuft, mit folgenden Änderungen zur letzten Version
- in jedem Makro mit keybd.. am Ende DoEvents
- im Schließen-Makro noch die Taste n - wegen der Speichern-Abfrage
- ein Extra - Makro für das Kopieren im Notepad - zusätzlich alles markieren, unter NT per Menübefehl, für XP muß noch STRG-A programmiert werden
- und vor dem Einfügen in Excel im Hauptmakro (bearbeiten4) eine kurze Wartezeit sonst kommen die vorher kopierten Daten und nicht die in Notepad kopierten.

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)

Const KEYEVENTF_KEYUP = &H2
Public Ergebnis

Sub bearbeiten4()
copy_excel4 'in Excel kopieren
oeffne4_NT 'Notepad öffnen
paste_notepad4 'in Notepad einfügen
replace_notepad4_NT 'in Notepad ersetzen
copy_notepad4 'in Notepad kopieren
Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 2)
schliesse4 'Notepad schliessen
paste_notepad4 'in Excel einfügen - Tastenkombi Einfügen in Excel = Notepad
End Sub
Sub copy_excel4()
keybd_event vbKeyControl, 0, 0, 0 'STRG-C für Kopieren,
keybd_event vbKeyC, 0, 0, 0
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyControl, 0, KEYEVENTF_KEYUP, 0
DoEvents
End Sub
Sub copy_notepad4()
keybd_event vbKeyControl, 0, 0, 0 'STRG-A-C für Markieren und Kopieren,
keybd_event vbKeyA, 0, 0, 0
keybd_event vbKeyA, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyC, 0, 0, 0
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyControl, 0, KEYEVENTF_KEYUP, 0
DoEvents
End Sub
Sub paste_notepad4()
keybd_event vbKeyControl, 0, 0, 0 'STRG-V für Einfügen
keybd_event vbKeyV, 0, 0, 0
keybd_event vbKeyV, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyControl, 0, KEYEVENTF_KEYUP, 0
End Sub
Sub replace_notepad4_NT()
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyS, 0, 0, 0 'Alt-S für Suchen - in XP Alt-H !
keybd_event vbKeyS, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyE, 0, 0, 0 'E für Ersetzen
keybd_event vbKeyE, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyC, 0, 0, 0 'kleines c, für großes c vorher shift
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyTab, 0, 0, 0
keybd_event vbKeyTab, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyA, 0, 0, 0 'kleines a, für großes a vorher shift
keybd_event vbKeyA, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyL, 0, 0, 0 'Alt-L für alles ersetzen
keybd_event vbKeyL, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyF4, 0, 0, 0 'Alt-F4 für Ersetzen-Fenster schließen
keybd_event vbKeyF4, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
DoEvents
End Sub
Sub oeffne4_NT()
Ergebnis = Shell("C:\WINnt\notepad.EXE", 3)
End Sub
Sub oeffne4_XP()
Ergebnis = Shell("C:\WINDOWS\notepad.EXE", 3)
End Sub
Sub schliesse4()
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyF4, 0, 0, 0 'Alt-F4 für Fenster schließen
keybd_event vbKeyF4, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyN, 0, 0, 0 'N für nicht Speichern
keybd_event vbKeyN, 0, KEYEVENTF_KEYUP, 0
'Close Ergebnis
DoEvents
End Sub
Sub replace_notepad4_XP()
keybd_event vbKeyControl, 0, 0, 0 'Alt-H für Bearbeiten
keybd_event vbKeyH, 0, 0, 0
keybd_event vbKeyH, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyControl, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyC, 0, 0, 0 'kleines c, für großes c vorher shift betätigen
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyTab, 0, 0, 0
keybd_event vbKeyTab, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyA, 0, 0, 0 'kleines a, für großes a vorher shift betätigen
keybd_event vbKeyA, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, 0, 0
keybd_event vbKeyL, 0, 0, 0 'Alt-L für alles ersetzen
keybd_event vbKeyL, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyF4, 0, 0, 0 'Alt-F4 für Ersetzen-Fenster schließen
keybd_event vbKeyF4, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0
DoEvents
End Sub

Gr??e, SchauAn

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: keybd_event Anwendungen steuern 
Autor: ModeratorMartoeng (Moderator)
Datum: 07.04.05 17:37

Grafik per COM aus Excel holen, in einer PictureBox bspw. spiegeln (Tipps gibt's dazu reichlich) und dann wieder zurück. Keine Tastendrücke notwendig!!!!!!!!!!!!!!!!!!!!!!!!!!!


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: keybd_event Anwendungen steuern 
Autor: SCHAUAN
Datum: 07.04.05 17:42

... mein Problem ist, dass es bis runter zu Excel97 laufen muss und in vba. Da klappt auch die Picturebox (noch?) nicht.

Gr??e, SchauAn

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: keybd_event Anwendungen steuern 
Autor: ModeratorMartoeng (Moderator)
Datum: 08.04.05 00:13

Schon mal was von DCs gehört? Die gehen mit jedem Excel und jedem VBA, weil sie bestandteil von windows sind. Mit StretchBlt einfach umdrehen und schon ist es fertig.


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: keybd_event Anwendungen steuern 
Autor: SCHAUAN
Datum: 08.04.05 16:23

Hallo Martoeng,
kenne nur DJ's
hast Du 'ne Erklärung und/oder ein Beispiel und/oder 'nen deutschen link? Ich bin gerade beim googeln, aber habe bislang noch nix deutsches gefunden und zum reinarbeiten wär das schon besser. Wie gesagt, ich programmiere fast nur vba, und passe ab und an API-Programme aus VB an meine VBA-Bedürfnisse an...
Danke, Andre

Gr??e, SchauAn

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: keybd_event Anwendungen steuern 
Autor: ModeratorMartoeng (Moderator)
Datum: 08.04.05 16:42

DC=DeviceContext. Jedes normale Fenster hat einen, der wird zum Zeichnen des Objekts verwendet. Windows malt ja alles *g*
Direkt ein Tutorial dazu wüsste ich nicht. Aber wenn Du irgendwo Anfänger-Sachen zu BitBlt oder StretchBlt findest, dann wird da auch meist erklärt wie DCs genau funktionieren.


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel