FC2ブログ

    技術

    Logicool G HUBのプロファイル名を変更する方法

    お約束

    ご利用は自己責任で

    変更例

    変更前 変更後
    200118_LGHUB_1.png 200118_LGHUB_2.jpg

    変更方法

    1. 前提知識: ファイルの場所
    2. 項目 場所
      実行ファイル C:\Program Files\LGHUB
      設定ファイル C:\Users\%USERNAME%\AppData\Local\LGHUB\settings.json
      設定ファイルのバックアップ C:\Users\%USERNAME%\AppData\Local\LGHUB\settings.backup
    3. 前提知識: 設定ファイル更新のタイミング
    4. 設定ファイル(settings.json, settings.backup)がG HUBに書き換えられるタイミングは以下の通りです。
      • G HUB起動時
      • G HUB終了時
      • G HUBプロファイル切り替え時
      • 起動時の設定で上書き

    5. 前提知識: プロファイル名
    6. プロファイル名はプロファイル作成時に指定した実行ファイル(exe)の名前になります。
      例えば、「FSD.exe」という実行ファイルを指定した場合、プロファイル名は「FSD」となります。

    7. 準備
    8. 変更するプロファイル名をメモする。
      設定ファイル編集の際に使用します。メモ帳などにメモしておきましょう。
      今回は例として、プロファイル名「FSD」を「Deep Rock Galactic」に変更します。

    9. G HUBを終了する
    10. タスクバーに常駐しているG HUBを「Quit」で終了する。

    11. 設定ファイルを開く
    12. 設定ファイル(settings.json)をテキストエディタ等で開く。
      メモ帳などでも編集できるが、色分けして表示できるエディタを使うと便利です。
      例ではVisual Studio Codeを使用します。

    13. 設定ファイルを検索する
    14. 「準備」でメモしておいたプロファイル名を使用して設定ファイルを検索します。
      検索ワードは「"name": "メモしたプロファイル名"」です。

      200118_LGHUB_3.jpg

    15. 設定ファイルを編集する
    16. 前項で検索した「"name": "プロファイル名"」のプロファイル名部分を自由に変更します。(ただし、「"」や「\」は使用しないこと)
      例: 「"name": "FSD",」を「"name": "Deep Rock Galactic"」に変更し、上書き保存します。

    17. G HUBを起動する
    18. 「C:\Program Files\LGHUB\lghub.exe」を実行します。
      プロファイル名が書き換わっていれば成功です。
      書き換わっていない場合は手順を最初から見直してください。
      たまに、「インストールされていません」というプロファイルが作成されている場合がありますが、G HUBの再起動で消えます。
    スポンサーサイト



    WindowsにおいてHDD/SSDをBIOSで認識するがOSで認識しない場合の解決法

    環境


    【CPU】 Core i7 4790K BOX
    【CPUクーラー】 虎徹 MarkII SCKTT-2000
    【メモリ】 32GB
    【マザーボード】 H97 Pro4(BIOS ver. 2.10)
    【ビデオカード】 GTX 1070
    【SSD】 x2
    【HDD】 x5(SATA3_0からSATA3_4のSATAポートから接続+PCIEボードでSATAポートを2つ拡張し接続)
    【電源】 750W
    【OS】 Windows 10 Home

    症状


    上記環境に6TBのHDDをSATA3_5ポートから新規増設したところ、BIOSではHDDの型番まで認識した。
    OSを起動後、コンピュータの管理からドライブレターを割り当てようとしたところ、該当HDDが表示されなかった。
    デイバイスマネージャを確認したところ、やはり該当HDDを認識していなかった。

    解決方法


    以下の「IDE ATA/ATAPI コントローラ」のドライバを更新する。
    ・Intel(R) X Series Chipset Family SATA AHCI Controller
    ・標準 SATA AHCI コントローラ
    ただし、今回は上記ドライバを「ドライバの更新」から更新を試みるも、「最新のドライバ」であるとされ、改善が見られなかった。

    そのため別途、「インテル® チップセット・デバイス・ソフトウェア(INF 更新ユーティリティ)」をインストールした。
    使用した実行ファイルは以下から入手可能である。
    https://downloadcenter.intel.com/ja/download/28768/-INF-?product=98458
    対応しているチップセットはページ下記の「このダウンロードは以下の製品での動作が確認されています。」から確認可能である。

    解決までに試したこと(忘備録)


    SATAポート、ケーブルの初期不良->BIOSで認識できているため該当しない


    一応ポートやケーブルも変更済み
    SATA3_4に接続していたドライブをHDD_A、SATA3_5に新規で接続するドライブをHDD_Nとした場合、
    SATA3_5に接続されているHDD_Nが認識されなかったため、
    SATA3_4にHDD_Nを、SATA3_5にHDD_Aを接続したところ、HDD_Nが認識され、HDD_Aが認識されない状態となった。

    HDDの初期不良->BIOSで認識しているため該当しない


    また、上記環境で、OS起動後にSATA-USB変換ケーブルを用いてHDDを接続した場合は8個目のドライブとして認識される。
    フォーマットや読み書きも通常通り可能だった。

    HDD増設により電源不足が発生している->必要電力量と搭載電源から、該当しない


    そもそも、HDDを1個増設して不足する電力状態にあるならば、普段ゲームをしているときに動作が不安定になっているはずだが、そういったことは無い。


    以上から、ハード的な問題ではないだろうと判断した。


    デバイスマネージャで認識されていないため、ドライバの問題を疑った(というより、他に疑うものが思い浮かばなかった)


    Googleで「windows10 デバイスマネージャー hdd 認識」で検索し、2件目の「BIOSではHDDを認識するのに、Windows10では認識しない時の対処法【これで解決】」( https://www.mashilog.com/entry/bios-hdd-windows-ninnsiki )にたどり着き、ドライバの更新をするも、「最新のドライバ」であると表示されるのみで改善されず。

    「Intel(R) 9 Series Chipset Family SATA AHCI Controller+α」で検索し、「Windows 2000 向け Intel 9 Series 対応 AHCI ドライバ定義更新」( http://blog.livedoor.jp/blackwingcat/archives/1896175.html )にたどり着き、「INF ファイル」の上書きも有効らしい場合があることを知り、解決法のドライバダウンロードページに辿り着いた。

    状況が限定的すぎて全然情報がなかった。
    試していないのだが、PCI-EでSATAポートを拡張していないSATA3_0->SATA3_5までだけ使用していた場合には、この症状は起こっていなかったのかもしれない。
    8個目のドライブで症状が出るのか、それとも、M/Bの最後のSATA3ポートで症状が出るのかどちらだったのだろう。
    情報の少なさからいって、前者なのではないかという気がする(ただし、なぜ7個まで大丈夫で、8個目からだめなのか不明なので、後者なのかもしれない)。
    症状を改善してしまったので、もはや検証不可能である点、少々残念である。

    Logicool Gaming Softwareでスクリプトを書こう

    Logicool Gaming Software(以下LGS)さん実はLuaスクリプトを書けます。 

    その前に、LGSのマクロのお話を少し。

    LGSには一定の操作を簡単に自動化できるマクロ機能が実装されています。

    マクロを使うと、「コピー(Ctrl+C)」をワンクリックでできたり、するわけですね。

    ただ「コピー」するだけならショートカット押せばいいじゃないかと思われますので、パッと思いついた使いみちを書くと。
    例えば、「AとDを交互に連打したい」場合があったとすると、通常ならキーボードで「ADADADAD・・・」と打たなければならないわけですが、マクロを使うと「AD」を「1秒ごとに繰り返す」ということができるわけですね。
    (DbDで使っている人がいるかも知れない)
    この操作を、LGSのマクロ機能で書くと画像のようになります。

    s-CB_0006.jpg

    ちょっと説明
    ○キーストローク
    ・下矢印がキーを押し込む操作
    ・上矢印がキーを離す操作
    ・X秒の遅延はX秒何も操作しない時間

    ○繰り返しオプション
    ・ボタンを押している間、1秒ごとにキーストロークを繰り返す

    ●LGSマクロの長所・短所
    ○長所
    ・お手軽
    「記録を開始」ボタンを押したあとに、再現したいキー入力を押すだけでマクロが作れる

    ○短所
    ・可読性が悪い
    上矢印のキーがどこで押されていて、どこで離されているのか分かりづらい。
    ・編集性が悪い
    「AD」と入力していたけれど、「ACD」としたいと思ったときには、「AD」の操作の間を選択して「ここより前/後から記録」としてキー入力を足すわけですが、複雑なマクロをトライアル・アンド・エラーしようと思うと可読性の悪さと相まって、もはや新規にマクロを作り直すことになります。
    ・繰り返しに弱い
    「ABCDEF」「Q」「ABCDEF」「Z」と入力したい場合、素直に「ABCDEF」「Q」「ABCDEF」「Z」とマクロを組むしかない。
    何当たり前のことを言っているんだと思われるかもしれませんが、プログラミングをしたことのある人なら「ABCDEF」の入力は「関数にしてやればいい」とか「for」で回せばいいとか思うことでしょう。

    ●マクロとスクリプトの比較
    イマイチ長所と短所が伝わりづらいと思いますので、「ABCDEF」「Q」「ABCDEF」「Z」をマクロとスクリプトで組んだ場合の違いをお伝えします。

    ○マクロ
    左から右にキー入力のマクロが進んでいきます、記録した直後に見ても、もはや何をしているのかよくわからない状態になっています。
    (マクロ画像はまだ続きますが、ここまでにしておきます。)
    s-CB_0007.jpg s-CB_0008.jpg


    ○スクリプト
    キーの入力(押し込みと離す操作)を1行で書けるので、マクロと比べると非常にスッキリしているかと思います。
    s-CB_0011.jpg 

    PressAndReleaseKey()は「キーを押して離す」操作をしています。
    例えば、PressAndReleaseKey("a")ならAキーを押して、離すということですね。
    PressAndReleaseKey("a", "b")だと、Aキーを押して離したあとに、Bキーを押して離すといった具合になります。

    ○「ABCDEF」「Q」「ABCDEF」「Z」から「ABCDEF」「Q13」「ABC2DEF」「Z3」に変えたい
    マクロの場合は、「Qの後から記録」で「13」をいれて・・・とできないこともないですが、非常に分かりづらいです。

    一応編集したマクロをペタリ。
    s-CB_0013.jpg 

    「Qを離して」から「1を押す」までに遅延が入っていませんね・・・とか、「Q13」としたつもりが「ABCDEF13」になっていたということが容易に起こりうる可読性の悪さです。

    スクリプトをペタリ
    s-CB_0014.jpg 

    非常にわかりやすいですね。
    また、テキストなので、編集が非常に簡単です。
    マクロで、「ああでもないこうでもない」「間違えた・・・」「なんじゃこりゃー」となるところを、スクリプトなら数行でしかも読みやすく、編集しやすくかけるわけです。

    これはもうスクリプトを使うしかない!

    ということで、スクリプトを書きたい方は、先人が書いている解説を参考に学んでみましょー!
    (丸投げ)

    参考:

    自分用に作った関数たち
    昨日スクリプト機能に気がついて書いたのでまだまだ編集中


    Lenovo Ideapad 720S 暗転時画面明度が勝手に変わる症状の改善

    検索用
    Windows 10 画面 明るさ 変わる 勝手に変わる 暗転

    症状:
    ・画面の暗転時勝手に画面光度が変わる

    対策:
    (デスクトップ右クリックメニューから)インテルグラフィックスの設定 -> 電源 -> ディスプレイ省電テクノロジー -> 無効

    以下はIdeapad 720Sでは不要
    (デスクトップ右クリックメニューから)ディスプレイ設定 -> 照明が変化した場合に明るさを自動調整する

    --------------------------------

    Lenovo Ideapad 720Sを使い始めて約半年。

    良いと思うことも、いまいちと思うことも様々。

    良い
    ・薄い、メタルフォルムでかっこよい
    ・タイプしやすいキーサイズ(ただしデスクトップ用のキーボードとはやはり若干配置に違いがあるのでタイプミスあり)
    (電源ボタンの押し間違いは最初から設定で回避済み)
    ・普段はほとんど稼働音がない(SDDであるため読み書き音無し、ファンの音も非常に小さい)
    ・発色は十分、視野角が広い
    ・起動が早い(SSDなので当たり前といえば当たり前)
    ・指紋認証便利(認証データの管理どうしてるんだろう、外においてたりするのかな?)

    いまいち
    ・RAM8GBでは足りない(開発時)
    ・高負荷時ファンの音がうるさい、かなりうるさい。
    ・全面メタルであるため高負荷時手元まで熱くなる、結構熱い。
    ・画面の暗転時勝手に画面光度が変わる

    これ、この画面光度が勝手に変わる問題。
    非常に気持ち悪い、滑らかに暗くなったり明るくなったりするのではなく、かくっかくっと段階的に光度が変わるのでとても違和感がある。

    「windows 10 画面 明るさ 変わる」でGoogle検索すると一番上にくる記事。

    Windows 10のディスプレイの輝度が勝手に変わるのを止める方法
    http://ascii.jp/elem/000/001/581/1581901/

    「電源プランの選択」を開く。選択しているプランの横にある「プラン設定の変更」をクリックし、続けて「詳細な電源設定の変更」をクリックする。
    電源オプションの詳細設定画面が開くので「ディスプレイ」の「+を」展開し、「自動輝度調節を有効にする」の「設定」をオフにすればいい。ノートPCであれば、「バッテリ駆動」と「電源に接続」の両方を設定する。


    ほかに、
    (デスクトップ右クリックメニューから)ディスプレイ設定 -> 照明が変化した場合に明るさを自動調整する
    を紹介している記事もあるが、Ideapad 720Sではこちらの設定はない。

    ニコニコ動画の生放送コミュニティを色付けするプラグイン作った

    ニコニコ動画を今更見始めたが、お口が悪かったりする配信者のものは見ていて気持ちの良いものではないので、次回以降見ないように気を付けるのだが、そういうものを登録する機能があるのかないのか・・・とりあえず見つけられなかった。

    強調表示くらいできればよいかなと思いTempermonkyのスクリプトをばばばっと書いた。
    javascriptを書くのは半年に一回くらいなので毎回変数の扱いから要素へのアクセス方法などすべて1から調べるためとても非効率的。

    英語が怪しいのはいつも通り。

    ニコニコ動画の生放送検索画面の放送コミュニティの画像を左クリックするとお気に入り、右クリックするとブロック、中クリックするとお気に入り、ブロック解除する。

    設定してみた画像がこちら。(単純に上からお気に入り、ブロック、指定なしとしているだけで他意はない)

    screencapture-live-nicovideo-jp-search-1519983830676.jpg

    グローバル変数の
    is_block_hideを
    trueでそのコミュニティの表示自体を消す
    falseでそのコミュニティ名をブロック色表示

    colorの
    likeとblockのカラーコードを変更すると表示職の変更を変えられる。
    取りえず2色あればよいだろうと拡張性は考えていない。
    (右クリックメニューを任意に追加してラベル付けとか考えたが、難しそうだったのでやめた。)



    // ==UserScript==
    // @name NiconicoLiveCommunityChecker
    // @namespace http://rinatl.blog.fc2.com/
    // @version 0.1
    // @description try to take over the world!
    // @author rin_jugatla
    // @match http://live.nicovideo.jp/search*
    // @require https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js
    // @grant GM_setValue
    // @grant GM_getValue
    // @grant GM_listValues
    // @grant GM_deleteValue
    // ==/UserScript==

    // グローバル変数
    var debug = false;
    var is_block_hide = false;
    var color = {"like": "#7FFF00", "block": "#FF0000"};
    var like = LoadArray2GM("like");
    var block = LoadArray2GM("block");

    // selector
    var live_block = "#main-for-following-ad > ul:nth-child(4) > li";
    var live_img_block = "div.program-summary-area > div > img";
    var live_span_block = "div.program-summary-area > div > span";

    $(
    function () {
    AddEvent2Image();
    }
    );


    function AddEvent2Image()
    {
    // 各リスト初期化
    // community list 取得
    var communities = document.querySelectorAll(live_block);

    for (var i=0; i<communities.length; i++)
    {
    // コミュニティ番号の取得
    var community_no = communities[i].querySelector(live_img_block).currentSrc.match(/co\d+/);

    // console.log(communities[i].querySelector("img").currentSrc);
    // コミュニティ画像にクリックイベントの追加
    // コンテキストメニューを表示するイベント時のコールバック
    // http://tmlife.net/programming/javascript/javascript-right-click.html
    communities[i].querySelector(live_img_block).addEventListener("contextmenu", function(e){
    // デフォルトイベントをキャンセル
    // これを書くことでコンテキストメニューが表示されなくなります
    e.preventDefault();
    }, false);

    // エレメントをクリックした際に呼ばれる処理
    communities[i].querySelector(live_img_block).addEventListener("mousedown", function(e){
    // 押しているボタンに応じて処理を切り替える
    // ここで2の時に独自のコンテキストメニューを表示したりする
    var community_id = GetCommunityID($(this).attr("src"));
    switch (e.button) {
    case 0 :
    // Left Click
    if(jQuery.inArray(community_id, like) == -1)
    {
    like.push(community_id);
    if(block.indexOf(community_id) > -1)
    block.splice(block.indexOf(community_id), 1);
    console.log("%cadd to like", "color: green");
    }
    break;
    case 1 :
    // Middle Click
    if(like.indexOf(community_id) > -1)
    like.splice(like.indexOf(community_id), 1);
    if(block.indexOf(community_id) > -1)
    block.splice(block.indexOf(community_id), 1);
    console.log("%cdelete from like & block", "color: blue");
    break;
    case 2 :
    // Rrght Click
    if(jQuery.inArray(community_id, block) == -1)
    {
    block.push(community_id);
    if(like.indexOf(community_id) > -1)
    like.splice(like.indexOf(community_id), 1);
    console.log("%cadd to block", "color: red");
    }
    break;
    }

    // リストの保存
    SaveArray2GM("like", like);
    SaveArray2GM("block", block);
    // リストの情報に基づき色の変更
    CheckColor();
    // リストの内容を確認
    if(debug)
    ViewList();
    }, false);

    // コミュニティがリストに存在するか確認
    if(jQuery.inArray(community_no[0], like) > -1)
    {
    communities[i].querySelector(live_span_block).style.color = color.like;
    }
    else if(jQuery.inArray(community_no[0], block) > -1)
    {
    if(is_block_hide)
    communities[i].hide();
    else
    communities[i].querySelector(live_span_block).style.color = color.block;
    }
    else
    {
    communities[i].querySelector(live_span_block).style.color = "black";
    }
    }
    }

    function CheckColor()
    {
    var communities = document.querySelectorAll(live_block);

    for (var i=0; i<communities.length; i++)
    {
    // コミュニティ番号の取得
    var community_no = communities[i].querySelector(live_img_block).currentSrc.match(/co\d+/);

    // コミュニティがリストに存在するか確認
    if(jQuery.inArray(community_no[0], like) > -1)
    {
    communities[i].querySelector(live_span_block).style.color = color.like;
    }
    else if(jQuery.inArray(community_no[0], block) > -1)
    {
    if(is_block_hide)
    communities[i].hide();
    else
    communities[i].querySelector(live_span_block).style.color = color.block;
    }
    else
    {
    communities[i].querySelector(live_span_block).style.color = "black";
    }
    }
    }

    function GetCommunityID(src)
    {
    var temp = src.match(/co\d+/);
    return temp[0];
    }

    function ViewList()
    {
    console.log("%clike", "color: green");
    console.log(like);
    console.log("-----\r\n");
    console.log("%cblock", "color: red");
    console.log(block);
    console.log("-----\r\n");
    console.log("");
    }

    // 変数をローカルに保存
    function SaveArray2GM(key, arr)
    {
    var temp = "";
    for(var i=0; i<arr.length; i++)
    {
    if(i != arr.length - 1)
    {
    temp += arr[i] + ",";
    }
    else
    {
    temp += arr[i];
    }
    }
    GM_setValue(key, temp);
    }

    // ローカルから変数をロード
    function LoadArray2GM(key)
    {
    var temp = GM_getValue(key);
    if(temp != null)
    return temp.split(",");
    return [];
    }