WinAPI

Windowsプログラミング基礎

エントリポイント

  • Windowsプログラミングには「windows.h」のインクルードが必要
  • main関数ではなく、WinMain関数がエントリポイントとなる
int WINAPI WinMan(
	HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR lpCmdLine,
	int nCmdShow) {
	return 0;
}
  • WINAPIは「windef.h」ヘッダファイルで「#define WINAPI __stdcall」と定義
  • 「__stdcall」はWin32APIコール時の規約
  • 以下は引数の説明
第1引数

(HINSTANCE hInstance)

アプリケーションの現在のインスタンスへのハンドル(アプリケーションを識別するための値)
第2引数

(HINSTANCE hPrevInstance)

アプリケーションの前のインスタンスへのハンドル
Win32では常にNULL
第3引数

(LPSTR lpCmdLine)

プログラム名を除くアプリケーションのコマンドライン
第4引数

(int nCmdShow)

ウィンドウの表示方法

参考:learn.microsoft.com

メッセージボックス

int WINAPI WinMan(
	HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR lpCmdLine,
	int nCmdShow) {
	MessageBox(NULL, TEXT("メッセージ"), TEXT("キャプション"), MB_OK);
	return 0;
}
第1引数(HWND hWnd)
作成するメッセージボックス所有者ウィンドウへのハンドル
NULLの場合、所有者ウィンドウなしとなる
第2引数(LPCTSTR lpText)
表示するメッセージ
第3引数(LPCTSTR lpCapton)
ダイアログボックスのタイトル
第4引数(UINT uType)
ダイアログボックスの内容と動作
戻り値(int)
押されたボタンに応じた値,失敗時は「0」を返す

参考:learn.microsoft.com

Python

pip3 install for Ubuntu

# インストール用スクリプトダウンロード
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ sudo python3 get-pip.py
# pipのアップデート
$ pip3 install -U pip

Numeric

# 10進数から文字列
>>> str(123)
'123'
# 文字列から10進数
>>> int('123')
123
# 10進数から16進数
>>> hex(123)
'0x7b'
# 16進数から10進数
>>> int('7b', 16)
123
# 10進数から2進数
>>> bin(123)
'0b1111011'
# 2進数から10進数
>>> int('1111011', 2)
123

String

# 文字からASCIIコード
>>>ord('A')
65
# ASCIIコードから文字
>>> chr(65)
'A'
# 文字列分解
>>> list('abc')
['a','b','c']
# 文字列をASCIIコードで分解
>>> map(ord, 'abc')
[97, 98, 99]
# ASCIIコードから文字(複数)
>>>> map(chr, [97, 98, 99])
'['a', 'b', 'c']
# 文字結合
>>> ''.join(['a', 'b', 'c'])
'abc'
# base64
>>> 'abc'.encode('base64')
'YWJj\n'
>>> 'YWJj\n'.decode('base64')
'abc'
>>> print 'abc'.encode('base64')
YWJj

暗号・ハッシュ

# xor
>>> ord('a') ^ ord('z')
24
# rot13
>>> 'Hello'.encode('rot13')
'Uryyb'
>>> 'Uryyb'.decode('rot13')
'Hello'
# hash
>>> import hashlib
>>> hashlib.md5('abc').hexdigest()
'900150983cd24fb0d6963f7d28e17f72'
>>> hashlib.sha1('abc').hexdigest()
'a9993e364706816aba3e25717850c26c9cd0d89d'
>>> hashlib.sha256('abc').hexdigest()
'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f2001
5ad'

ファイルから1行ずつ読み書き

fin = open('./a.txt', 'r')
fout = open('./b.txt', 'w')

for line in fin
 fout.write('out' + line)

fin.close()
fout.close()

data = open('./b.txt', 'rb').read()
print data

ANACONDA

jupyter
Web上でPythonを実行

Eclipse Config

C,C++(Linux gcc)

includeパスの設定

  • [Project]-[Properties]-[C/C++ Build]-[Settings]-[GCC C Compiler]-[Includes]から[Include paths(-l)]に追加する
  • "${workspace_loc:}"でワークスペース名、"{ProjName}"でプロジェクト名を表す
  • 例) "${workspace_loc:/${ProjName}/include}" と指定するとプロジェクト以下のincludeフォルダを参照する
  • pthread等のリンクオプションの設定

    • [Project]-[Properties]-[C/C++ Build]-[Settings]-[GCC C Linker]-[Libraries]から[Libraries(-l)]に追加する
    • "-l"は不要
    • 例)Makefile上で「-lpthread」と同等の指定は単に「pthread」と指定すればよい

    C,C++(MS Visual C Compiler)

    includeパスの設定

    • [Project]-[Prpoperties]-[C/C++ General]-[Path and Symbols]-[Includes]にIncludeパスを追加する
    • パスは「C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.32.31326\include」など

    コンパイラの設定

    • EclipseからMSVCのコンパイラ(cl.exe)が使用できるようにOSの環境設定でパスを通すか、Eclipseでコンパイラ設定を行う
    • Eclipseで設定する場合は[Project]-[Prpoperties]-[C/C++ Build]-[Settings]-[C++ Compiler]-[Command]にcl.exeのフルパスを入れる

    リンカの設定

    • コンパイラと同様にリンカの設定を行う
    • Eclipseで設定する場合は[Project]-[Prpoperties]-[C/C++ Build]-[Settings]-[Linker]-[Command]にcl.exeのフルパスを入れる
    • 参照するライブラリがある場合は、[Linker]-[Libraries]にパスを入れる