Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
856to860
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
856to860
856to860
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

sendmessage und verwendung

sendmessage und verwendung
21.03.2007 10:50:58
chris b

Hallo guten morgen zusammen,
ich habe eine frage zu einem Object.Würde mich freuen wenn es mir jemand kurz erklären könnte.
Ich habe folgenden code unten angefügt verstehe in zum größten teil nur weiß ich nicht was sendmessage
" SendMessage hWnd, WM_USER + 18, 0, 0 "
also diese Codeteil macht oder wozu mann in noch verwenden kann in z.b anderen Anwendungen.Beispiel wäre auch super.
Ich danke euch vielmals für eure super Hilfe !!!!! danke gruß Chris
------------------------------------------------------------------------------------------------------------------------------------------------------
----
Daten Importieren aus Exceldatei von Powerpiont
' Deklarieren der nötigen API-Routinen:
Declare


Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As Long) As Long
Declare 

Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Sub GetExcel()
Dim XL1 As Object    ' Variable für Verweis auf
' Microsoft Excel.
Dim ExcelLiefNicht As Boolean    ' Attribut für Freigabe am Ende.
' Überprüfen, ob eine Kopie von Microsoft Excel bereits
' ausgeführt wird.
On Error Resume Next    ' Fehlerbehandlung zurückstellen.
' GetObject-Funktionsaufruf ohne erstes Argument gibt einen Verweis auf
' eine Instanz der Anwendung zurück. Wenn die Anwendung nicht
' ausgeführt wird, tritt ein Fehler auf.
Set XL1 = GetObject(, "Excel.Application")
If Err.Number <> 0 Then ExcelLiefNicht = True
Err.Clear    ' Err-Objekt im Fehlerfall löschen.
' Prüfen auf Microsoft Excel. Wenn Microsoft Excel ausgeführt wird, wird
' dies in die Tabelle ausgeführter Objekte eingetragen.
DetectExcel
' Objektvariable so festlegen, daß sie auf die gewünschte Datei verweist.
Set XL1 = GetObject("C:\Documents and Settings\byc3ba\Desktop\testdecker.xls")
' Microsoft Excel mit zugehöriger Application-Eigenschaft einblenden.
' Fenster mit der Datei unter Verwendung der Windows-Auflistung des
' XL1-Objektverweises anzeigen.
XL1.Application.Visible = True
XL1.Parent.Windows(1).Visible = True
cb = XL1.activesheet.Cells(1, 1)
' Dateiverarbeitung.
' Wenn diese Kopie von Microsoft Excel beim Starten des Beispiels
' nicht ausgeführt wurde, wird Excel mit der Quit-Methode des
' Application-Objekts beendet. Wenn Sie versuchen, Microsoft Excel zu
' beenden, blinkt die Titelleiste, und Sie werden
' in einer Meldung gefragt, ob Sie geladene Dateien speichern möchten.
If ExcelLiefNicht = True Then
XL1.Application.Quit
End If
Set XL1 = Nothing    ' Verweis auf Anwendung und
' Tabelle freigeben.
End Sub


Sub DetectExcel()
' Diese Prozedur erkennt, ob Excel ausgeführt wird, und registriert dies.
Const WM_USER = 1024
Dim hWnd As Long
' Wenn Excel ausgeführt wird, wird durch Ausführen dieses
' API-Aufrufs die zugehörige Zugriffsnummer zurückgegeben.
hWnd = FindWindow("XLMAIN", 0)
If hWnd = 0 Then    ' 0 bedeutet, daß Excel nicht ausgeführt wird.
Exit Sub
Else
' Excel wird ausgeführt. Verwenden der API-Funktion
' SendMessage, um Excel in der Tabelle ausgeführter
' Objekte einzutragen.
SendMessage hWnd, WM_USER + 18, 0, 0
End If
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: sendmessage und verwendung
21.03.2007 13:38:49
Philipp von Wartburg
Hallo Chris
Mit "SendMessage hWnd, WM_USER + 18, 0, 0" wird die Anwendung Excel in die Tabelle der ausgeführten Objekte eingetragen. Diese Tabelle wird engl. ROT genannt (Running Object Table). Solange ein Objekt bzw. eine Anwendung nicht in dieser Tabelle eingetragen ist, kann man nicht mittels GetObject zugreifen.
Gewöhnlich wird eine Anwendung, wenn man diese startet, automatisch in die ROT eingetragen. Es gibt jedoch Fälle, wo dies nicht passiert. Zum Beispiel, wenn man die Anwendung (z.B. Excel) anhand der VBA/VB-Codezeile
Shell "Excel.exe", vbMinimizedNoFocus
startet. Weil Excel bzw. das Anwendungsfenster von Excel ohne Fokus geöffnet wird, wird es nicht in die ROT geschrieben. Wenn man dann
x = GetObject(, "Excel.Application")
ausführt, tritt der Laufzeitfehler 429 auf.
Diesen Fehler kann man verhindern, indem man die laufende Excel-Anwendung explizit mittels SendMessage ... einträgt.
Im Prinzip kannst Du diesen Codeteil auch in anderen Programmen einsetzen. Gewöhnlich ist dies jedoch nicht nötig, da, wie gesagt, im Normalfall die ROT-Eintragung von Windows automatisch vorgenommen wird.
Gruß
Philipp von Wartburg
www.xlam.ch
Anzeige
AW: sendmessage und verwendung
21.03.2007 15:05:42
chris b
Wow , vielen Dank !
Das ist mal ne echt gute erklärung !! Dankeschön und schönen Tag !
AW: sendmessage und verwendung
21.03.2007 22:20:44
chris b
Hallo Philipp, vielen dank noch einmal.
EIne frage hätte ich dazu noch.
Wo liegt diese Tabelle
"Diese Tabelle wird engl. ROT genannt (Running Object Table)"
kann ich da irgendwqie reinsxhauen und text lesen ? oder kann ich die rigendwie mit VBA auslesen per schleife oder so ?
Danke !gruß Chris
AW: sendmessage und verwendung
23.03.2007 10:21:49
Philipp von Wartburg
Hallo Chris
ROT ist eine vom Windows Betriebssystem geführte Tabelle. Sie befindet sich im Speicher (existiert also nicht als Datei oder dergleichen). Normalerweise benötigt man die ROT nicht. Ausser vielleicht, man ist spezialisiert auf Inter-Prozess-Programmierung und kennt sich mit C#, Pointern usw. bestens aus. Als Excel- oder auch generell als Anwendungsentwickler wirst Du aber kaum jemals die ROT anzusprechen brauchen. Falls man trotzdem mal irgendeine Info aus der ROT benötigt, gibt es sicher einfachere Wege, z.B. über ein spezielles ActiveX-Control, eine DLL oder ähnliches.
Gruß
Philipp
www.xlam.ch
Anzeige
AW: sendmessage und verwendung
23.03.2007 22:46:55
chris b
Ok.Jetzt ist es schon klarer :)
Vielen Dank und schönes WE !!
gruß Chris
AW: sendmessage und verwendung
23.03.2007 22:55:48
chris b
Hallo Phillip, ich müsste noch einmal eine frage los werden.Wäre echt super wenn du noch mal rat hast.
Und zwar beschäftige ich mich jetzt ein bischen mit dem Sendmessage.
Habe das gefunden.
Else
'Excel wird ausgeführt. Verwenden der API-Funktion SendMessage,
'um Excel in der Tabelle ausgeführter Objekte einzutragen.
SendMessage hWnd, WM_USER + 18, 0, 0
Das ist wie auch in meinem Code da wird also excel in die root tabelle eingetragen.
Jetzt meine frage.Welche sendmessage befehle gibt es noch ?
Ich nehme an als befehl kan man dan das bezeichnen:WM_USER + 18, 0, 0
Danke noch einmal allen die mir bis jetzt geholfen haben !!
Danke Phillip !
Anzeige
AW: sendmessage und verwendung
25.03.2007 12:37:38
Philipp von Wartburg
Hallo Chris
Es gibt praktisch unendlich viele "Befehle" mit SendMessage. SendMessage macht nichts anderes als eine Meldung in die Message Queue des Betriebssystems Windows zu stellen.
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd as Long, ByVal wMsg as Long, ByVal wParam as Long, ByVal lParam As Long) As Long
- Der erste Parameter "hWnd" gibt sozusagen den Empfänger an (hWnd steht für den Window-Handle des Prozesses, der die Message verarbeiten soll).
- "wMsg" stellt die Meldung bzw. den Befehl dar. Die Konstante WM_USER ist eine von über 180 verschiedenen Standard WM_x-Konstanten. Zudem kann man "neue" Werte übergeben, z.B. durch WM_USER + 18. Da wMsg ein Long-Datentyp ist, gibt es theoretisch über 21 Milliarden Möglichkeiten.
- "wParam" und "lParam" sind weitere zwei Parameter, mit denen man die Meldung (wMsg) näher spezifizieren kann.
Welche Kombinationen von wMsg, wParam und lParam möglich sind, wird vom Empfänger-Prozess spezifiziert.
Ich empfehle Dir, mal im Web nach SendMessage zu suchen und so Informationen zu holen. Auf jeden Fall ist entsprechende Fachliteratur nötig. Die Grundlagen zu diesem Thema füllen ohne weiteres mehrere Bücher.
Grüße
Philipp
www.xlam.ch
Anzeige
AW: sendmessage und verwendung
25.03.2007 14:05:19
chris b
::Die Grundlagen zu diesem Thema füllen ohne weiteres mehrere Bücher.
Ohh :)
Vielen Dank Phillip für die erneute super Antwort !! Schönen Sonntag !!!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige