2018年2月28日 星期三

Win10 進入桌面之後變成灰階色彩,登入畫面是彩色

Win10 進入桌面之後變成灰階色彩,登入畫面是彩色

不知道按到什麼之後整個桌面變成灰階的,但是登入畫面是正常的彩色的。
按到快捷鍵了 CTRL+Win+C 這個可以轉成灰色,不知道為什麼做這麼近,複製的時候很容易誤按。
設置在這裡,色彩濾鏡。Win10 內建的,目前新版本的Win10 預設已經是不啟用快捷鍵狀態了,不會不小心按到了。

2018年2月27日 星期二

Win10 封裝內容 20180227

Win10 封裝內容

聲明:此映像檔僅個人使用,絕不以任何形式公開在網路上
  • 預設帳戶密碼為 1234
  • 內裝軟體皆為免費軟體或試用版
  • Windows為未啟用狀態請盡快輸入正版授權
  • “系統封裝內容 byCHG” 該檔案總共放三處,C:\使用者資料夾桌面
封裝版本號是微軟官方下載的1709
全新安裝後僅做以下變動

軟體

  • AcroRdrDC_zh_TW
  • BlueskyFRC_Setup
  • ccsetup
  • ChromeStandaloneSetup64
  • Evernote
  • JavaSetup
  • JPEGView64
  • K-Lite_Codec_Pack_Mega
  • TeamViewer_Setup
  • WinRAR_5.30
  • WRC9Setup
  • Line
  • Skype
  • GitSetup
  • AS SSD Benchmark
  • DiskInfo
  • python
  • git

系統

  • DirectX_9.0c
  • DotNetFramework_2.0-4.6
  • VisualCppRedistributablePackage

系統設置

  • 去除捷徑字樣
  • 工作列按鈕不要合併完成
  • 顯示副檔名
  • 顯示隱藏的系統檔
  • 設置IE首頁為Google
  • 打密碼時亮燈
  • 桌面圖示開啟
  • Win10_NumLock
  • Disable Windows Defender
  • UAC Recovery
  • 輸入法設置預設為英文模文
  • 輸入法設置為不同視窗使用不同輸入法
  • 登入時還原先前視窗
  • 隱藏rar右鍵清單中的壓縮並發送郵件

系統設置 v2

  • 記事本字體修改微軟正黑體
  • 軟件預設開啟程序
  • 視窗內容格子大小優化(日期本來有一小段看不見)

字體

  • Hack
  • Google 思源體

2018年2月26日 星期一

論文 pdf 複製的時候換行都亂跳 重建換行 自動修正 程序

論文 pdf 複製的時候換行都亂跳 重建換行 自動修正 程序

從 IEEE 上下載的論文通常大多數複製的時候會是原貌,不會是原本的一行比說下面這一行文字。
this is a apple.
在論文中可能變成這樣
this is 
a apple.
然後複製就是這樣,就不會是原本的整行,自己寫了一個程序可以整理換行,預設值是150個單字後遇到句號換下一行,這樣需要複製到google翻譯的時候會比較準確。
執行後會自動修改剪貼簿的內容,使用方法大概如下
複製論文一大段文字->執行程式->貼上google翻譯或其他
在執行程式這一塊可以加快捷鍵,釘選到工作列
然後使用 Win+1 就可以執行了 (這裡的1是必須是打字區的1)

2018年2月25日 星期日

MSR 分區 有什麼作用是否應該保留

MSR 分區 有什麼作用是否應該保留

實用的角度來看:

簡單來說一般用途的話,切爽的沒有什麼用XD
有些人是會覺得有分區礙眼還特地改回MBR的
不過就算真的要用上也是可以無損資料調整分割

下面來說說我的觀點:

即使如此,我個人覺得是資料碟也要切割保留,可以作為快速識別GPT硬碟或是MBR硬碟的標記。
再來就是做為EFI分區的保留了,如果突然有需求,要讓這顆硬碟開機直接把MSR刪掉改成EFI分區就可以了。

2018年2月23日 星期五

Windows10 如何建立休眠磁區 一直顯錯誤的方法

Windows10 如何建立休眠磁區 一直顯錯誤的方法

英特爾自己的休眠技術 IRST 區要切割一個休眠磁區給他用指令如下
先按 Win+X 然後 選擇 G 進入磁碟管理,然後對著C曹按右鍵壓縮,壓縮的容量就看你的記憶體多大就壓縮多大在+8 (有時候切的位置正好不是很合適會導致-1)
然後打開 CMD 輸入下面指令
# 查看分區(找剛剛那個是多少)
list vol
# 選擇分區
sel vol 2
# 再看一次選中的曹左邊有 * (不要選錯了)
list vol
# 修改 id
set id=84
不過有可能會出現
指定類型的格式錯誤。
如需命令的詳細資訊,請輸入: HELP SET
會這樣是因為硬碟格是GPT的關係,換一個ID
set id=D3BFE2DE-3DAF-11DF-BA40-E3A556D89593
這樣就可以設置了,安裝完IRST驅動重新開機應該就會變成休眠磁區了
注意IRST的版本新版的不支持舊晶片,例如我的是 B75 只能安裝 12版的
驅動下載位置:https://goo.gl/PCaGkq
最底下滾下去左邊可以選版本,不能裝就每個版本都試試看

設置的時候選錯曹導致D曹消失不見

把它設置回來 set id=01 就好了~資料都會在的不要擔心。
改回來之後還要回剛剛的磁碟管理建立磁碟代號,才可以看見。
還是看不見,去載 DiskGenius 很詳細的硬碟軟體可以改回來或救援。

參考

2018年2月21日 星期三

chrome 在 XP 上出現不在支援更新,如何關閉提示

chrome 在 XP 上出現不在支援更新,如何關閉提示

可以在捷徑的內容裡面補上 -disable-infobars 就可以關閉提醒了,不過相對也可能關閉一些提示。

[Win10/11] 修復 Windows RE分區 重新啟用

修復 Windows RE分區

Windows RE 主要是修復用的第二系統,也可以用來自己重灌自己,就是不用光碟或USB就可以重灌了。簡單說就是下圖這個畫面,如果沒啟用只會剩下兩個選項大多數功能都無法使用。

微軟大更新的時候會用到。更新完都會出現一個768M左右的修復分區,用來暫存一些更新的資料還有RE系統本身。

先查看一下當前狀態是怎麼樣
reagentc /info


某些情況只是當純當掉重新啟用即可(連續執行2次)
reagentc /enable
reagentc /enable


如果還是沒辦法啟動再試著關閉後重啟
reagentc /disable
reagentc /setreimage /path C:\windows\system32\recovery
reagentc /enable
reagentc /info


如果出現在指定的路徑中找不到有效的映像,是缺了 WinRE.wim 這份檔案的關係,這個在 Win10 的原始檔 install.wim 裡面有
這份檔案在RE啟用之後就會消失,如果要從其他電腦複製,要先執行關閉的指令才會出現在指令的那個位置中。

進入過RE修復系統 Win10 會自動把 WinRE.wim 移動到修復分區內。關閉之後才會把檔案收回重新壓成 WinRE.wim 檔案。因此直接砍掉RE分區會導致 WinRE.wim 檔案遺失無法進入修復系統。

跑更新的時候會用到修復系統,也因此通常剛安裝完畢的時候還沒修復分區,但過一段時間之後會自己切出修復分區。

關於 WinRE.wim 檔案這邊上傳一份備份有需要可以自取
SHA-256:  d3916931641b7b6f2b2364f95b026bb33f90ec1020750141e1a2c9a659764f98



其他對於修復分區的刪除與新增請看這兩篇

2018年2月20日 星期二

Acer Aspire M1641 如何開啟 AHCI 模式

Acer Aspire M1641 如何開啟 AHCI 模式

測試了一下再BIOS找了又找就是沒找到,唯一找到的相關的就是可以調整成 SATA模式與RAID模式,正常還要有個AHCI才是,到官方看VISTA驅動也有AHCI的驅動,怎麼會這樣。
大致知道意思了他把AHCI模式跟RAID整合再一起,雖然調成RAID模式,但是還有一個附加選項要開啟那些SATA曹為啟用。
所以只要開啟RAID模式然後把全部的曹為都設置成關閉就是AHCI模式了。
選項位置如下:
Advanced Chipset Features > SATA Mode Select > RAID Mode
然後預設4個插槽就是關閉狀況不用理會RAID的設置。
如果原本是IDE模式調成AHCI會導致開機的時候藍屏重開,可以參考這一篇站內文
https://charlottehong.blogspot.tw/2018/02/win10-sysprep.html

2018年2月18日 星期日

win10 自動修復789M的RE分區 如何關閉

win10 自動修復789M的RE分區 如何關閉

更新後應該有發現會多一個修復磁區,大概789M 是RE修復磁碟分割,它是一個獨立的小小系統,系統壞掉可以開它來執行修復或是CMD之類的功能。

指令

開啟cmd執行
reagentc /disable
關閉之後,之後更新就不會自動建立了,不過已經存在並不會自動刪除需要手動刪除。


刪除分區

如果是連分區都想刪除可以參考這一篇站內文




Win10 封裝 sysprep 詳細使用說明

Win10 封裝 sysprep 詳細使用說明

封裝

微軟內建的封裝軟體在這個位置
C:\Windows\System32\Sysprep
打開之後有個 Sysprep 就是他了

sysprep

大致來說有2+1個選項,總共4種組合
  • 進入系統全新體驗 OOBE
  • 進入系統稽核模式
其中的+1是一般化,附加選項

進入系統全新體驗

下次啟動的時候會進入導覽介紹,可以重新設置電腦還有創建使用者。

進入系統稽核模式

這個是封裝的流程第一步驟,完整的封裝流程是
進入系統管理員 admin 帳號 -> 安裝軟體設定電腦 -> 封裝
進入admin的原因是,在這之後建立的使用者都會把admin帳戶當樣本copy一份,就是相當於改變預設數值的意思了。
封裝的意思是做一片母片,比如說你需要安裝100台電腦,這100台電腦都要預裝10個大型軟體,當然不可以每台每台安裝,會製作一片母片。
做好的母片可以做到跟官方下載下來的光碟一樣,只是差別在第一次建立使用者開進入的時候不是空的(使用者也可以預先建好)。
如果是第一次OOBE,也就是全新安裝的win10你預定要來做封裝了就在進入OOBE實按住sift,會直接進入系統稽核模式,時機不太好掌握,沒辦法的話就是進桌面在從sysprep進入,然後再刪除使用者帳戶就可以開始安裝需要封裝的內容了。

一般化

系統會移除所有硬件驅動程式+硬件信息,下次開機會重新偵測重新安裝
全新的安裝系統應該有印象會有Windows旗幟然後下轉圈圈,寫信息說正在初始化還是怎麼樣,那個就是安裝對應的硬件驅動。
其中還有包含一些非常底層的信息,如CPU幾顆幾何新,記憶體多大等等,這些資訊Windwos初始化之後會存下來才不用每次都重讀。
一般化是封裝的最後一個步驟,會移除系統的SSID,就是系統唯一的識別碼,如果你要把這台電腦釋放到2台以上的電腦 2個同ID的系統自然是會問題的,必須打勾。
如果只是移動機子,或是備份系統之類的幹嘛,總而言之這份系統,可能不一定在原機原硬體設備上運行,但是最後只會有一份在運行,那就沒差不用打勾。
一般化的要求比較嚴,如過有一個軟體是安裝在個別使用者而不是安裝給所有使用者,那就會出問題不能一般化。
新版的市集就是這樣安裝給個別使用者…所以不小心更新了市集就沒辦法一般化了。
詳細可以參考這篇站內文:https://charlottehong.blogspot.tw/2018/02/win10.html

2018年2月17日 星期六

windows10 系統封裝 自訂任務欄的圖示和桌面捷徑

windows10 系統封裝 自訂工作列的圖示和桌面捷徑

捷徑一般就是從公用資料夾複製過來,你安裝的時候選用對所有使用者安裝就會有了
任務欄的圖示釘選比較特別她好像是存在 explorer.exe 裡面,封裝完畢之後先不要關機,打開工作管理員重新啟動 explorer.exe 這時候再自定義釘選上去就會有了。

Win10+7 更換主機板 或 硬碟轉移別機 IDE轉AHCI 不重灌方法

Win10+7 更換主機板 或 硬碟轉移別機 IDE轉AHCI 不重灌方法

大多數會出問題的是原機BIOS設置硬碟是 IDE 模式,轉過去的機子是 AHCI 的情況,又或者是從AMD的AHCI跳到英特爾的AHCI,兩家驅動不一樣一樣沒驅動就不能啟動了。
這種情況的特徵是 Win7 轉圈圈,轉一轉直接重開機,Win10 則是直接藍屏然後重開機。
更改方式其實很簡單,在移動硬碟到新電腦之後第一次啟動時候進入安全模式,系統會自動安裝AHCI驅動程式,安裝完畢再正常開機即可進入。

Windows7

開機的時候狂按F8 就可以進入安全模式了,進入安全模式之後需要到官方下載AHCI驅動程式安裝,Win7 沒有提供內建的AHCI可以使用(SP1版本才有提供)。

Windows10

沒辦法使用F8進入安全模式,需要再上一次開機的時候設置成下次開機使用安全模式開起才可以,設置方式如下。
按住SIFT -> 按開始在按重新啟動 -> 進入選單 ->
選擇疑難排解 -> 進階選項 -> 啟動設定
再來下次開機就會進入安全模式了,不過要趁這次重開機的時候,按 DEL 進入 BIOS 將 IDE 改為 AHCI 儲存之後再重開,然後安全模式選單就選 4 進入,正常開機後就可以重新啟動了,已經安裝好AHCI驅動了重啟後即可以正常使用。


還是不行怎麼辦

如果真的還是還不行,可以使用 sysprep 重新封裝。這個封裝成功會砍掉全部驅動,還有重設一些硬件的設定,是個比較靠普的處理方法,也這是微軟提供用來部屬的軟體(一台母機安裝好映射到所有電腦)。
可以看到這篇介紹:https://goo.gl/zjWizS

關閉 win10 商店的自動更新 cmd指令

關閉 win10 自動更新商店的 指令

win10 新版本的封裝系統(sysprep)會報錯,原因出在商店安裝了應用程序。簡單的辦法就是不連網不過這也導致有些軟體不能更新,直接關掉市集就沒事了。
這是官方的連結:https://goo.gl/qBaJXc

方法1 從服務禁止
:: 市集更新設置為關閉並停止服務
sc config InstallService start= disabled & net stop “Windows 市集安裝服務”
:: 市集更新設置為手動並啟用服務
sc config InstallService start= demand & net start “Windows 市集安裝服務”

方法2 從登錄檔禁止 (等校於市集設定內關閉自動更新)
關閉 WindowsStore 的自動更新 (關閉:2, 開啟:4)
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsStore\WindowsUpdate" /v "AutoDownload" /t REG_DWORD /d 2 /f



目前還沒發現如果已經更新了該怎麼辦的方法,有找到一個稍微有一點用,不是完全保留的方法,就是用不格式化系統的曹的方式重灌系統。
這個可能很多人都沒發現,這個方式會很大程度的保留使用者檔案與設定,但是重裝系統,非常好用。如果你有升級過win10的年度更新應該有注意到跑很久,更早期第一次的年度更新還有一個特別頁面,這個就是屬於上述的方式重裝系統。
可以從這個地方來才不會按錯(直接搜尋defender)
或者你從復原那邊也可以,只是注意要選保留檔案,選錯就清空重灌。
下下策就是直接拿光碟或USB出來不格式化重灌
這樣重灌完畢之後記得斷網開機,關市集更新...

已經更新了市集該怎麼辦

後來測試找到方法了,刪除就好了XDD
有兩個方法,第一個是進入系統稽核模式也就是開 admin 帳戶進入(記得斷網不要讓ad帳號也更新了),然後把使用者砍乾淨就解決了~
要留使用者的話就是按開始,把有釘選的按右鍵,有移除的都移除,如果有不小心取消釘選的去裡裡面找到一下把她刪除。
原本以為會砍掉像是計算機呀這類的預設程式,其實不會這些程式沒有刪除給你選,不用刪除不影響封裝。
砍乾淨就可以正常一般化封裝了~如果還是不行看一下是不是有某個程式當初安裝選擇了,單裝使用者,沒有安裝給全使用者。
結論就是不刪除而保留的使用者,不可以有他自己有,別人沒有的軟體。
如果你的系統已經用一段時間了裝了一堆軟體,你也不知道怎麼樣了找不到,只能忍痛砍掉使用者帳戶了。

更新方法不用砍使用者

後來有實測沒砍使用者沒差,把市集所有應用程式刪除就好了

2018年2月15日 星期四

更換 CPU 系統核心數與名稱沒變還是原來的CPU 解決方法 (不用重灌)

更換 CPU 系統核心數與名稱沒變還是原來的CPU 解決方法 (不用重灌)

主要是因為系統要加速開機,這些不會變動的資訊就存下來了直接讀取舊資訊,讓他在開機的時候重新偵測硬體就好了。
以Win10來說應該有印象剛重灌完成的時候,第一次開機畫面轉圈圈的時候有些一些什麼字對吧,就是在偵測硬體建立資訊。
接下來是方法,按一下win按鈕然後在搜尋輸入 msconfig ,Win10的話按一下沒有搜尋框,但是其實是可以打字或貼上的,按了後會出現搜尋框。
這裡選擇正常啟動,下次開機核心數跟名稱就會自動校正了

2018年2月11日 星期日

C / C++ 針對特定格式空格或跳行 切割字串 strtok() 範例

C / C++ 針對特定格式空格或跳行 切割字串 strtok() 範例

初學語言時做題目很容易遇到的題目就是處理字串,字串的處理常常對初學者來說很常搞不清楚,尤其容易遇到的問題字串的切割。
字串的常見問題可以參考這篇站內文,看完之後應該可以有比較深入的理解
https://charlottehong.blogspot.tw/2017/04/c-char.html
比如說有一個字串是以空白或跳行隔開的,怎麼把他們取出來。比如說
A B C
AB
把它變成可以這樣存取
str[0] => A
str[1] => B
str[2] => C
str[3] => AB
這裡我們引用一個內建已有的函式來做說明 strtok();
    char buff[]="1 2 5 44 66";

    // 設置切割字符
    const char* delim = " ";

    // 切割字串
    char* pch=strtok(buff,delim);
    while(pch) {
        printf("%s, ", pch);
        pch=strtok(NULL, delim);
    } printf("\n");
這是可以在官方上看到的說明,大致上的用法就是第一次使用的時候需要輸入字串的指針,到了第二次以後就輸入 NULL 即可,詳細的運作原理是在 function 裡面使用 static 變數,會把第一次進來的指針存著。
上面這個式子用了開頭設置變數與每次結尾都執行一行代碼,正好符合 for 迴圈的使用方式,可以簡化到 for 迴圈裡面。
實際上這麼做在C++也比較好可以把 pch 包進去內層區域變數不會汙染到外面的變數名稱,C++鼓勵把變數名稱盡可能延後到需要使用才宣告。C語言或舊的style則鼓勵把所有變數名稱都在開頭宣告好。
我是覺得現代編譯器會對這種情況做優化的(沒有詳細去考證,但是其他有很多會被優化到沒影響),所以如果優化開下去就沒效能問題了,當然是盡可能減少汙染搂;然後切開變數的副作用對後面的人也比較友善,看程式碼才不會猜說,這個變數有沒有在什麼地方被偷偷修改了找半天。
    for(char* pch=strtok(buff,delim); pch; pch=strtok(NULL, delim))
        printf("%s, ", pch);
    printf("\n");
有一點需要注意的是 strtok() 對輸入的指針有副作用(英),翻譯過來意思就是會改變其內容,如果輸入的字串是不允許被修改的,需要建立一個站存字串,然後把它複製進去,再把這個站存字串丟進去做 strtok()。

安全問題

這裡的安全有兩個意思,一個是會不會被駭客竊取資料(從記憶體裡面挖如非法存取偷挖),一個是可能引發未定義行為。語意上直覺得看起是A但是實際上卻是跑B,或是後面接手的人不知道潛規則,比如說你讓兩個指針同時指向同一個位址後面的人不知道就 free 這兩個就出問題了,安全的寫法是非必要避免同時指向,不要弄什麼潛規則了。
其實 string.h 很多都不安全,廣一點來說C的輸入指針的函式很多都有危險,這部分可以參考文首的連結貼文有大致說明了一些輕微的小問題。
這個函式的問題是比較明顯的比較好思考,你使用過後他的指針就一直存在那個 static 裡面,如果你沒有特別去處理這個問題,極端狀況駭客可能可以從這個洞獲取你的資料之類的。
這個函式有了安全的版本,把那個站存的指針丟出來給外面的使用者控制了,可以讓你自己用完之後自己歸零。
nullptr 是 C++ 的空指針,在C裡面用可以用NULL替代。(但是反過來C++裡面寫NULL表示空指針是不安全的盡量避免)
    char str[] = "1 2 3 4 5";
    char delims[] = " ";

    char *next = nullptr;
    char *pch  = strtok_s(str, delims, &next);
    for(;pch; pch = strtok_s(nullptr, delims, &next)){
        printf("%s, ", pch);
    } next = pch = nullptr;
    printf("\n");

範例程式

/*****************************************************************************
Name : 
Date : 2018/02/11
By   : CharlotteHonG
Final: 2018/02/11
*****************************************************************************/
#include <stdio.h>
#include <string.h>

int main() {
    char buff[]="1 2 5 44 66";

    // 設置切割字符
    const char* delim = " ";
    // 切割字串
    for(char* pch=strtok(buff,delim); pch; pch=strtok(NULL, delim))
        printf("%s, ", pch);
    printf("\n");

    return 0;
}

2018年2月10日 星期六

C 錯誤時回報 當前所在位置的 檔案名稱、行數、函式名稱

C 錯誤時回報 當前所在位置的 檔案名稱、行數、函式名稱

C 沒有 C++ 的例外可以用多半就是用print回報信息,需要詳細知道所在位置可以用內建的Macro回報,方法如下
內建有這些
  • __FILE__ 檔案詳細名稱含路徑位置
  • __LINE__ 當前代碼的行數
  • __FILENAME__ 只回報檔名 (這個是我在 overflow 找到的方法)
#define __FILENAME__ strrchr("\\" __FILE__, '\\') + 1
#define POINT_IS_NULL(msg) \
    printf("%s \t\t # %s::%d --> \"%s()\" \n" , \
        (msg) , __FILENAME__, __LINE__, __FUNCTION__);

int main(int argc, char const *argv[]) {
    POINT_IS_NULL("point is NULL");
}
就可以回報所在的詳細位置了


參考