Vollständige Version anzeigen : [C/C++] [Assembler-Tut] WindowStealther


KingKa0s
23.03.2006, 12:32

Bevor ich in den Urlaub gefahren bin habe ich eine PN bekommen, weil jemand das Programm nicht laden konnte, also habe ich es (um zu erreichen, das die Exe kleiner ist) das Programm mal in ASM übersetzt, um das Programm hier im board in den Anhang laden zu können. Inzwischen gibt es ja XUP auf das ich meine (auch in C++ geschriebenen, etwas größeren) Programme hochladen kann.

Das soll mich aber nicht davon abhalten euch ein Tutorial in Assemblerprogrammierung zu bieten. Der (in lowlevel Assembler geschriebene) Quellcode ist sehr ausführlich (fast jede Zeile) und deutsch kommentiert. In der *;ASM-Datei steht mit welchem Compiler man die Datei compilieren kann.

(;xup~in/dl,21439659/http:xupraidrushwsdownloadphpvalid1id2dcd9961b08f60d263f07527515f0;rar/)
EXE-Size: 6;144 Bytes


Beschreibung:

Das Programm kann Fenster halbdurchsichtig (tranzkluent) machen. Dazu muss man einfach das Programm starten, die gewünschte Sichtbarkeit mit dem Schieberegler einstellen. Dann das Fenster in den Vordergrund holen, das durchsichtig gemacht werden soll und Strg+Alt+F6 drücken. Die Trankluenz bleibt auch nach dem schließen des WindowStealthers erhalten.


Source-Code parts


;========================================================================== =================
; WindowStealther;asm - FASM (flat assembler 1;64)
; ;;;flatassembler~net/
; Fenster halbtransparent machen (Transkluenz)
; Programmiert von KingKa0s
;========================================================================== =================

format PE GUI 4;0
entry start

;========================================================================== =================
; Für das Programm notwendige Makros/Strukturen
;-------------------------------------------------------------------------------------------
include '.;\.;\include\win32a;inc'

;========================================================================== =================
; vordefinierte Strings / initialisierte und nicht initialisierte Variablen
;-------------------------------------------------------------------------------------------
section ';data' data readable writeable

Title db 'WindowStealther',0
ClassName db 'WindowStealtherMainWindow',0
hotkeyerr db 'Strg + Alt + F6 konnten nicht als Hotkeys definiert werden, da schon ein anderes Programm diese Kombination verwendet;',0

WinX dd 0 ;X-Koordinaten, Abstand in Pixel vom linken Bildschirmrand
WinY dd 0 ;Y-Koordinaten, Abstand in Pixel vom oberen Bildschirmrand
WinW dd 145 ;Breite des Hauptfensters
WinH dd 120 ;Höhe des Hauptfensters

hWnd dd ? ;Handle des Hauptfensters
scrollhwnd dd ? ;Handle der Scrollbar

_scrollbar db 'scrollbar',0
scrollinfo SCROLLINFO

_label db 'static',0
hotkeylabel db 'Strg + Alt + F6',0

_button db 'button',0
checkboxtext db 'Stay on Top',0

;-------------------------------------------------------------------------------------------
; For structures one can use notation:
; wc WNDCLASS
; I chose otherwise as more clear and understanding in the statements
;-------------------------------------------------------------------------------------------
wc: ;WNDCLASS Strucktur (API=RegisterClass)
wc;style dd ? ;Fenster-Style
wc;lpfnWndProc dd ? ;Adresse der lpfnWndProc Funktion
wc;cbCl;tra dd ? ;"Class Extra Bytes" um der ClassStructure zusätzliche Bytes aus dem Speicher zuzuweisen
wc;cbWndExtra dd ? ;"Window Extra Bytes" um der WindowStructure zusätzliche Bytes aus dem Speicher zuzuweisen
wc;hInstance dd ? ;Handle des Programms / der Programminstanz
wc;hIcon dd ? ;Handle des Mainicons, das im Fenstertitel angezeigt wird
wc;hCursor dd ? ;Handle des Cursors, der Standartmäßig im Fenster angezeigt werden soll
wc;hbrBackground dd ? ;Hintergrundfarbe des Fensters
wc;lpszMenuName dd ? ;Menü-ID
wc;lpszClassName dd ? ;String für die Fensterklasse

msg: ;WMG Struktur (API=GetMessage)
msg;hwnd dd ? ;Handle des Fensters, dass die Message erhalten hat
msg;message dd ? ;Die Nummer der Message / ID
msg;wParam dd ? ;Zusatzinformation 1 für die Message
msg;lParam dd ? ;Zusatzinformation 2 für die Message
msg;time dd ? ;Die Zeit zu der die Message gesendet wurde
msg;pt_x dd ? ;Mauszeigerposition X (POINT-Struktur)
msg;pt_y dd ? ;Mauszeigerposition Y (POINT-Struktur)

;========================================================================== =================
; Code der ausgeführt wird
;-------------------------------------------------------------------------------------------
section ';code' code readable executable

start:
;---------------------------------------------------------------------------------------
; API GetModuleHandle sendet dem Programm sein Handle (der Programminstanz)
; MERKE: eax enthält den Rückgabewert von API-Funktionen nach deren Aufruf
;---------------------------------------------------------------------------------------
push 0 ;lpModuleHandle, 0 = Handle der Programminstanz
call [GetModuleHandle] ;- API Funktion -
mov [wc;hInstance],eax ;eax = Programmhandle

;---------------------------------------------------------------------------------------
; API-Funktion "LoadIconA" läd das MainIcon aus den den Resourcen
;---------------------------------------------------------------------------------------
push IDC_MAINICON ;Icon ID = 17 (definiert in den Resourcen)
push [wc;hInstance] ;Programmhandle
call [LoadIcon] ;- API Funktion -
mov [wc;hIcon],eax ;eax = Handle des gerade geladenen Icons

;---------------------------------------------------------------------------------------
; API "LoadCursorA" läd den Standard-System-Cursor, wenn hInstance
; auf 0 gesetzt wird und lpCursorName auf den Standardwert von 32512.
;---------------------------------------------------------------------------------------
push IDC_ARROW ;lpCursorName, IDC_ARROW ist der Standardwert
push 0 ;hInstance, 0=Standardcursor
call [LoadCursor] ;- API Funktion -
mov [wc;hCursor],eax ;eax = Handle des Cursors

;---------------------------------------------------------------------------------------
; API "GetSystemMetrics" ließt verschiende Informationen des Systems aus.
; Mit dem Parameter "SM_CXSCREEN" die Breite des Bildschirms.
;---------------------------------------------------------------------------------------
push SM_CXSCREEN ;Parameter für die Bildschirmbreite
call [GetSystemMetrics] ;- API Funktion -
sub eax,[WinW] ;Subtrahiere die Breite des Fensters von der Bildschirmbreite

mov edx, 2 ;und teile das Ergebnis durch 2
mov ecx, edx ;TIP: einfache Methode zum halbieren ist - shr eax,1
xor edx, edx ;Inhalt des Registers edx löschen
div ecx ;TIP: einfache Methode zum vierteln ist - shr eax,2

mov [WinX],eax ;Ergebniss = Abstand des Fensters vom linken Bildschirmrand

;---------------------------------------------------------------------------------------
; API "GetSystemMetrics" ließt verschiende Informationen des Systems aus.
; Mit dem Parameter "SM_CXSCREEN" die Breite des Bildschirms.
;---------------------------------------------------------------------------------------
push SM_CYSCREEN ;Parameter für die Bildschirmhöhe
call [GetSystemMetrics] ;- API Funktion -
sub eax,[WinH] ;Subtrahiere die Höhe des Fensters von der Bildschirmhöhe
shr eax,1 ;und teile das Ergeniss durch 2
mov [WinY],eax ;Ergebniss = Abstand des Fensters vom oberen Bildschirmrand

;---------------------------------------------------------------------------------------
; The API function 'RegisterClass' registers a window class
; This API needs a 'WNDCLASS' structure so we fill it with correct values
;---------------------------------------------------------------------------------------
mov [wc;style],0 ;Fenster-Style
mov [wc;lpfnWndProc],WindowProc ;Adresse der lpfnWndProc Funktion
mov [wc;cbCl;tra],0 ;"Class Extra Bytes" um der ClassStructure zusätzliche Bytes aus dem Speicher zuzuweisen
mov [wc;cbWndExtra],0 ;"Wjndow Extra Bytes" um der WindowStructure zusätzliche Bytes aus dem Speicher zuzuweisen
mov [wc;hbrBackground],COLOR_BTNFACE+1 ;Hintergrundfarbe
mov dword[wc;lpszMenuName],0 ;Menü-ID aus den Resourcen
mov dword[wc;lpszClassName],ClassName ;String für die Fensterklasse

;---------------------------------------------------------------------------------------
; Die WNDCLASS ist komplett gefüllt, nun wird die Funktion "RegisterClass" aufgerufen.
;---------------------------------------------------------------------------------------
push wc ;Pointer zur WNDCLASS Struktur
call [RegisterClass] ;- API Funktion -

;---------------------------------------------------------------------------------------
; API "CreateWindowEx" erzeugt ein neues Fenster.
; Der Rückgabewert ist hier das Handle des neuen Fensters.
;---------------------------------------------------------------------------------------
push 0 ;lpParam, Pointer zu Extradaten 0=keine Daten
push [wc;hInstance] ;Programmhandle
push 0 ;hMenu, Handle des Menus
push 0 ;hWndParent, Handle des Elternfensters 0=keins
push [WinH] ;intnHeight, Höhe des neuen Fensters in Pixel
push [WinW] ;intnWidth, Breite des neuen Fensters in Pixel
push [WinY] ;inty, Position des Fensters von oben (relativ zum Elternfensters)
push [WinX] ;intx, Position des Fensters von links (relativ zum Elternfensters)
push WS_SYSMENU+WS_VISIBLE+\ ;dwStyle, 0=kein Sysmenu/Schließen-Buttons
WS_MINIMIZEBOX ;Fortsetzung der darüberliegenden Zeile durch "\"
push Title ;Pointer zum Fenstertitel (Pointer ohne Klammern um den Variablennamen)
push ClassName ;Pointer zum Klassenname des Fensters
push 0 ;dwExStyle, zusätzlicher Fenster-Style 0=keiner
call [CreateWindowEx] ;- API Funktion -
mov [hWnd],eax ;eax = Handle des Fensters

;---------------------------------------------------------------------------------------
; API "CreateWindowEx" erzeugt ein neues Fenster.
; Der Rückgabewert ist hier das Handle des neuen Fensters.
;---------------------------------------------------------------------------------------
push 0 ;lpParam, Pointer zu Extradaten 0=keine Daten
push [wc;hInstance] ;Programmhandle
push 0 ;hMenu, Handle des Menus
push [hWnd] ;hWndParent, Handle des Elternfensters 0=keins
push 17 ;intnHeight, Höhe des neuen Fensters in Pixel
push 121 ;intnWidth, Breite des neuen Fensters in Pixel
push 12 ;inty, Position des Fensters von oben (relativ zum Elternfensters)
push 8 ;intx, Position des Fensters von links (relativ zum Elternfensters)
push WS_CHILD+WS_VISIBLE ;dwStyle, 0=kein Sysmenu/Schließen-Buttons
push 0 ;Pointer zum Fenstertitel (Pointer ohne Klammern um den Variablennamen)
push _scrollbar ;Pointer zum Klassenname des Fensters
push 0 ;dwExStyle, zusätzlicher Fenster-Style 0=keiner
call [CreateWindowEx] ;- API Funktion -
mov [scrollhwnd], eax ;eax = Handle des Fensters (in dem Fall Scrollbar)

;---------------------------------------------------------------------------------------
; API "SetScrollInfo" legt die Eigenschaften einer Scrollbar fest
; Der Rückgabewert ist hier die aktuelle Position des Schiebereglers.
;---------------------------------------------------------------------------------------
mov [scrollinfo;cbSize], \ ;cbSize, Information zu Größe auf die Größe der Struktur SCROLLINFO setzen
sizeof;SCROLLINFO ;Fortsetzung der darüberliegenden Zeile durch "\"
mov [scrollinfo;fMask], SIF_ALL ;fMask, Information welche Variablen geändert werden sollen
mov [scrollinfo;nMin], 1 ;nMin, minimaler Wert der Scrollbar
mov [scrollinfo;nMax], 265 ;nMax, maximaler Wert der Scrollbar + nPage
mov [scrollinfo;nPage], 10 ;nPage, Breite des Schiebereglers in Pixel
mov [scrollinfo;nPos], 255 ;nPos, setze Position des Schiebereglers
mov [scrollinfo;nTrackPos], 0 ;nTrackPos, setzt die Position des Schiebereglers während des Verschiebens,
;SetScrollInfo ignoriert diesen Wert
push TRUE ;fRedraw, Neuzeichnen der Scrollbar nach Aufruf der Funktion
push scrollinfo ;lpsi, Pointer zur SCROLLINFO-Struktur
push SB_CTL ;fnBar, Typ der Scrollbar
push eax ;eax = immernoch Handle des Fensters (in dem Fall Scrollbar)
call [SetScrollInfo] ;- API Funktion -

;---------------------------------------------------------------------------------------
; API "CreateWindowEx" erzeugt ein neues Fenster.
; Der Rückgabewert ist hier das Handle des neuen Fensters.
;---------------------------------------------------------------------------------------
push 0 ;lpParam, Pointer zu Extradaten 0=keine Daten
push [wc;hInstance] ;Programmhandle
push 0 ;hMenu, Handle des Menus
push [hWnd] ;hWndParent, Handle des Elternfensters 0=keins
push 13 ;intnHeight, Höhe des neuen Fensters in Pixel
push 70 ;intnWidth, Breite des neuen Fensters in Pixel
push 64 ;inty, Position des Fensters von oben (relativ zum Elternfensters)
push 8 ;intx, Position des Fensters von links (relativ zum Elternfensters)
push WS_CHILD+WS_VISIBLE ;dwStyle, 0=kein Sysmenu/Schließen-Buttons
push hotkeylabel ;Pointer zum Fenstertitel (Pointer ohne Klammern um den Variablennamen)
push _label ;Pointer zum Klassenname des Fensters
push 0 ;dwExStyle, zusätzlicher Fenster-Style 0=keiner
call [CreateWindowEx] ;- API Funktion -
mov ebx, eax ;eax = Handle des Fensters (in dem Fall static)

;---------------------------------------------------------------------------------------
; API "GetStockObject" ließt vordefinierte Definitionen zu Pinseln, Schritarten
; und Paletten. Rückgabewert ist das Handle des gesuchten Objekts.
;---------------------------------------------------------------------------------------
push DEFAULT_GUI_FONT ;fnObject, ID des gesuchten Objekts
call [GetStockObject] ;- API Funktion -

;---------------------------------------------------------------------------------------
; API "SendMessage" sendet eine Message an ein anderes Fenster, das Zielfenster
; reagiert dabei auf die Message anhand der Message-ID. Rückgabewert abhänig
; von der gesendeten Message.
;---------------------------------------------------------------------------------------
push TRUE ;lParam, bei WM_SETFONT: Neuzeichnen
push eax ;wParam, bei WM_SETFONT: Handle zur Font
push WM_SETFONT ;Msg, Nummer der Message / ID
push ebx ;hwnd, Handle des Fensters, an das die Message gesendet werden soll
call [SendMessage] ;- API Funktion -

;---------------------------------------------------------------------------------------
; API "CreateWindowEx" erzeugt ein neues Fenster.
; Der Rückgabewert ist hier das Handle des neuen Fensters.
;---------------------------------------------------------------------------------------
push 0 ;lpParam, Pointer zu Extradaten 0=keine Daten
push [wc;hInstance] ;Programmhandle
push 0 ;hMenu, Handle des Menus
push [hWnd] ;hWndParent, Handle des Elternfensters 0=keins
push 17 ;intnHeight, Höhe des neuen Fensters in Pixel
push 81 ;intnWidth, Breite des neuen Fensters in Pixel
push 40 ;inty, Position des Fensters von oben (relativ zum Elternfensters)
push 8 ;intx, Position des Fensters von links (relativ zum Elternfensters)
push WS_CHILD+WS_VISIBLE+\ ;dwStyle, 0=kein Sysmenu/Schließen-Buttons
BS_AUTOCHECKBOX ;BS_AUTOCHECKBOX legt fest, dass der Button als CheckBox angezeigt wird
push checkboxtext ;Pointer zum Fenstertitel (Pointer ohne Klammern um den Variablennamen)
push _button ;Pointer zum Klassenname des Fensters
push 0 ;dwExStyle, zusätzlicher Fenster-Style 0=keiner
call [CreateWindowEx] ;- API Funktion -
mov ebx, eax ;eax = Handle des Fensters (in dem Fall Button)

;---------------------------------------------------------------------------------------
; API "GetStockObject" ließt vordefinierte Definitionen zu Pinseln, Schritarten
; und Paletten. Rückgabewert ist das Handle des gesuchten Objekts.
;---------------------------------------------------------------------------------------
push DEFAULT_GUI_FONT ;fnObject, ID des gesuchten Objekts
call [GetStockObject] ;- API Funktion -

;---------------------------------------------------------------------------------------
; API "SendMessage" sendet eine Message an ein anderes Fenster, das Zielfenster
; reagiert dabei auf die Message anhand der Message-ID. Rückgabewert abhänig
; von der gesendeten Message.
;---------------------------------------------------------------------------------------
push TRUE ;lParam, bei WM_SETFONT: Neuzeichnen
push eax ;wParam, bei WM_SETFONT: Handle zur Font
push WM_SETFONT ;Msg, Nummer der Message / ID
push ebx ;hwnd, Handle des Fensters, an das die Message gesendet werden soll
call [SendMessage] ;- API Funktion -

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
Ähnliche Themen zu [C/C++] [Assembler-Tut] WindowStealther
  • [Assembler] LED´s ansteuern
    Mahlzeit! Sollen als Hausaufgabe ein Programm in AVR Studio erstellen, welches 8 LED´s anspricht. Hier mal der Code: ;*************************************************************************** ;* E I N F Ü H R U N G R E C H N E R S T R U K T U R E N ;* ;* Versuch : Zähler ;* D [...]

  • [Assembler] Ampelschaltung
    Hi, ich habe ein relativ großes Problem : Wir sollen für die Schule eine Ampelschaltung machen, dies habe ich bereits geschafft. Nur bekomme ich durch Timer\Warteschleifen nicht die geforderten Zeiten für die Ampelphasen hin. Die Phasen sind: grün 4 sek. rot 6 sek. gelb 1 sek gelb rot 1 sek. D [...]

  • [Assembler] Assembler und c++
    Hallo zusammen ich habe eine aufgabe bekommen, jedoch kann ich diese nicht lösen da ich mich mit c++ programmierung nicht auskenne... vielleicht kann mir ja einer von euch helfen und es mir kurz erklären danke schonmal im vorraus hier die aufgabe: Welchen Aufruf fügt ein C++ Compiler [...]

  • [Assembler] Assembler 80x85 / schleifen
    hey, mein Facharbeitsthema ist schleifen in Assembler-sprache ausdrücken. ich bastel gerade an einer FOR schleife rum.. [ Frage mich ernsthaft ob man da überhaupt mehr als eine schleife schreiben kann... ] ich habe ihm gesagt, dass er immer in zweierschritten zählen soll. - soweit so gut, Doc [...]



raid-rush.ws | Imprint & Contact pr