選択して何をしたいのかを書くと答えてくれる人が増えると思いますよ。
ちなみにこんな方法もあります。かなり前に作ったやつをつぎはぎしただけなので無駄に長いと思いますが。
#uselib "gdi32.dll"
#cfunc CreateDC "CreateDCA" sptr,sptr,sptr,int
#func DeleteDC "DeleteDC" int
#func BitBlt "BitBlt" int,int,int,int,int,int,int,int,int
#define NULL 0
#define SRCCOPY 0x00CC0020
#define CAPTUREBLT 0x40000000
; ウィンドウ非表示
screen 0, 150, 50 : gsel 0, -1
wait 50
; デスクトップ画面のサイズでバッファ画面を作成
sx = ginfo_dispx : sy = ginfo_dispy
buffer 2, sx, sy
; デスクトップ画面のデバイスコンテキスト取得
hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL)
; デスクトップ画面の画像をコピー
BitBlt hdc, 0, 0, sx, sy, hdcScreen, 0, 0, SRCCOPY | CAPTUREBLT
; デバイスコンテキスト削除
DeleteDC hdcScreen
bgscr 0, sx, sy,0,0,0
color 10,10,10:boxf
gmode 3,sx,sy,150:pos 0,0:gcopy 2,0,0,sx,sy
repeat
mx=mousex
my=mousey
getkey esc,27:if esc=1:end
getkey 左クリック,1
getkey Enter,13
redraw 0
if 左クリックbac=0&左クリック=1:開始x=mx:開始y=my
if 左クリック=1&開始x<mx&開始y<my:{//左上から右下
boxf
gmode 3,sx,sy,150:pos 0,0:gcopy 2,0,0,sx,sy
gmode 3,sx,sy,255:pos 開始x,開始y:gcopy 2,開始x,開始y,mx-開始x,my-開始y
範囲選択フラグ=1
範囲左上x=開始x
範囲左上y=開始y
範囲右下x=mx-開始x
範囲右下y=my-開始y
範囲選択フラグ=1
}
if 左クリック=1&開始x<mx&開始y>my:{//左下から右上
boxf
gmode 3,sx,sy,150:pos 0,0:gcopy 2,0,0,sx,sy
gmode 3,sx,sy,255:pos 開始x,my:gcopy 2,開始x,開始y+(my-開始y),mx-開始x,開始y-my
範囲選択フラグ=1
範囲左上x=開始x
範囲左上y=開始y+(my-開始y)
範囲右下x=mx-開始x
範囲右下y=開始y-my
範囲選択フラグ=1
}
if 左クリック=1&開始x>mx&開始y<my:{//右上から左下
boxf
gmode 3,sx,sy,150:pos 0,0:gcopy 2,0,0,sx,sy
gmode 3,sx,sy,255:pos mx,開始y:gcopy 2,開始x+(mx-開始x),開始y,開始x-mx,my-開始y
範囲選択フラグ=1
範囲左上x=開始x+(mx-開始x)
範囲左上y=開始y
範囲右下x=開始x-mx
範囲右下y=my-開始y
範囲選択フラグ=1
}
if 左クリック=1&開始x>mx&開始y>my:{//右下から左上
boxf
gmode 3,sx,sy,150:pos 0,0:gcopy 2,0,0,sx,sy
gmode 3,sx,sy,255:pos mx,my:gcopy 2,mx,my,開始x-mx,開始y-my
範囲選択フラグ=1
範囲左上x=mx
範囲左上y=my
範囲右下x=開始x-mx
範囲右下y=開始y-my
範囲選択フラグ=1
}
if 範囲選択フラグbac=0&範囲選択フラグ=1:mouse -1
if Enter=1&範囲選択フラグ=1&アップタイミング=0:break
if 範囲選択フラグ=1&アップタイミング=1&左クリック=0&左クリックbac=1:break
if 範囲選択フラグ=1&左クリック=0&左クリックbac=1:mouse
if 左クリックbac=0&左クリック=1:範囲選択フラグ=0
redraw 1
左クリックbac=左クリック
範囲選択フラグbac=範囲選択フラグ
await
loop