Announcement

Collapse
No announcement yet.

ohje, die structs...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ohje, die structs...

    Hallo liebe C-Fraktion,<p>
    auch auf die Gefahr hin, dass es langweilig wird: Ich habe mal wieder meine Schwierigkeiten mit den C-Strukturen.
    <pre><code>
    struct TWIconDataT {
    DWORD imageIndex;
    union {
    NOTIFYICONDATAW dw;
    NOTIFYICONDATAA da;
    };
    };<p><code>
    typedef TWIconDataT* pTWIconDataT;<p><code>
    struct TWIconsInfoT {
    int Cnt;
    pTWIconDataT* iconData;
    };<p><code>
    struct TWDataT {
    DWORD unknown[7];
    TWIconsInfoT* iconsInfo;
    HIMAGELIST iconList;
    };<p><code>
    typedef pTWIconDataT WINAPI (*COMCTL32_332_T) (TWIconsInfoT* info,int index);
    COMCTL32_332_T COMCTL32_332;<p><code>
    void fkt()
    {
    HINSTANCE hLib=LoadLibrary("COMCTL32.DLL");
    COMCTL32_332=(COMCTL32_332_T) GetProcAddress(hLib,LPCSTR(332));
    ...
    }
    </code></pre><p>
    Wie sähe das in Delphi aus?<p>
    Danke,<br>
    Markus

  • #2
    Hi Markus, du versuchst auf die TNA-Icons zuzugreifen?! ;o) Ich könnte mir das vorstellen, weil ich schon seit einiger Zeit eine Delphi-Umsetzung der von dir geposteten C-Typen hier liegen habe. Deswegen kam´s mir auch so bekannt vor. Ich weiß bloß nicht mehr, aus welchem Forum die stammen. Könnte sein, dass du hier im EF fündig wirst. Ich weiß aber, dass wir das Thema vor ein paar Wochen in der Delphi-PRAXiS diskutiert haben.<br>
    Das einzige, das ich nicht kenne, ist der Aufruf der Funktion "332" aus der "comctl32.dll". Also, ich weiß nicht, ob das eine dokumentierte oder eine undokumentierte Funktion ist. Wahrscheinlich letzteres. Auf jeden Fall sehr interessant. )

    <pre><b>type</b>
    TWIconDataT =
    (<b>packed</b>) <b>record</b>
    imageIndex : dword;
    <b>case</b> integer <b>of</b>
    0: dw: TNotifyIconDataW;
    1: da: TNotifyIconDataA;
    <b>end</b>;
    pTWIconDataT = ^TWIconDataT;<br><br>
    TWIconsInfoT =
    (<b>packed</b>) <b>record</b>
    Cnt : integer;
    iconData = pTWIconDataT;
    <b>end</b>;<br><br>
    TWDataT =
    (<b>packed</b>) <b>record</b>
    unknown : <b>array</b>[0..6]<b>of</b> dword;
    iconsInfo : ^TWIconsInfo;
    iconList : HIMAGELIST;
    <b>end</b>;<br><br>
    COMCTL32_332_T =
    <b>function</b>(info: ^TWIconsInfoT; index: integer): pTWIconsDataT; <b>stdcall</b>;<br><br>
    <b>procedure</b> fkt;
    <b>var</b>
    hLib : dword;
    COMCTL32_332 : COMCTL32_332_T;
    <b>begin</b>
    hLib := LoadLibrary('comctl32.dll');
    <b>if</b>(hLib &lt;&gt; 0) <b>then</b>
    <b>begin</b>
    COMCTL32_332 := GetProcAddress(hLib,POINTER(332));
    <b>if</b>(@COMCTL32_332 = <b>nil</b>) <b>then</b>
    <b>begin</b>
    FreeLibrary(hLib); hLib := 0;
    <b>end</b>;
    <b>end</b>;<br><br>
    ...<br><br>
    <b>if</b>(hLib &lt;&gt; 0) <b>then</b>
    FreeLibrary(hLib);
    <b>end</b>;</pre>

    So, das müsste es gewesen sein. Das "packed" in Klammern brauchst du nicht zwangsläufig; kannst ja mal ausprobieren was am besten läuft. Ich habe allerdings einen Unterschied zu dem Code bemerkt, den ich hier liegen habe. Bei mir ist die Union im ersten Typ genau anders herum deklariert:

    <pre>TTrayIconInfo =
    <b>record</b>
    imageIndex: Cardinal;
    <b>case</b> Boolean <b>of</b>
    false: (notifyIconDataA: TNotifyIconDataA);
    true : (notifyIconDataW: TNotifyIconDataW);
    <b>end</b>;</pre>

    Der Rest ist mehr oder weniger identisch, nur -wie gesagt!- diese Funktion kommt in "meinem" Code gar nicht vor. Markus, könntest du auch mal den Rest des Codes posten? ;o) Was diese Funktion "COMCTL32_332" noch macht, wäre interessant.<br><br>
    Gruß,<br>Mathias

    Comment


    • #3
      Hi Mathias,<p>
      vielen herzlichen Dank. Ich werde das heute abend ausprobieren, habe aber keine Bedenken, wenn ich das so sehe !<br>
      Nun zum Problem: Die Funktion ist undokumentiert, wenn ich den Code hier poste dann kann ich mir sofort ein neues Projekt suchen, da das der wesentliche Bestandteil sein wird und es sonst nächste Woche tausende von diesen Programmen gäbe....<p>
      Gruß,<br>
      Markus<p&gt

      Comment


      • #4
        Es gibt im WEB C Sourcen die diese funktionen näher beschreiben. Im grunde lassen sich die TrayIcon's Symbole manipluieren und abfragen. Ein TrayIcon-Ersatz wäre damit möglich usw. usw.

        Gruß Hage

        Comment


        • #5
          @Markus: Gut, das Argument sehe ich ein. Da aber Hagen sagte, im Web findet man was dazu, werde ich bei Gelegenheit mal selbst schauen und dann tausende Programme schreiben, die natürlich viiiiiiiiiel besser sind als deins. :-)

          Comment


          • #6
            Okay <p>
            Ich denke mal, dass du auf der Suche ohnehin interessantere Dinge finden wirst als der winzige Code, den ich habe.<p>
            Gruß,<br>
            Markus<p>
            PS: Ich hoffe wir bleiben Freunde ;-)!!

            Comment


            • #7
              Ich will ja niemanden entäuschen, aber die Funktionen wurden von Microsoft dokumentiert.<br>
              (natürlich nicht die privaten Strukturen der Standard-Shell

              - nic

              Comment


              • #8
                Hi Nico.<br><br>
                Dann habe ich wahrscheinlich nicht richtig geguckt. Im PSDK finde ich zwar was zur Taskbar und den Icons ... usw. ... aber das beschränkt sich nur auf die "Shell_NotifyIcon"-Funktion und Co.<br>
                Hast du´s etwas genauer zur Hand?<br><br>
                Gruß,<br>Mathias.<br><br>
                @Markus: Aber sicher doch. :-

                Comment


                • #9
                  Moin Mathias,<br>
                  <br>
                  die Funktion 332 der ComCtl32 dürfte tatsächlich zu den undokumentierten Funktionen gehören, da sie nur über ihren Ordinalwert exportiert wird.<br>
                  Mir fällt jedenfalls keine Funktion ohne Namen ein, die dokumentiert wäre. (ich lasse mich gerne eines besseren belehren ;-))<br>
                  Falls Du Dich noch erinnerst: Der Icon Dialog ist inzwischen dokumentiert.<br>
                  <br>
                  Ciao<br>
                  Chri

                  Comment


                  • #10
                    Deine Funktion heißt <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/CommCtls/Common/Functions/DPA_GetPtr.asp" target="_blank">DPA_GetPtr</a> (und wird selbst unter MSVC (comctl32.lib) per Ordinal importiert).<br>
                    Siehe auch <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnapiover/html/api-overview.asp" target="_blank">Settlement Program Interfaces</a> (unter <b>User Interface Design and Development—Windows Controls</b>)

                    - nico

                    ps: ließ Dir mal <a href="http://www.geocities.com/SiliconValley/4942/arrays.html" target="_blank">Dynamic Array Routines</a> durch, dann kannst Du Deine Typdeklarationen korrigieren.<br>
                    (bzw. das <a href="http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm" target="_blank">Platform SDK</a> (glaube mindestens 3672.1 (August 2002))

                    Comment

                    Working...
                    X