The Grimoire of Nonsense

個人的なメモを残すブログ

プログラミング

超中央にウィンドウを配置するための計算

画面のど真ん中にウィンドウを配置するときの計算方法をば。 タスクバーを除く画面の作業領域のサイズをSystemParametersInfo()で取得し、 タイトルバーの高さをtitleBarSize()で取得する。 詳しくは駄文を参照いただければよろしいかと。 例えば、Fallout4…

STLをDLL化するっ

ヘッダにこんな感じで書くといい。 #pragma once #pragma warning( push ) #pragma warning( disable: 4231 4251 ) #if defined( _WINDLL ) #define EXPORT __declspec( dllexport ) #else #define EXPORT __declspec( dllimport ) #endif #include <vector> templat</vector>…

.dllや.libがエクスポートしている関数を調べる

お馴染みdumpbin先生を使いエクスポートしている関数を調べる方法。 dumpbin /exports (対象ファイル)を使いエクスポートしている関数を調べることが出来る。 dumpbin先生の凄い所は.libファイルも見れてしまうこと*1。ただし、.libについては/GLオプション…

イベントログと戦う(C#編)

このイベントログに対する執着心と来たら。 一応C#で動くイベントログクリーナを書き直してみた。 僕自身は頑張ったつもりだけど、今度もまた突っ込み所があると思うけど気にしない方向で。 仕様的には、レジストリから収集したイベントログリストを用いて、…

SHA-1とSHA-256で同時に署名する

こんな風に署名する方法。 まずはSHA-1で署名する 普通に署名します。 (ここでは例でtest.exeに署名することにします) signtool sign /a /fd SHA1 test.exe 次にSHA-256で署名する 次に/asオプションと/fd SHA256オプションを付けて署名します。 signtool si…

簡易ニコ生アラートっぽいものを

作ろうとしてる。なお完成するかどうかは不明の模様。 XMLSocketが何かとか受信方法、WPFの勉強のために……。 更新がてらにコミュIDからコミュ名とオーナーを取得するやつを書いてみましたです……。 HtmlAgilityPackに依存してます。もっといい書き方があるか…

C#でHTTPのリダイレクト先を調べるもの

リダイレクトされる先を調べるようなっぽいものを諸事情で作りました。 色々参考にしました。 一応、Googleの短縮URLサービスからここのブログ用のURL作ってテストはしました……です。 きっと色々突っ込み所はあると思うけど、気にしない方向で……(滝汗) 以下…

VCのコンパイラにアセンブリファイルを出力してもらう

コンパイルする時にオプション/FAを追加するとアセンブリファイルを出力してくれる。 だから何って言われてもそれだけだけど……。 例 cl /nologo /FA test.cpp

STLのvectorで重複を削除

※この記事は下記の内容を参考に執筆させていただきました。 STLのvectorから同一要素を削除 - minus9d's diary STLのvectorにおいて重複を削除するにはsort()後にunique()し、erase()する必要がある。 この辺り関数化して用意しておくといいかも。 以下僕が…

最少サイズの.exeを作る

コンパイルする時 コンパイラ(cl.exe)に/MDオプションを付けてコンパイルする。 /MTオプションを付けると.exeが重くなる。 例 cl /nologo /MD /O1 /Os test.cpp リンクする時 リンカ(link.exe)に/entry:(メイン関数名)オプションを付けてリンクする。 コンソ…

Firefoxの.sqliteを最適化(?)する

sqlite3.exeにvacuumオプション渡した奴とreindex渡した奴に.sqliteを食わせると最適化できるらしい。 一応バッチファイルを書いてみました……(小声) きっとFirefox以外の.sqliteにも使える筈。 @echo off for /r %%i in ( *.sqlite ) do ( echo %%i vacuum s…

.exeが依存するDLLを調べる

.exeが実行する時に暗黙的リンクされているDLLが見つからないと実行出来ない*1。 暗黙的リンクされている.exeのDLLを列挙する時はやっぱりdumpbin先生に/dependentsオプションを指定して食わせてみる。 あとは不足DLLを用意するなりする。 dumpbin /dependen…

Wow6432Nodeを無視してレジストリを開く(Windows API用)

前に.NET Framework用Wow6432Nodeの無視の仕方を書いたけど、今度はC++とWindows APIで。 RegOpenKeyEx()を呼び出すときに引数samDesired(第4引数)にAND演算子で「KEY_WOW64_64KEY」を追加するだけ。 HKEY hKey = nullptr; RegOpenKeyEx( HKEY_CURRENT_USER,…

DLLが公開している関数を調べる

VC用ツールのパスを通してから dumpbin /exports (調べたいdllファイル)のコマンドを実行する。 これで公開している関数一覧が取得できる。以下実行例

DNSリゾルバキャッシュをクリアする

ipconfigコマンドならipconfig /flushdnsからクリアできるリゾルバキャッシュをAPIから削除する時は、 DnsAPI.dllのDnsFlushResolverCache()を用いる。 この関数、どうやら非公開っぽい*1ので直接DnsAPI.dllからLoadLibrary()してGetProcAddress()する方向で…

実行ファイルがx86用かx64用かを調べる

VC用ツールのパスを通してから dumpbin /headers (調べたいexeファイル)のコマンドを実行する。 FILE HEADER VALUESのmachineがx86かx64で判別する。以下実行例

TextBoxで改行したい

改行する時は \r\n を文字列に含めると改行される。 例: // textBox1があったとして textBox1.Text = "あああああ\r\nいいいい";

イベントログと戦う

Vista以降で追加されたAPIでイベントログの数を調べつつ1件以上データがあればクリアするように書きたい(切望) 有効か無効か調べないとどうも正しい件数が取得できないのかな? その辺で苦戦してる。※以下駄文は管理者として動かす必要があります。 ※あんま…

Wow6432Nodeを無視してレジストリを開く

C#でレジストリを開くコードを書いてるとどうしてもWOW64の壁に阻まれてしまうことがある。 そんな時に以下のような書き方をすることでWOW64の壁を超えることが出来る。 using Microsoft.Win32; ... using ( var baseKey = RegistryKey.OpenBaseKey( Registr…

イベントログを一括で削除する

イベントログをいちいち手で消すのは面倒なので一括でクリアするときのメモ。 レジストリの HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog と HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels に登録され…