mirror of
				https://github.com/yv1ing/ShotRDP.git
				synced 2025-09-16 15:10:57 +08:00 
			
		
		
		
	基本适应win7,win10,win server 08,win server 12,win server 16的截图
This commit is contained in:
		
							
								
								
									
										91
									
								
								grdp/win/win_windows.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								grdp/win/win_windows.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,91 @@ | ||||
| package win | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"math" | ||||
| 	"syscall" | ||||
| ) | ||||
|  | ||||
| func doLoadLibrary(name string) uintptr { | ||||
| 	lib, _ := syscall.LoadLibrary(name) | ||||
| 	return uintptr(lib) | ||||
| } | ||||
|  | ||||
| func doGetProcAddress(lib uintptr, name string) uintptr { | ||||
| 	addr, _ := syscall.GetProcAddress(syscall.Handle(lib), name) | ||||
| 	return uintptr(addr) | ||||
| } | ||||
|  | ||||
| func syscall3(trap, nargs, a1, a2, a3 uintptr) uintptr { | ||||
| 	ret, _, _ := syscall.Syscall(trap, nargs, a1, a2, a3) | ||||
| 	return ret | ||||
| } | ||||
|  | ||||
| func syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) uintptr { | ||||
| 	ret, _, _ := syscall.Syscall6(trap, nargs, a1, a2, a3, a4, a5, a6) | ||||
| 	return ret | ||||
| } | ||||
|  | ||||
| func syscall9(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) uintptr { | ||||
| 	ret, _, _ := syscall.Syscall9(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9) | ||||
| 	return ret | ||||
| } | ||||
|  | ||||
| func syscall12(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12 uintptr) uintptr { | ||||
| 	ret, _, _ := syscall.Syscall12(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) | ||||
| 	return ret | ||||
| } | ||||
|  | ||||
| func syscall15(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 uintptr) uintptr { | ||||
| 	ret, _, _ := syscall.Syscall15(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) | ||||
| 	return ret | ||||
| } | ||||
|  | ||||
| func syscallN(trap uintptr, args []uintptr) uintptr { | ||||
| 	n := len(args) | ||||
| 	num := int(math.Max(1.0, math.Ceil(float64(n)/3.0))) * 3 | ||||
| 	for i := n; i < num; i++ { | ||||
| 		args = append(args, 0) | ||||
| 	} | ||||
| 	if num == 3 { | ||||
| 		ret, _, _ := syscall.Syscall(trap, uintptr(n), | ||||
| 			args[0], args[1], args[2]) | ||||
| 		return ret | ||||
| 	} else if num == 6 { | ||||
| 		ret, _, _ := syscall.Syscall6(trap, uintptr(n), | ||||
| 			args[0], args[1], args[2], | ||||
| 			args[3], args[4], args[5]) | ||||
| 		return ret | ||||
| 	} else if num == 9 { | ||||
| 		ret, _, _ := syscall.Syscall9(trap, uintptr(n), | ||||
| 			args[0], args[1], args[2], | ||||
| 			args[3], args[4], args[5], | ||||
| 			args[6], args[7], args[8]) | ||||
| 		return ret | ||||
| 	} else if num == 12 { | ||||
| 		ret, _, _ := syscall.Syscall12(trap, uintptr(n), | ||||
| 			args[0], args[1], args[2], | ||||
| 			args[3], args[4], args[5], | ||||
| 			args[6], args[7], args[8], | ||||
| 			args[9], args[10], args[11]) | ||||
| 		return ret | ||||
| 	} else if num == 15 { | ||||
| 		ret, _, _ := syscall.Syscall15(trap, uintptr(n), | ||||
| 			args[0], args[1], args[2], | ||||
| 			args[3], args[4], args[5], | ||||
| 			args[6], args[7], args[8], | ||||
| 			args[9], args[10], args[11], | ||||
| 			args[12], args[13], args[14]) | ||||
| 		return ret | ||||
| 	} else { | ||||
| 		panic(fmt.Errorf("Too many syscall arguments: %d", n)) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func getUintptrFromBool(b bool) uintptr { | ||||
| 	if b { | ||||
| 		return 1 | ||||
| 	} else { | ||||
| 		return 0 | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user