(AHK)(AutoHotkey)(気まぐれ更新)(久々に imgctl.dllでお遊び)
imgctl.dll を使って 自分用に ちょっとプログラム書いてたら
( ルーチェさんの HP は こちら http://www.ruche-home.net/?Home )
いつの間にか imgctl.dll の ライブラリを作り始めていた
な・・・ 何を言ってるのかわからねーと思うが・・・ 以下略)
とまぁ いろいろと 書いてる最中ですが 関数を1つだけ公開
同ライブラリ内の関数を呼び出しているので コレだけでは動きません 笑)
他の関数の公開は また ぼちぼちとやっていきます
ファイルが無かったら このスクリプトが自力で bmpファイルを生成する所ですね
これは これ以外の所でも 結構 応用が利くのでは無いでしょうかね?
( ルーチェさんの HP は こちら http://www.ruche-home.net/?Home )
いつの間にか imgctl.dll の ライブラリを作り始めていた
な・・・ 何を言ってるのかわからねーと思うが・・・ 以下略)
とまぁ いろいろと 書いてる最中ですが 関数を1つだけ公開
同ライブラリ内の関数を呼び出しているので コレだけでは動きません 笑)
他の関数の公開は また ぼちぼちとやっていきます
;--------------------------------------------------------------------------------------------------------------------------------------------------------- ; imgctl_NewDIB(NewWidth, NewHeight) 新規にDIBを作成して hDIBを返します ;--------------------------------------------------------------------------------------------------------------------------------------------------------- ; 横:NewWidth 縦:NewHeight のサイズで 新規に DIBを生成します ; ; いちいちプログラムのみで DIBを生成するのも面倒くさいので 笑)、というか作り方がわからないので 笑) ; 1x1.bmp という 縦横白1px の 画像 を 開いて リサイズする事によって 指定されたサイズのDIBを生成します ; ; 注意 : 1x1.bmp というファイルがない場合は 自動的に スクリプトと同じ所に ファイルを生成します ; ; 生成に成功すると DIBのハンドルが、 失敗すると 0が返ってきます Imgctl_NewDIB(NewWidth, NewHeight) { ; BMPファイルが無かったら 自分で作ります If !DllCall("shlwapi.dll\PathFileExistsA", "Str", "1x1.bmp") { BinDataImage := "0x42,0x4D,0x3A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x28,0x00," BinDataImage .= "0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x18,0x00,0x00,0x00," BinDataImage .= "0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," BinDataImage .= "0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00" VarSetCapacity(buf, 58, 0x00) Loop Parse, BinDataImage, CSV { NumPut((A_LoopField + 0), buf, (a_index - 1), "Char") } ; GENERIC_WRITE = 0x40000000 ; CREATE_ALWAYS = 0x2 ; FILE_ATTRIBUTE_NORMAL = 0x80 hFile := DllCall("kernel32.dll\CreateFileA", "Str", "1x1.bmp", "UInt", 0x40000000, "UInt", 0, "UInt", 0, "UInt", 0x2, "UInt", 0x80, "UInt", 0, "UInt") DllCall("kernel32.dll\WriteFile", "UInt", hFile, "UInt", &buf, "UInt", 58, "UIntP", WritedSize, "UInt", 0, "Int") DllCall("kernel32.dll\CloseHandle", "UInt", hFile, "Int") } ; もう一回チェックしてBMPが存在すれば それを開いて リサイズをかけます If DllCall("shlwapi.dll\PathFileExistsA", "Str", "1x1.bmp") { buf2 := Imgctl_ToDIB("1x1.bmp") If Imgctl_ResizeDIB(buf2, NewWidth, NewHeight) Return buf2 Else Return 0 }Else{ Return 0 } } ;---------------------------------------------------------------------------------------------------------------------------------------------------------このサンプルの 見所 としては
ファイルが無かったら このスクリプトが自力で bmpファイルを生成する所ですね
これは これ以外の所でも 結構 応用が利くのでは無いでしょうかね?