Что нового

Внедрение в скомпилированный скрипт подвижного указателя

Автор
MnM

MnM

Post-Hardcore
Сообщения
679
Репутация
90
ну у меня стоит WinXP, наверное подобное не предусмотрено :(
 

sims

Осваивающий
Сообщения
184
Репутация
24
Короче, из ресурсов можно грузить функцией LoadCursor, анимированный курсор.
 
Автор
MnM

MnM

Post-Hardcore
Сообщения
679
Репутация
90
sims
Можно пожалуйста исходный код в формате .au3 ?
 

sims

Осваивающий
Сообщения
184
Репутация
24
Исходник не на AutoIt. Кто его знает как в него курсор поместить.

Я же это сделал с помощью rc файла, такого содержимого.
200 ANICURSOR E:\test_cursor\Cursor.ani
И IDE внедрила курсор в exe при компиляции.
 
Автор
MnM

MnM

Post-Hardcore
Сообщения
679
Репутация
90
sims
Ну вообще-то я предполагал средствами AutoIt это сделать, а не другими языками программирования.
 

sims

Осваивающий
Сообщения
184
Репутация
24
Ну вот и запихните средствами AutoIt анимированый курсор в ресурсы. В нормальных IDE есть такие средсва (поддерживаются как rc, так res файлы).
Если AutoIt не имеет средств для внердения анимированого курсора, то что вы от меня хотите?
 

asdf8

Скриптер
Сообщения
564
Репутация
152
Вот пример использования анимированного курсора из ресурсов
(естественно запускать скомпилированным):

Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Run_After=del "%scriptfile%_Obfuscated.au3"
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/striponly
#AutoIt3Wrapper_Res_File_Add=horse.ani, RT_ANICURSOR, horse
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include-once
#Include <GUIConstantsEx.au3>
#Include <WinAPIEx.au3>
$hCursor = _WinAPI_LoadCursor (_WinAPI_GetModuleHandle(0), 'horse')

If Not $hCursor Then
	Exit
EndIf

$Form = GUICreate("Test", 295, 212, -1, -1)
$Label1 = GUICtrlCreateLabel("", 32, 36, 224, 133)
GUICtrlSetBkColor(-1, 0x008080)
GUISetState(@SW_SHOW)

_WinAPI_SetClassLongEx(GUICtrlGetHandle($Label1), -12, $hCursor);$GCL_HCURSOR

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Подправил скрипт отсюда. Добавил функцию _LoadCursorW упрощённый вариант из Resource.au3

Код:
#AutoIt3Wrapper_Res_File_Add=dinosaur.ani,RT_ANICURSOR,dinocur,0
#AutoIt3Wrapper_Compression=n
#AutoIt3Wrapper_UseUpx=n
#include <WinAPI.au3>
#include <GUIConstantsEx.au3>
Global Const $OCR_NORMAL = 32512
Global Const $OCR_IBEAM = 32513
Global Const $OCR_WAIT = 32514

;XXXXXXXXXXXXXXX
$hDefaultCursorLoad = _LoadCursor($OCR_NORMAL)

$hDefaultCursor = _CopyCursor($hDefaultCursorLoad)
If @error Then
    Exit ConsoleWrite("! Error copying cursor" & @CRLF)
EndIf
;XXXXXXXXXXXXXXX

$GUI = GUICreate("Test")
GUISetState()
Local $hWaitCur

; $curPath = @WindowsDir & "\Cursors\sizenesw.ani"
; $newCur = _LoadCursorFromFile($curPath)
$newCur = _LoadCursorW('dinocur')
_SetSystemCursor($newCur, $OCR_NORMAL)

While 1
    If GUIGetMsg() = -3 Then ExitLoop
    Sleep(10)
WEnd

_SetSystemCursor($hDefaultCursor, $OCR_NORMAL)
$hPrevCur = 0
$hWaitCur = 0

Func _LoadCursorFromFile($iCursor)
    Return SetError(@error, @extended, _API(DllCall("user32.dll", "int", "LoadCursorFromFile", "str", $iCursor)))
EndFunc  ;==>_LoadCursorFromFile

Func _LoadCursor($iCursor)
    Return SetError(@error, @extended, _API(DllCall("user32.dll", "int", "LoadCursorA", "hwnd", 0, "int", $iCursor)))
EndFunc  ;==>_LoadCursor

Func _SetSystemCursor($hCursor, $iCursor)
    Return SetError(@error, @extended, _API(DllCall("user32.dll", "int", "SetSystemCursor", "int", $hCursor, "int", $iCursor)))
EndFunc  ;==>_SetSystemCursor

Func _CopyCursor_($iCursor); <--- check your user32.dll for CopyCursor function. Is it there?
    Return SetError(@error, @extended, _API(DllCall("user32.dll", "int", "CopyCursor", "hwnd", $iCursor)))
EndFunc  ;==>_CopyCursor_

Func _DestroyCursor($iCursor)
    Return SetError(@error, @extended, _API(DllCall("user32.dll", "int", "DestroyCursor", "hwnd", $iCursor)))
EndFunc  ;==>_DestroyCursor

Func _API($v_ret)
    Local $err = @error
    Local $ext = @extended
    If Not $err Then
        If IsArray($v_ret) Then
            Return $v_ret[0]
        Else
            Return $v_ret
        EndIf
    EndIf
    Return SetError($err, $ext, 0)
EndFunc  ;==>_API


Func _CopyCursor($hCursor)

    Local $aCall = DllCall("user32.dll", "hwnd", "CopyImage", _
            "hwnd", $hCursor, _
            "dword", 2, _; IMAGE_CURSOR
            "int", 0, _; same width as the original
            "int", 0, _; same height as the original
            "dword", 16384); LR_COPYFROMRESOURCE

    If @error Or Not $aCall[0] Then
        Return SetError(1, 0, 0)
    EndIf

    Return SetError(0, 0, $aCall[0])

EndFunc  ;==>_CopyCursor

Func _LoadCursorW($sCursorName)

	Local $DataType = "WSTR"
	Local $HModule = _WinAPI_GetModuleHandle(0)
	$sCursorName = StringUpper($sCursorName)

	$HCURSOR = DllCall("User32.dll", "PTR", "LoadCursorW", "PTR", $HModule, $DataType, $sCursorName)
	If @error Or $HCURSOR[0] = 0 Then
		Return SetError(2, 0, 0)
	EndIf

	Return SetError(0, 0, $HCURSOR[0])

EndFunc   ;==>_LoadCursor
 
Верх