AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Wo ist oder wie heißt die Funktion: SHMessageBoxCheck?
Thema durchsuchen
Ansicht
Themen-Optionen

Wo ist oder wie heißt die Funktion: SHMessageBoxCheck?

Ein Thema von Luckie · begonnen am 2. Mai 2005 · letzter Beitrag vom 3. Jun 2005
Antwort Antwort
Seite 13 von 14   « Erste     3111213 14      
Mephistopheles
(Gast)

n/a Beiträge
 
#121

Re: Wo ist oder wie heißt die Funktion: SHMessageBoxCheck?

  Alt 7. Mai 2005, 13:46
Zitat von Blutiger Anfänger:
Hier habe ich noch jeweils einen Auszug aus der shell32.dll (nur Bezugnehmend auf die shlWapi.dll und den OrdinalWert 185) ,
vielleicht kann jemand, der Ahnung hat etwas damit anfangen (Unterschiede sind fett dargestellt)!

Vers.: 6.0.2800.1106

30 [NONAME] (forwarded to shlwapi.PathBuildRootW)
37 [NONAME] (forwarded to shlwapi.PathCombineW)
39 [NONAME] (forwarded to shlwapi.PathIsUNCW)
40 [NONAME] (forwarded to shlwapi.PathIsRelativeW)
57 [NONAME] (forwarded to shlwapi.PathGetDriveNumberW)

185 0009CEA2 [NONAME]
------------------------------------------------------------------------------------------


Vers.: 6.0.2900.2180

30 [NONAME] (forwarded to shlwapi.PathBuildRootW)
37 [NONAME] (forwarded to shlwapi.PathCombineW)
39 [NONAME] (forwarded to shlwapi.PathIsUNCW)
40 [NONAME] (forwarded to shlwapi.PathIsRelativeW)
57 [NONAME] (forwarded to shlwapi.PathGetDriveNumberW)
520 75 SHAllocShared (forwarded to shlwapi.SHAllocShared)
521 D3 SHLockShared (forwarded to shlwapi.SHLockShared)
522 EC SHUnlockShared (forwarded to shlwapi.SHUnlockShared)
523 A3 SHFreeShared (forwarded to shlwapi.SHFreeShared)

185 000D731F [NONAME]
Das hat nichts zu sagen. Die Ordinals haben nur die gleiche Nummer wie in SHLWAPI - haben aber nichts (zumindest nicht zwangsläufig) miteinander zu tun. Der eigentliche Bezug sind die "Export Forwarder", mit denen man als Delphianer herzlich wenig in Kontakt kommt. Diese Forwarder besagen in obiger Ausgabe, daß die jeweiligen Funktionen, z.B. in der zweiten DLL die Funktion #37, auf die jeweilige andere Funktion nach dem Muster DLLNAME.FUNKTIONSNAME verweisen. Diese Verweise können auch auf Ordinals geschehen, was dann so aussieht: DLLNAME.#FUNKTIONSNUMMER!

Das besagt im Grunde nur, daß man die Funktion, in den ersten drei Spalten (Nummer, Hint, Name) aufgelistet wird, den gleichen Prototypen wie die Funktion hat, zu der verwiesen wird.

Beispiel Kernel32.dll hat mehrere Export Forwarder. Einer der neueren (ich glaube ab Windows 2003 oder XP) ist GetLastError(), welcher in diesen Versionen auf ntdll.RtlGetLastWin32Error() verweist.
Wenn der Loader also so einen Forwarder findet, wird anstelle einer Adresse, die in das Modul zeigt, ggf. die DLL geladen (auf welche verwiesen wird) und die Adresse der Funktion (auf welche verwiesen wird,) wird eingetragen. Somit ist der Aufruf für den Aufrufer immer transparent, obwohl er bei o.g. Beispiel statt GetLastError() aus der Kernel32.dll eigentlich RtlGetLastWin32Error() aus der NTDLL.dll aufruft.

Zitat von Blutiger Anfänger:
Eine Frage noch an die Allgemeinheit, mein dumpbin funktioniert inzwischen,
(Link.exe hatte ne Macke), weiss jemand wie man den Dialog von TOMS,

Zitat:
-----------------------------------------------------------------------------
C:\WINDOWS\system32>dumpbin /exports shlwapi.dll | find "SHMessageBoxCheck"
185 00057865 [NONAME] _SHMessageBoxCheckA@24
191 000577DB [NONAME] _SHMessageBoxCheckW@24
291 000579FA [NONAME] _SHMessageBoxCheckExA@28
292 0005797B [NONAME] _SHMessageBoxCheckExW@28

The SHMessageBoxCheck family of functions are apparently exported only
by ordinal.
------------------------------------------------------------------------------
angezeigt bekommt,alles was ich hier Dumpbin gefunden habe , half nichts !

Gruss OPA
Ich wage zu behaupten, daß dies u.U. nicht die neueste dumpbin-Version ist. Das soll erst mit einer der wirklich neueren Versionen gehen. Irgendwo in einer Newsgroup nannten die es Whidbey-DUMPBIN (Whidbey war der Codename für irgendeine Windowsversion).
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#122

Re: Wo ist oder wie heißt die Funktion: SHMessageBoxCheck?

  Alt 7. Mai 2005, 14:37
Whidbey? Das müsste IMHO dann das Tool aus dem Visual Studio 2005 sein. AFAIK war das dessen Codename. Zumindest firmierte die Hilfe in der Beta 1 noch im Ordner "whidbey help". Jetzt (Beta 2) steht bloß noch ein schnödes "Help 8" da.
  Mit Zitat antworten Zitat
Blutiger Anfänger
(Gast)

n/a Beiträge
 
#123

Re: Wo ist oder wie heißt die Funktion: SHMessageBoxCheck?

  Alt 7. Mai 2005, 14:46
Hi Mephistopheles,

dies waren genau meine Zweifel, deswegen habe ich alles was ich mit shlWapi.dll
und Ordin... gefunden habe hier gepostet, es haette ja sein koennen ??!!

Danke fuer Deine aufschlussreiche Erklaerung, damit kann sogar ich was anfangen !!

Gruss OPA
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#124

Re: Wo ist oder wie heißt die Funktion: SHMessageBoxCheck?

  Alt 7. Mai 2005, 17:13
Zitat von MathiasSimmack:
Whidbey? Das müsste IMHO dann das Tool aus dem Visual Studio 2005 sein. AFAIK war das dessen Codename. Zumindest firmierte die Hilfe in der Beta 1 noch im Ordner "whidbey help". Jetzt (Beta 2) steht bloß noch ein schnödes "Help 8" da.
Ups. Dann war Whidbey wohl doch kein Windows?! Na jedenfalls war es ein Codename für irgendein MS-Produkt.

Zitat von Blutiger Anfänger:
Danke fuer Deine aufschlussreiche Erklaerung, damit kann sogar ich was anfangen !!
Gern jederzeit wieder
Ist halt etwas, mit dem man als Delphianer eher selten zu tun hat.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#125

Re: Wo ist oder wie heißt die Funktion: SHMessageBoxCheck?

  Alt 9. Mai 2005, 11:17
Zitat von Johnny_W:
1.Habe shlwapi.dll 6.0.2900.2180 auf WinXP SP2 benutzt und in den .exe ordner gepackt.
Resultat war der Fehler 126. Habe dann die Kernel32.dll dazugepackt->Fehlercode 1400.
Im übrigen wird CreateActCtx über die SHLWAPI->Kernel32.dll aufgerufen.
Kurz gesagt CreateActCtx liefert INVALID_HANDLE_VALUE zurück,in Bezug auf die Manifestdatei für unseren Dialog.(Irgendwo hatte ich mal eine tolle Erklärung *such*)

2.Habe shlwapi.dll 6.0.2900.2180 auf WinXP SP2 benutzt und in den .exe ordner gepackt.
Resultat war der Fehler 126. Habe dann XPMan in die Uses mit reingenommen -> Fehlercode 1400.
Danke fürs Testen. Hatte das gleiche Problem mit der Version aus SP1a (6.00.2800.1106 (xpsp1.020828-1920))
  Mit Zitat antworten Zitat
Blutiger Anfänger
(Gast)

n/a Beiträge
 
#126

Re: Wo ist oder wie heißt die Funktion: SHMessageBoxCheck?

  Alt 11. Mai 2005, 12:47
hallo zusammen,

Luckie's Programm funktioniert (mit Form und Button) auch unter XP SP1, wenn Manifest eingebunden wird !!
Habe es mit Delphi 7 PE getestet und Manifest eingebunden (Register WIN32),
danach einwandfreie Funktion !!!
Hinweis stand irgendwo in der MSDN !!
Jetzt wuerde mich aber immer noch interessieren, (was da im Detail) passiert ???!! !

Gruss OPA!
  Mit Zitat antworten Zitat
Blutiger Anfänger
(Gast)

n/a Beiträge
 
#127

Re: Wo ist oder wie heißt die Funktion: SHMessageBoxCheck?

  Alt 11. Mai 2005, 13:31
Sorry, Nachtrag!

Hab erst einmal selbst wieder suchen muessen, welche Seite das war !
hier

Note 4: ComCtl32.dll version 6 is not redistributable. If you want your application to use ComCtl32.dll version 6,
you must add an application manifest that indicates that version 6 should be used if it is available.
Unter SP1 ist zwar Vers.: 5.8... installiert, hab's aber mal probiert !

Gruss OPA !
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#128

Re: Wo ist oder wie heißt die Funktion: SHMessageBoxCheck?

  Alt 11. Mai 2005, 13:59
Zitat von Blutiger Anfänger:
Luckie's Programm funktioniert (mit Form und Button) auch unter XP SP1, wenn Manifest eingebunden wird !!
Da kann ich nur sagen:

Zitat:
Jetzt wuerde mich aber immer noch interessieren, (was da im Detail) passiert ???!! !
Das, und warum es bei SP2 auch ohne Manifest geht.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#129

Re: Wo ist oder wie heißt die Funktion: SHMessageBoxCheck?

  Alt 11. Mai 2005, 14:29
Zitat von Blutiger Anfänger:
Jetzt wuerde mich aber immer noch interessieren, (was da im Detail) passiert ?
Johnny_W schrieb, dass der Context wegen des fehlenden Manifests nicht erzuegt werden konnte...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#130

Re: Wo ist oder wie heißt die Funktion: SHMessageBoxCheck?

  Alt 11. Mai 2005, 14:51
Zu CreateActCtx:
Zitat von Microsoft:
If the function succeeds, it returns a handle to the returned activation context. Otherwise, it returns INVALID_HANDLE_VALUE.
INVALID_HANDLE_VALUE ist -1, 1400 ist ERROR_INVALID_WINDOW_HANDLE.

Da SHMessageBoxCheck() nur ein Wrapper für SHMessageBoxCheckEx() ist, hatte ich heute morgen mit der Ex-Version gespielt. Dabei habe ich festgestellt, dass unter SP1 die Dialog-Resourcen 305 und 4608 in SHLWAPI.DLL unvollständig sind und irre Werte aufweisen:

Code:
4608 DIALOG 0, 2496, -28472, 7
STYLE DS_ABSALIGN | WS_ICONICPOPUP | WS_MINIMIZE | WS_VISIBLE | WS_DISABLED | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_MAXIMIZE | WS_CAPTION | WS_VSCROLL | WS_HSCROLL | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
CAPTION "Ò7"
{
}
Wenn man spätere Versionen untersucht ergibt sich ein besseres Bild:

Code:
4608 DIALOG 0, 0, 210, 55
STYLE DS_MODALFRAME | DS_NOIDLEMSG | 0x8L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Error!"
FONT 8, "MS Shell Dlg"
{
 CONTROL 0, 4611, "STATIC", SS_ICON | WS_CHILD | WS_VISIBLE, 5, 5, 18, 20
 CONTROL "", 4609, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 5, 5, 200, 8
 CONTROL "&In the future, do not show me this dialog box", 4610, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 5, 20, 155, 10
 CONTROL "OK", 1, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 95, 35, 50, 14
 CONTROL "Cancel", 2, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 150, 35, 50, 14
 CONTROL "&Yes", 6, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 95, 35, 50, 14
 CONTROL "&No", 7, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 150, 35, 50, 14
}
Bis vor kurzem dachte ich damit die Erklärung für die fehlende Anzeige des Dialogs zu haben, aber wenn durch hinzufügen des Manifests der Dialog angezeigt wird, dann weiß ich auch nicht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 13 von 14   « Erste     3111213 14      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 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