Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Stellt eure Tutorial Anfragen hier.


  • Please log in to reply
28 replies to this topic
nnnik
  • Members
  • 1625 posts
  • Last active: Apr 11 2017 02:13 PM
  • Joined: 28 Jul 2012

Nice

Das ist doch was womit man arbeiten kann.


Visit the new forum ahkscript.org.

http://ahkscript.org


Bentschi
  • Moderators
  • 120 posts
  • Last active: Sep 05 2014 02:12 AM
  • Joined: 26 Nov 2008

Hab das mal neu gemacht...

https://dl.dropboxus.../datatypes.html



Alibaba
  • Members
  • 435 posts
  • Last active: Nov 19 2014 04:21 PM
  • Joined: 01 Nov 2012

Super, vielen Dank! Ich fügs gleich ein.


Find the recent autohotkey version here: ahkscript.org


Alibaba
  • Members
  • 435 posts
  • Last active: Nov 19 2014 04:21 PM
  • Joined: 01 Nov 2012

Update:

  • Bentschi's Windows API Tutorial ist jetzt wieder vollständig
  • denick's (bzw. just me's) Tutorial für "Expressions und Depressions" ebenfalls vollständig aufbereitet und im Hauptpost verlinkt

Find the recent autohotkey version here: ahkscript.org


jNizM
  • Members
  • 928 posts
  • Last active: Jan 12 2018 09:23 AM
  • Joined: 01 Aug 2012
Kann jemand das Dll-Tut erweitern?
Wie man auf die Werte hinter dem DllCall kommt.

Bsp Verkürzt:
MajorVersion := DllCall("GetVersion") & 0xff
MinorVersion := DllCall("GetVersion") >> 8 & 0xff
MsgBox % MajorVersion "." MinorVersion
oder
GetOSVersion() {
    return ((r := DllCall("GetVersion") & 0xFFFF) & 0xFF) "." (r >> 8)
}
MsgBox, % GetOSVersion()
Volle Funktion:
MsgBox, % "GetVersionEx function`n"
        . "OSVERSIONINFOEX structure`n`n"
        . "OSVersionInfoSize:`t`t"     GVEx[0] "`n"
        . "MajorVersion:`t`t"          GVEx[1] "`n"
        . "MinorVersion:`t`t"          GVEx[2] "`n"
        . "BuildNumber:`t`t"           GVEx[3] "`n"
        . "PlatformId:`t`t"            GVEx[4] "`n"
        . "CSDVersion:`t`t"            GVEx[5] "`n"
        . "ServicePackMajor:`t`t"      GVEx[6] "`n"
        . "ServicePackMinor:`t`t"      GVEx[7] "`n"
        . "SuiteMask:`t`t"             GVEx[8] "`n"
        . "ProductType:`t`t"           GVEx[9]

GetVersionEx() {
    static OSVEREX, init := VarSetCapacity(OSVEREX, 284, 0) && Numput(284, OSVEREX, "UInt")
    if (DllCall("GetVersionEx", "Ptr", &OSVEREX))
        return, { 0 : NumGet(OSVEREX,   0, "UInt"),   1 : NumGet(OSVEREX,       4, "UInt")
                , 2 : NumGet(OSVEREX,   8, "UInt"),   3 : NumGet(OSVEREX,      12, "UInt")
                , 4 : NumGet(OSVEREX,  16, "UInt"),   5 : StrGet(&OSVEREX+20, 128, "UTF-16")
                , 6 : NumGet(OSVEREX, 276, "UShort"), 7 : NumGet(OSVEREX,     278, "UShort")
                , 8 : NumGet(OSVEREX, 280, "UShort"), 9 : NumGet(OSVEREX,     282, "UChar") }
}



/*
BOOL WINAPI GetVersionEx(
    _Inout_  LPOSVERSIONINFO lpVersionInfo              Ptr
);


typedef struct _OSVERSIONINFOEX {
    DWORD dwOSVersionInfoSize;          0 (284)         UInt
    DWORD dwMajorVersion;               4 =>   4        UInt
    DWORD dwMinorVersion;               4 =>   8        UInt
    DWORD dwBuildNumber;                4 =>  12        UInt
    DWORD dwPlatformId;                 4 =>  16        UInt
    TCHAR szCSDVersion[128];            4 => 128        (A_IsUnicode) ? "Short" : "Char"
    WORD  wServicePackMajor;            2 => 276        UShort
    WORD  wServicePackMinor;            2 => 278        UShort
    WORD  wSuiteMask;                   2 => 280        UShort
    BYTE  wProductType;                 2 => 282        UChar
    BYTE  wReserved;                    Reserved for future use.
} OSVERSIONINFOEX, *POSVERSIONINFOEX, *LPOSVERSIONINFOEX;
*/

[AHK] 1.1.27.04 x64 Unicode | [WIN] 10 Pro (Version 1709)
My GitHub Profile | Donations are appreciated if I could help you

nnnik
  • Members
  • 1625 posts
  • Last active: Apr 11 2017 02:13 PM
  • Joined: 28 Jul 2012

Das wären binäre Berechnungen, oder ?

Es geht hierbei dann um Structs und wie man die einzelnen Datentypen manuel aus dem Struct erhält oder?

 

 

If the function succeeds, the return value includes the major and minor version numbers of the operating system in the low-order word, and information about the operating system platform in the high-order word.

For all platforms, the low-order word contains the version number of the operating system. The low-order byte of this word specifies the major version number, in hexadecimal notation. The high-order byte specifies the minor version (revision) number, in hexadecimal notation. The high-order bit is zero, the next 7 bits represent the build number, and the low-order byte is 5.

 

0,buildnr|00000101   MinorVersion,MajorVersion  32bit

 

 

Wenn du nun an MajorVersion kommen willst musst du exakt diese Berechnung ausführen:

 

 

0,buildnr|00000101   MinorVersion|MajorVersion & 0xFF = 00000000|00000000  00000000|MajorVersion =MajorVersion

 

Für MinorVersion:

 

0,buildnr|00000101   MinorVersion|MajorVersion >>8 &0xFF = 00000000|0,buildnr   00000101|MinorVersion &0xFF =

00000000|00000000  00000000|MinorVersion =MinorVersion

 

 

Aber dir ist schon klar, dass du einmal von GetVersion und einmal von GetVersionEx sprichst oder ?


Visit the new forum ahkscript.org.

http://ahkscript.org


jNizM
  • Members
  • 928 posts
  • Last active: Jan 12 2018 09:23 AM
  • Joined: 01 Aug 2012
Huch... ja jetzt seh ichs auch ^^

Ich habe die kürzeren oben genannten Beispiele gefunden und wollte halt wissen wie die das berechnen.
und wie berechne ich die Buildversion?
MajorVersion := DllCall("GetVersion") & 0xff
MinorVersion := DllCall("GetVersion") >> 8 & 0xff
BuildVersion := DllCall("GetVersion") ???????????          <==
MsgBox % MajorVersion "." MinorVersion "." BuildVersion
#include <windows.h>
#include <stdio.h>

void main()
{
    DWORD dwVersion = 0; 
    DWORD dwMajorVersion = 0;
    DWORD dwMinorVersion = 0; 
    DWORD dwBuild = 0;

    dwVersion = GetVersion();
 
    // Get the Windows version.

    dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
    dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));

    // Get the build number.

    if (dwVersion < 0x80000000)              
        dwBuild = (DWORD)(HIWORD(dwVersion));

    printf("Version is %d.%d (%d)\n", 
                dwMajorVersion,
                dwMinorVersion,
                dwBuild);
}
Edit... das nach dem Antwort-Schreiben, immer noch das Reply Fenster mit dem gesamten Inhalt offen ist, nervt gewaltig!
[AHK] 1.1.27.04 x64 Unicode | [WIN] 10 Pro (Version 1709)
My GitHub Profile | Donations are appreciated if I could help you

nnnik
  • Members
  • 1625 posts
  • Last active: Apr 11 2017 02:13 PM
  • Joined: 28 Jul 2012

Du musst den Wert verschieben bis der gewünschte Wert am Anfang der Nummer steht:

>>16 verschiebt die Nummer um 16 stellen nach rechts.

Danach musst du von der entstandenen Nummer den ungewünschten Teil entfernen.

Da du nur die ersten 8 bits haben willst reicht folgendes: & 0xFF

 

So würdest du auf die 5 kommen.


Visit the new forum ahkscript.org.

http://ahkscript.org


jNizM
  • Members
  • 928 posts
  • Last active: Jan 12 2018 09:23 AM
  • Joined: 01 Aug 2012
Danke nnnik
MajorVersion := DllCall("GetVersion") & 0xff
MinorVersion := DllCall("GetVersion") >> 8 & 0xff
BuildVersion := DllCall("GetVersion") >> 16 & 0xffff

MsgBox % MajorVersion "." MinorVersion "." BuildVersion
Und mit ner Funktion die ich gerade von Bentschi gefunden habe:
dwMajorVersion := LOBYTE(LOWORD(DllCall("GetVersion")))
dwMinorVersion := HIBYTE(LOWORD(DllCall("GetVersion")))
dwBuildVersion := HIWORD(DllCall("GetVersion"))

MsgBox, % dwMajorVersion "." dwMinorVersion "." dwBuildVersion

LOWORD(l) {
    return l&0xffff
}
HIWORD(l) {
    return (l>>16)&0xffff
}
LOBYTE(w) {
    return w&0xff
}
HIBYTE(w) {
    return (w>>8)&0xff
}

[AHK] 1.1.27.04 x64 Unicode | [WIN] 10 Pro (Version 1709)
My GitHub Profile | Donations are appreciated if I could help you

nnnik
  • Members
  • 1625 posts
  • Last active: Apr 11 2017 02:13 PM
  • Joined: 28 Jul 2012

Nicht ganz:

Den Wert den ich oben benutzt habe ist absichtlich Falsch (16).

ausserdem musst du das HighByte von dem HighWord erhalten und nicht einfach das HighWord benutzen.

 

BTW könnte jemand die Topic wieder anpinnen ?


Visit the new forum ahkscript.org.

http://ahkscript.org


jNizM
  • Members
  • 928 posts
  • Last active: Jan 12 2018 09:23 AM
  • Joined: 01 Aug 2012
Das Ergebnis bei beiden die ich gepostet habe ist richtig!
[AHK] 1.1.27.04 x64 Unicode | [WIN] 10 Pro (Version 1709)
My GitHub Profile | Donations are appreciated if I could help you

nnnik
  • Members
  • 1625 posts
  • Last active: Apr 11 2017 02:13 PM
  • Joined: 28 Jul 2012
Und wieso bist du dir da so sicher?

Visit the new forum ahkscript.org.

http://ahkscript.org


jNizM
  • Members
  • 928 posts
  • Last active: Jan 12 2018 09:23 AM
  • Joined: 01 Aug 2012
unbenanntawi6l5hpqk.png
[AHK] 1.1.27.04 x64 Unicode | [WIN] 10 Pro (Version 1709)
My GitHub Profile | Donations are appreciated if I could help you

nnnik
  • Members
  • 1625 posts
  • Last active: Apr 11 2017 02:13 PM
  • Joined: 28 Jul 2012

Gut dann will ich nishts gesagt haben.

BTW:

 

The high-order bit is zero, the next 7 bits represent the build number, and the low-order byte is 5.

Das ist dann wohl einfach falsch.


Visit the new forum ahkscript.org.

http://ahkscript.org