修改鼠标形状_按F1进行测试

#SingleInstance Force

F1::
	if(flag := !flag)
		SetSystemCursor2( "IDC_ARROW")
	else
		RestoreCursors()
return



SetSystemCursor(Cursor) {
   ; Cursor has to contain the name of a system cursor (IDC_...)
   ; IDC_ICON and IDC_SIZE are "Obsolete for applications marked version 4.0 or later."
   ; -> http://msdn.microsoft.com/en-us/library/ms648391%28v=vs.85%29.aspx
   ; and not listed in the OCR_... values of the SetSystemCursor function.
   ; -> http://msdn.microsoft.com/en-us/library/ms648395%28v=vs.85%29.aspx
   Static
   Initialized := False
   SystemCursors := "32512IDC_ARROW|32513IDC_IBEAM|32514IDC_WAIT|32515IDC_CROSS|"
                  . "32516IDC_UPARROW|32642IDC_SIZENWSE|"
                  . "32643IDC_SIZENESW|32644IDC_SIZEWE|32645IDC_SIZENS|32646IDC_SIZEALL|"
                  . "32648IDC_NO|32649IDC_HAND|32650IDC_APPSTARTING|32651IDC_HELP"
   If !(Initialized) { ; load system cursors only once
      Loop, Parse, SystemCursors, |
      {
         CID := SubStr(A_LoopField, 1, 5)
         CNA := SubStr(A_LoopField, 6)
         HC%CNA% := DllCall("LoadCursor", "UInt", 0, "Int", CID)
      }
      Initialized := True
   }
   If !(HC%Cursor%) {
      Msgbox, 0, SetSystemCursor, Error: Invalid cursor name %Cursor%
      Return False
   }
   Loop, Parse, SystemCursors, |
   {
      CID := SubStr(A_LoopField, 1, 5)
      HCUR := DllCall("CopyIcon", "UInt" , HC%Cursor%)
      DllCall("SetSystemCursor", "UInt", HCUR, "Int", CID)
   }
   Return True
}




;SetSystemCursor( Cursor = "", cx = 0, cy = 0 )
SetSystemCursor2( Cursor = "", cx := 64, cy := 64 )
{
	BlankCursor := 0, SystemCursor := 0, FileCursor := 0 ; init

	SystemCursors = 32512IDC_ARROW,32513IDC_IBEAM,32514IDC_WAIT,32515IDC_CROSS
	,32516IDC_UPARROW,32640IDC_SIZE,32641IDC_ICON,32642IDC_SIZENWSE
	,32643IDC_SIZENESW,32644IDC_SIZEWE,32645IDC_SIZENS,32646IDC_SIZEALL
	,32648IDC_NO,32649IDC_HAND,32650IDC_APPSTARTING,32651IDC_HELP

	If Cursor = ; empty, so create blank cursor
	{
		VarSetCapacity( AndMask, 32*4, 0xFF ), VarSetCapacity( XorMask, 32*4, 0 )
		BlankCursor = 1 ; flag for later
	}
	Else If SubStr( Cursor,1,4 ) = "IDC_" ; load system cursor
	{
		Loop, Parse, SystemCursors, `,
		{
			CursorName := SubStr( A_Loopfield, 6, 15 ) ; get the cursor name, no trailing space with substr
			CursorID := SubStr( A_Loopfield, 1, 5 ) ; get the cursor id
			SystemCursor = 1
			If ( CursorName = Cursor )
			{
				CursorHandle := DllCall( "LoadCursor", Uint,0, Int,CursorID )
				Break
			}
		}
		If CursorHandle = ; invalid cursor name given
		{
			Msgbox,, SetCursor, Error: Invalid cursor name
			CursorHandle = Error
		}
	}
	Else If FileExist( Cursor )
	{
		SplitPath, Cursor,,, Ext ; auto-detect type
		If Ext = ico
			uType := 0x1
		Else If Ext in cur,ani
			uType := 0x2
		Else ; invalid file ext
		{
			Msgbox,, SetCursor, Error: Invalid file type
			CursorHandle = Error
		}
		FileCursor = 1
	}
	Else
	{
		Msgbox,, SetCursor, Error: Invalid file path or cursor name
		CursorHandle = Error ; raise for later
	}
	If CursorHandle != Error
	{
		Loop, Parse, SystemCursors, `,
		{
			If BlankCursor = 1
			{
				Type = BlankCursor
				%Type%%A_Index% := DllCall( "CreateCursor"
				, Uint,0, Int,0, Int,0, Int,32, Int,32, Uint,&AndMask, Uint,&XorMask )
				CursorHandle := DllCall( "CopyImage", Uint,%Type%%A_Index%, Uint,0x2, Int,0, Int,0, Int,0 )
				DllCall( "SetSystemCursor", Uint,CursorHandle, Int,SubStr( A_Loopfield, 1, 5 ) )
			}
			Else If SystemCursor = 1
			{
				Type = SystemCursor
				CursorHandle := DllCall( "LoadCursor", Uint,0, Int,CursorID )
				%Type%%A_Index% := DllCall( "CopyImage"
				, Uint,CursorHandle, Uint,0x2, Int,cx, Int,cy, Uint,0 )
				CursorHandle := DllCall( "CopyImage", Uint,%Type%%A_Index%, Uint,0x2, Int,0, Int,0, Int,0 )
				DllCall( "SetSystemCursor", Uint,CursorHandle, Int,SubStr( A_Loopfield, 1, 5 ) )
			}
			Else If FileCursor = 1
			{
				Type = FileCursor
				%Type%%A_Index% := DllCall( "LoadImageA"
				, UInt,0, Str,Cursor, UInt,uType, Int,cx, Int,cy, UInt,0x10 )
				DllCall( "SetSystemCursor", Uint,%Type%%A_Index%, Int,SubStr( A_Loopfield, 1, 5 ) )
			}
		}
	}
}


RestoreCursors()
{
	SPI_SETCURSORS := 0x57
	DllCall( "SystemParametersInfo", UInt,SPI_SETCURSORS, UInt,0, UInt,0, UInt,0 )
}


esc::
RestoreCursors()
ExitApp
return

给TA捐赠
共{{data.count}}人
人已捐赠
其他

显示颜色RGB值

2021-12-2 16:16:39

其他

一个简陋的按钮

2021-12-2 16:16:51

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索