偶然間發現 好軟體, ShareX 可以抓取畫面, 也可以錄螢幕畫面. 最驚訝的是它還是open source, 可以拿到source code.

記錄過程遇到的問題 (14.1 版直接沒問題, 可以compile and finish)

1. download: 使用shareX Github  選code "Downlad ZIP" 竟會讓chrome 當掉. 

    "https://github.com/ShareX/ShareX.git" 使用 svn 可以download 成功.  共1.84G

2. 開啟 trunk/ShareX.sln    (使用版本Visual studio 2019)

    有一些 .net 版本要修正的問題. 點選, 試試update 後, project 變成active 就有成功.

    # 細節沒有拍下來, 請自行測試 幾個選項, 可能還會update visual studio

3. 選"建置"--> "建置方案"

    應該要有10 個成功才行.

    但一開就遇到compile 的問題:

         在Vault_ooo.cs 中, 將下面的initial 動作, 改為2個input, 這樣做功能沒有修好, 但compile 就可以往前了.            

    //            Rfc2898DeriveBytes rfcDeriver = new Rfc2898DeriveBytes(key, salt, PBKDF2_ITERATIONS, HashAlgorithmName.SHA256);
           // byte str
            Rfc2898DeriveBytes rfcDeriver= new Rfc2898DeriveBytes("asdf",4);

4. 修改到10 個DLL, exe 都產生後就可以使用了,

### good luck

 

A.

接下來想使用Visual studio debug 我有興趣的code. 卻發現我設了斷點無法使用, 斷點有設定成功, 但是不能卻中斷不到?, 因為這是我第一次使用C#, 以為C# 還要做其他設定才能用

這卡我很久,  最後發現是ShareX 會常駐在背景. 我之前有執行 安裝版的SHAREX, 它沒有退出. 所以debug 這套在最前面就check 到有instance 在run , 就直接不啟動了

 

B. inline ASM (__asm)

想加入前幾篇文章提到的inline asm 的做法, 奇怪. compile 不能使用.

C# 及64bit 版本不能使用

 

C. 改成使用DLL. 

    1. 要使用64bit DLL

    2. 要使用stdcall export  , extern "C"

    3.  使用端:

    //        private const string DLL_PATH = @"DllTEST.dll";
        [DllImport(DLL_PATH, CallingConvention= CallingConvention.StdCall)]
        public static extern bool XX(int a, int b);

D. 想拿到C# 的function point 當引數

     C# 是中高階語言, 不提供, 所以只能使用DLL 解決

E.  Inline asm 的替代方案, 

     1. 要使用virtual memory enable write and execute 的功能. 有空實作試試.

以上是使用 source code run shareX 所遇到的問題, 做的記錄!  以上

 

其他功能:

Capture 之後一, 可以直接做 Online OCR. 這也是我一直想找的功能, !!! 注意, OCR 功能是將影像往外傳, OCR 的結果傳回. 如果有機密請小心使用

 

重要進入點: entry

1. Screenshot.cs 

         CaptureRectangleNative()

            可將  NativeMethods.BitBlt() 換掉

2. NativeMethods.cs

         - 在  [DllImport("dwmapi.dll")] 斷落結束之後

        private const string DLL_PATH = @"myDLL"; // DLL NAME
        [DllImport(DLL_PATH, CallingConvention= CallingConvention.StdCall)]
        public static extern bool swap(IntPtr hdc, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, CopyPixelOperation dwRop);

        [DllImport(DLL_PATH)]
        public static extern int fnForXX_YY(); // export function name
 

3. program.cs

    可以加code 在這裡, 直接實驗.

 

# path : 我自己參考用

  C:\Users\xxx\Desktop\ShareX.git\trunk

   D:/sharex14.1

arrow
arrow

    cianfen 發表在 痞客邦 留言(0) 人氣()