史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   生活話題、日常閒聊、喇勒唬爛灌水區 (http://forum.slime.com.tw/f23.html)
-   -   一個簡單到只要隨便"估狗"都可以免費下載的程式 (http://forum.slime.com.tw/thread287559.html)

魔術王子 2017-06-28 08:32 PM

一個簡單到只要隨便"估狗"都可以免費下載的程式
 
我想應該沒有人會這麼閒吧
一個可以從網路隨便下載的免費軟體
甚至功力強一點的,找個試用版的,然後再找啟用碼把它變成完整版
就是這麼簡單,但有人就偏偏喜歡自己寫一個
而到底是怎樣的程式
"螢幕畫面擷取程式",就是把目前螢幕的畫面存程圖片檔
最簡單的方式就是按"PrtScr鍵,然後到小畫家貼上就行了
就是這麼簡單,雖然有一些小小的缺憾,就是沒有游標
但很多免費的小工具,也都具備這樣的功能
其實小王子也有從網路上找到一個叫做HyperSnap的截圖工具
只是小王子只是想要簡單的功能,而HyperSnap功能太過於強大,強大到小王子有股衝動想要設計一個類似的操作介面,但就只有截圖功能的程式

會程式設計的人都會有這種毛病嗎?還是說程式設計只是用在工作上
想當初DOS時代,會學BASIC的人,大部分都是把程式設計當玩具玩的,至少小王子是這樣

自從上次Basic設計完後,小王子最近又閒到想設計一個"螢幕畫面擷取"的小工具
而會想設計是因為上次再寫工作操作說明手冊時,為了截取螢幕操作畫面,所以用的HyperSnap
結果覺得這軟體非常好用,但有很多操作的動作,讓小王子覺得礙手礙腳的,而想要自己設計一個...

mini 2017-06-28 09:08 PM

以前在WinXP+VB6 時有接觸過螢幕截圖
找了一下還蠻單純的

使用三個 WinAPI
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long

程式碼:
PHP 語法:

Private Sub mCopyScreen_Click()

    
Dim hDC As Longsx As Integersy As Integer
    
    Me
.Hide
    DoEvents    
' 若不執行此一敘述,可讓 Me.Hide 不會即時被執行
    
    picCopy.Width = Screen.Width
    picCopy.Height = Screen.Height
    
    picCopy.AutoRedraw = True
    
    ' 
圖像的轉移
    hDC 
GetDC(0)                              ' 取得螢幕DC
    sx = Screen.Width \ Screen.TwipsPerPixelX   ' 
螢幕寬度(以Pixel為單位)
    
sy Screen.Height Screen.TwipsPerPixelY  ' 螢幕高度(以Pixel為單位)
    ' 
將螢幕DC的圖像轉移到名稱為picCopy的PictureBox中
    BitBlt picCopy
.hDC00sxsyhDC00vbSrcCopy
    ReleaseDC 0
hDC                            ' 釋放螢幕DC
    
    picCopy.AutoRedraw = False
    
    SetPicture      ' 
設定 PictureBox 與捲動軸之間的關係
    Me
.Show

End Sub 

(試了一下在Windows 10依舊可執行)

只要看得懂要翻譯成C/C++應該很簡單

HyperSnap 除了截圖
就是喜好他的畫箭頭與文字框
拿來製作簡單的說明用圖解很好用
不過覺得要用向量製圖還是首推
Corel Draw 或 Adobe Illustrator
只是屬於大型套裝軟體開啟速度不如HyperSnap
所以目前還是偏好HyperSnap

魔術王子 2017-06-28 09:20 PM

有這麼好用的語法喔:on_16::on_16::on_16:
這是用vb 2008完全不用引用API
PHP 語法:

        Me.Hide()
        
Dim dt As Double My.Computer.Clock.TickCount
        
While My.Computer.Clock.TickCount dt 1000
            My
.Application.DoEvents()
        
End While
        
Dim g As Graphics
        Dim bmp 
As Bitmap
        bmp 
= New Bitmap(My.Computer.Screen.Bounds.WidthMy.Computer.Screen.Bounds.Height)
        
Graphics.FromImage(bmp)
        
g.CopyFromScreen(New Point(00), New Point(00), New Size(My.Computer.Screen.Bounds.WidthMy.Computer.Screen.Bounds.Height))
        
g.Dispose()
        
'Dim i As Integer = 1
        '
While (My.Computer.FileSystem.FileExists(My.Computer.FileSystem.SpecialDirectories.Desktop "\ToyAide" ".jpg"))
        
' i += 1
        ' 
End While
        
' bmp.Save(My.Computer.FileSystem.SpecialDirectories.Desktop & "\ToyAide" & i & ".jpg")
        '
PictureBox1.Image bmp
        Me
.Show()
        
PictureBox1.Image bmp 

當然這是從網路上找到的,另外.NET還有圖片翻轉功能
PHP 語法:

        If PictureBox1.Image IsNot Nothing Then
            Dim Img 
As Image PictureBox1.Image
            Img
.RotateFlip(RotateFlipType.Rotate270FlipNone)
            
PictureBox1.Image Img
            Img 
Nothing
            ImageSize
()
        
End If 

再附加尺寸縮小語法
PHP 語法:

        ' If My.Computer.Clipboard.ContainsImage Then
        ' 
Get the scale factor.
        
Dim scale_factor As Single 0.5 'Single.Parse(txtScale.Text)

        ' 
Get the source bitmap.
        
Dim bm_source As New Bitmap(PictureBox1.Image)

        
' Make a bitmap for the result.
        Dim bm_dest As New Bitmap(CInt(bm_source.Width * scale_factor), CInt(bm_source.Height * scale_factor))

        ' 
Make a Graphics object for the result Bitmap.
        
Dim gr_dest As Graphics Graphics.FromImage(bm_dest)

        
' Copy the source image into the destination bitmap.
        gr_dest.DrawImage(bm_source, 0, 0, bm_dest.Width + 1, bm_dest.Height + 1)

        ' 
Display the result.
        
' My.Computer.Clipboard.SetImage(bm_dest)
        ' 
PictureBox1.Image My.Computer.Clipboard.GetImage
        
'PictureBox1.Image = bm_dest
        '  
End If
        
PictureBox1.Image bm_dest
        ImageSize
() 


魔術王子 2017-06-28 09:22 PM

這是BCB用API的程式碼而且還利用GetCursorInfo()取得游標資訊,加入游標,這部分在.NET還找不到程式碼
PHP 語法:

    ShowWindow(Application->Handle,SW_HIDE);
    
ShowWindow(Handle,SW_HIDE);
  
//  Application->ProcessMessages();
    
DWORD bt;
    
bt=GetTickCount();
    do {
      
Application->ProcessMessages();
    } while (
GetTickCount()-bt<(Edit2->Text.ToInt()*1000));
    
HDC ScrDC;
    
TRect R;
    
HWND Wnd=GetDesktopWindow();
    
ScrDC=GetWindowDC(Wnd);
    
GetWindowRect(Wnd, &R);
    
ImageBmp->Width R.right;
    
ImageBmp->Height R.bottom;
    
BitBlt(ImageBmp->Canvas->Handle00R.rightR.bottomScrDC00SRCCOPY);
    if(
CheckBox1->Checked){
      
CURSORINFO ci;
      
ci.cbSize=sizeof(CURSORINFO);
      
GetCursorInfo(&ci);
      
POINT pt;
      
GetCursorPos(&pt);
      
DrawIcon(ImageBmp->Canvas->Handlept.xpt.yci.hCursor);
    }
    
ReleaseDC(WndScrDC);
    
float sf=(float)ImageBmp->Width/(float)ScrollBox1->ClientRect.right;
    
Image1->Width=ImageBmp->Width/sf;
    
Image1->Height=ImageBmp->Height/sf;
    
Image1->Picture->Assign(ImageBmp);
    
Image1->Refresh();
    
ShowWindow(Application->Handle,SW_NORMAL);
    
ShowWindow(Handle,SW_NORMAL); 


mini 2017-06-28 11:09 PM

抓游標?
取得游標的座標後
再把 游標的圖 事後合成上去就可以了
(應該是這樣...?)

getter 2017-06-29 01:31 AM

迪西都用 FSCapture 免費版的說 ...,該有的功能都有 ...

DOS 時代則是用遊戲修改工具內附的抓圖工具 ...

魔術王子 2017-06-29 06:38 AM

引用:

作者: mini (文章 2369818)
抓游標?
取得游標的座標後
再把 游標的圖 事後合成上去就可以了
(應該是這樣...?)

我這兩天使用HyperSnap後發現,HyperSanap一啟動會先將剪貼簿清除
然後監視剪貼簿,只要有人按下PrtScr鍵,程式就會將資料取出,加入游標,顯示出來
或將自己隱藏,重新擷取畫面,加入游標
因為程式是"執行中",所以不需要將資料再存回剪貼簿

ppp0600 2017-06-29 11:10 AM

想請問可有簡單的網頁版通訊錄管理

不飛 2017-06-29 11:49 AM

引用:

作者: ppp0600 (文章 2369822)
想請問可有簡單的網頁版通訊錄管理

Gmail 通訊錄就口已的啦.....

安卓手機 換機換號 不用煩惱,直接從 Gmail 通訊錄下載聯絡人即可。

superxboy 2017-06-29 01:40 PM

我都用PicPick來截圖...可以設定截取游標

getter 2017-06-29 02:50 PM

引用:

作者: superxboy (文章 2369824)
我都用PicPick來截圖...可以設定截取游標

很多都可以吧 ... 迪西用的那套也可以,只不過迪西設定是取消的

好幾種相比,FastStone Capture 免費版的程式容量不大 ...

像是股溝軟體的還有結合「雲端」... 抓玩直接上傳 ... 而外附帶相片管理

另外有幾家的是,抓成動畫檔兼錄音加字幕 ... 格式有 AVI 或是 SWF 或是 GIF 格式

... 哪種好用 ... 能達到目的解決問題的就是好用 ...

mini 2017-06-29 03:34 PM

如果將BitBlt 改成 StretchBlt
就可以翻轉 與 縮放

Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

以下是將WinAPI與.NET的畫布概念之混和修改

PHP 語法:

   Private Declare Function GetDC Lib "user32" (ByVal hWnd As Integer) As Integer
   
Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As IntegerByVal hDC As Integer) As Integer
   
Private Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc As IntegerByVal x As IntegerByVal y As IntegerByVal nWidth As IntegerByVal nHeight As IntegerByVal hSrcDC As IntegerByVal xSrc As IntegerByVal ySrc As IntegerByVal nSrcWidth As IntegerByVal nSrcHeight As IntegerByVal dwRop As Integer) As Integer

Private Enum TernaryRasterOperations As UInteger
        
''' <summary>dest = source</summary>
        SRCCOPY = &HCC0020
        ''' 
<summary>dest source OR dest</summary>
        
SRCPAINT = &HEE0086
        
''' <summary>dest = source AND dest</summary>
        SRCAND = &H8800C6
        ''' 
<summary>dest source XOR dest</summary>
        
SRCINVERT = &H660046
        
''' <summary>dest = source AND (NOT dest)</summary>
        SRCERASE = &H440328
        ''' 
<summary>dest = (NOT source)</summary>
        
NOTSRCCOPY = &H330008
        
''' <summary>dest = (NOT src) AND (NOT dest)</summary>
        NOTSRCERASE = &H1100A6
        ''' 
<summary>dest = (source AND pattern)</summary>
        
MERGECOPY = &HC000CA
        
''' <summary>dest = (NOT source) OR dest</summary>
        MERGEPAINT = &HBB0226
        ''' 
<summary>dest pattern</summary>
        
PATCOPY = &HF00021
        
''' <summary>dest = DPSnoo</summary>
        PATPAINT = &HFB0A09
        ''' 
<summary>dest pattern XOR dest</summary>
        
PATINVERT = &H5A0049
        
''' <summary>dest = (NOT dest)</summary>
        DSTINVERT = &H550009
        ''' 
<summary>dest BLACK</summary>
        
BLACKNESS = &H42
        
''' <summary>dest = WHITE</summary>
        WHITENESS = &HFF0062
    End Enum

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim hDC As Integer, sx As Integer, sy As Integer

        Me.Hide()

        PictureBox1.Width = My.Computer.Screen.WorkingArea.Width
        PictureBox1.Height = My.Computer.Screen.WorkingArea.Height

        hDC = GetDC(0) ' 
取得螢幕DC
        sx 
PictureBox1.Width
        sy 
PictureBox1.Height

        Dim g 
As Graphics PictureBox1.CreateGraphics
        Dim bmp 
As Bitmap = New Bitmap(My.Computer.Screen.Bounds.WidthMy.Computer.Screen.Bounds.Height'記憶體圖空間
        g = Graphics.FromImage(bmp) '
畫布

        
' 將螢幕DC的圖像轉移到PictureBox1
        StretchBlt(g.GetHdc, 0, 0, sx, sy, hDC, 0, 0, sx, sy, TernaryRasterOperations.SRCCOPY) '
PictureBox1.CreateGraphics.GetHdc
        PictureBox1
.Image bmp
        PictureBox1
.Update() '不更新就不會顯示出來
        '
釋放資源
        ReleaseDC
(0hDC)
        
g.ReleaseHdc()

        
Me.Show()

    
End Sub 


ppp0600 2017-06-29 04:04 PM

引用:

作者: 不飛 (文章 2369823)
Gmail 通訊錄就口已的啦.....

安卓手機 換機換號 不用煩惱,直接從 Gmail 通訊錄下載聯絡人即可。

其實我是想弄個網頁版給一個社群的人使用,只是不會寫程式,也想不到辦法:on_14:

魔術王子 2017-06-29 08:01 PM

引用:

作者: ppp0600 (文章 2369822)
想請問可有簡單的網頁版通訊錄管理

為了脫離電腦領域,只要跟網頁有關的程式設計小弟一概不碰:on_52::on_52::on_52:

getter 2017-06-29 09:13 PM

引用:

作者: 魔術王子 (文章 2369831)
為了脫離電腦領域,只要跟網頁有關的程式設計小弟一概不碰:on_52::on_52::on_52:

為了脫離電腦領域,迪西一律說「我只會玩,不會修。要修電腦請找電腦公司。」 :on_52::on_52::on_52:


所有時間均為台北時間。現在的時間是 11:13 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1