サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Wikipedia
nienie.com/~masapico
GetWindowText タイトルバーやコントロール内に表示されている文字列の取得 Cの宣言: int GetWindowText(HWND hWnd, LPTSTR sWndTitle, int cLen); VBの宣言: Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" ( _ ByVal hWnd As Long, _ ByVal sWndTitle As String, _ ByVal cLen As Long) As Long 説明: hWndが示すウィンドウのタイトルバーに表示されている文字列を取得する。または、hWndが示すコントロール内の文字列を取得する。コントロール内の文字列とは、例えばhWndがボタンのウィンドウハンドルならば、ボタン名のことである。 hWndが示すウィンドウがコントロ
関数の実行が正常に終了した場合、イベントオブジェクトのハンドルが返される。イベントオブジェクトが新規に作成された場合、GetLastError関数の戻り値は0となる。EventNameによって指定されるイベントオブジェクトが既に存在していた場合、GetLastError関数の戻り値はERROR_ALREADY_EXISTSとなる。関数の実行に失敗した場合、NULLが返される。 自動リセットのイベントオブジェクトの例(C言語): #define EVENT_NAME "Event Object Test" /* スレッド用関数 * “処理”の部分が、排他的な処理となる * ThreadCount: 何番目のスレッドか */ DWORD WINAPI DoThread(DWORD ThreadCount) { HANDLE hEvent; int i; hEvent = OpenEvent(E
他のプロセスのAPI関数の呼び出しを監視(NT) 説明: 下記サンプルはtest.exeを起動し、このプロセスのMessageBox関数の呼び出しを監視する。test.exeがMessageBox関数を呼び出したら、呼び出した際に与えられた引数を表示する。 これを実現するために、サンプルはtest.exeをデバッグ対象のプロセスとして起動している。具体的には、CreateProcess関数のfdwCreate引数にDEBUG_PROCESSフラグを指定している。test.exeが起動されたら、MessageBox関数のエントリポイントアドレスにブレークポイントを設置する。このことにより、test.exeがMessageBox関数を呼び出した際に、ブレークポイント例外がサンプルに対して通知される。サンプルはブレークポイント例外を受け取ったら、test.exeのスタックに設定されているMess
FindFirstChangeNotification ディレクトリの監視 Cの宣言: HANDLE FindFirstChangeNotification( LPCTSTR PathName, BOOL WatchSubTree, DWORD FilterFlags); VBの宣言: Declare Function FindFirstChangeNotification Lib "kernel32" Alias "FindFirstChangeNotificationA" ( _ ByVal PathName As String, _ ByVal WatchSubTree As Long, _ ByVal FilterFlags As Long) As Long 説明: 与えられたディレクトリにおける、ファイルやサブディレクトリの作成、削除、変更などのイベントの監視を行う変更通知オブジ
FindFirstFile ファイルの検索 Cの宣言: HANDLE FindFirstFile(LPCTSTR FileName, LPWIN32_FIND_DATA FindData); VBの宣言: Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" ( _ ByVal FileName As String, _ ByRef FindData As WIN32_FIND_DATA) As Long 説明: FileNameで指定された検索文字列に一致するパス名を持つファイルまたはディレクトリの検索を開始する。ワイルドカードの指定も可能である。 検索結果の情報はFindDataに格納される。また、返されたハンドルをFindNextFileに渡すことにより、検索を継続することができる。 NTでは、"\\
CreateFileMapping ファイルマッピングオブジェクトの作成 Cの宣言: HANDLE CreateFileMapping( HANDLE hFile, LPSECURITY_ATTRIBUTES SecurityAttr, DWORD Protect, DWORD MaxSizeHigh, DWORD MaxSizeLow, LPCTSTR MapName); 説明: hFileで指定されたファイルに対するファイルマッピングオブジェクトを作成する。 hFileに0xffffffffを指定した場合、ページングファイル上のメモリ領域に対するファイルマッピングオブジェクトが作成される。これは主に共有メモリを使用したい場合に用いられる。 ファイルマッピングオブジェクトの最大サイズは、64bit値で指定する。上位32bitをMaxSizeHighに、下位32bitをMaxSizeLow
戻り値は、作成したHTTP要求を識別するハンドルである。関数の実行に失敗した場合、NULLが返される。 Cのサンプル: HttpSendRequestを利用して、//www.cool.ne.jp/masapico/index.htmlの内容を取得する。 void RequestHttp() { HINTERNET hInternet; HINTERNET hHttpSession; HINTERNET hHttpRequest; char *Buf; char BufSizeText[1000]; DWORD BufSizeTextSize = 1000; DWORD BufSize; DWORD ReadSize; /* WININET初期化 */ hInternet = InternetOpen( "WININET Sample Program", INTERNET_OPEN_TYPE
InternetSetOption インターネットのオプション情報の設定 Cの宣言: BOOL InernetSetOption( IN HINTERNET hInternet OPTIONAL, IN DWORD Option, IN LPVOID Buf, IN DWORD BufSize); 説明: hInternetで指定されたインターネットのオプション情報を設定する。 引数の意味は通り。
戻り値は、関数の実行に成功したか否かを表す真偽値である。 Cのサンプル: 下記TestStackWalk関数は、不正なメモリアクセスによって例外が発生する。例外ハンドラとして設定されているSWFilter関数は、スタックフレームを呼び出し元へ順に辿っていくことにより、例外発生時の関数呼び出し履歴を表示する。 void TestStackWalk(); void Test1(); void Test2(); void Test3(); LONG CALLBACK SWFilter(EXCEPTION_POINTERS *ExInfo); void TestStackWalk() { /* SWFilter()を例外フィルタとして設定しておく */ SetUnhandledExceptionFilter(SWFilter); Test1(); } void Test1() { Test2();
InternetSetStatusCallback インターネットのコールバック関数の設定 Cの宣言: INTERNET_STATUS_CALLBACK InternetSetStatusCallback( IN HINTERNET hInternet, IN INTERNET_STATUS_CALLBACK InetProc); 説明: hInternetで識別されるインターネットの使用時における各種イベントの通知などに使用するコールバック関数を設定する。 引数の意味は以下の通り。 戻り値は、本関数実行前に設定されていたコールバック関数へのポインタである。関数の実行に失敗した場合、NULLが返される。 Cのサンプル: InternetSetStatusCallbackを使用して、接続の経過を逐次表示する。 void CALLBACK StatusFunc( IN HINTERNET hI
StackWalk スタックフレームの列挙 Cの宣言: BOOL StackWalk( IN DWORD MachineType, IN HANDLE hProcess, IN HANDLE hThread, IN OUT LPSTACKFRAME StackFrame, IN OUT LPVOID Context, IN PREAD_PROCESS_MEMORY_ROUTINE ReadProcessMemoryRoutine, IN PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine, IN PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine, IN PTRANSLATE_ADDRESS_ROUTINE TranslateAddressRoutine); 説明: StackFrame
後述のサンプルは、VBで作成した簡単なコンパイラの例である。 フォーム上には、ソースを入力するテキストボックスと、コンパイルを実行するコマンドボタンがある。テキストボックスに、以下のソースを入力してコマンドボタンを押下すると、test.exeという実行ファイルが作成される。 let a 1 let b 2 add a b disp a このコンパイラが受け付ける言語は、英小文字一字の変数、数値、三つの命令からなる。let命令は、変数に値を代入する。add文は指定された一つ目の変数に二つ目の変数の値が加算される。disp文は、指定された変数の値をメッセージボックスで表示する。 上記のソースでは、まず変数aに1を、変数bに2を代入し、次にaにbの値を足す。従ってaの値は1+2=3となり、最後のdisp文でaの値である3を表示する。 作成されるexeは、コードセクション、初期化データセクション、
InternetQueryOption インターネットのオプション情報の取得 Cの宣言: BOOL InternetQueryOption( IN HINTERNET hInternet OPTIONAL, IN DWORD OptionType, OUT LPVOID Buf OPTIONAL, IN OUT LPDOWRD BufSize); 説明: 指定されたハンドルに対するインターネットのオプション情報を取得する。 引数の意味は以下の通り。
AllocConsole コンソールの割り当て AngleArc 円弧の描画 Arc 楕円の描画 ArcTo 楕円形の円弧の描画 AssignProcessToJobObject ジョブオブジェクトにプロセスを追加 BackupEventLog イベントログのバックアップ BeginPath パスの作成の開始 BitBlt グラフィックデバイス間のイメージの転送 BlockInput マウスやキーボード入力のブロック CancelWaitableTimer 待機可能タイマの無効化 ChangeClipboardChain クリップボードビューアの削除 Chord 弓形の図形の描画 ChrCmpI 文字の比較 ClearEventLog イベントログのクリア CloseClipboard クリップボードのクローズ CloseDesktop オープンされているデスクトップハンドルのクローズ C
VBでの、関数ポインタによる関数の実行 単独のVB開発環境では、通常関数ポインタを元に、そのポインタが指している関数を実行することはできない。この様な場合、VCでDLLを作成するなどしなければならない。しかし全く不可能かというとそうでもなく、多少無茶なことをすればできないことはない。以下では、VB単体の開発環境で関数ポインタが指している関数を実行する例を示す。(なおここで示すのはあくまで可能であるという例であって、実際のプログラミングでは素直にVCでDLLを作成したり、rundll32を使用するなどの手段をとるべき) 後述のサンプル2では、CallFuncPtrという関数を定義している。この関数は、第一引数に呼び出したい関数のアドレス、第二引数以降にその関数へ渡したい引数を指定する。呼び出す関数に渡す引数には、文字列または32bit値を指定可能で、呼び出した関数内での引数の操作は反映されな
GetForegroundWindow フォアグラウンドウィンドウを取得 Cの宣言: HWND GetForegroundWindow() VBの宣言: Declare Function GetForegroundWindow Lib "user32" () As Long 説明: Windowsが管理している全てのウィンドウのうち、ユーザの操作対象になっているフォアグラウンドウィンドウのハンドルを取得する。 フォアグラウンドウィンドウは、デスクトップにつき1つのみ存在する。 取得したウィンドウハンドルが示すウィンドウがトップレベルウィンドウであるとは限らない。現在アクティブなアプリケーションのメインウィンドウを取得したい場合、例えばGetWindow関数などを使用しなければならない。 戻り値は、フォアグラウンドウィンドウのハンドルである。 Cのサンプル: /* フォアグラウンドウィンドウ
注意: サンプルプログラムの実行に失敗すると、Windowsが再起動しなくなる恐れがある。そのような事態に陥った場合、あらかじめレジストリをバックアップしておきそれによって復旧を行なうか、またはレジストリの変更に合わせてオリジナルのDLL(msgina.dll)を複製すればこれがGINAとして使用される。いずれにせよ再インストール覚悟で試して頂きたい。 なお、以下の記述はNT4.0SP5に基づいている。 GINAとは: Windowsにおいて通常作業を行なっている時に表示されている画面は、「アプリケーションデスクトップ」と呼ばれている。Windowsにはその他に二つのデスクトップが存在する。一つ目はログオン画面の表示が行われたり、CTRL+ALT+DELの押下によってアプリケーションデスクトップから切り替わって表示されるデスクトップで、「Winlogonデスクトップ」と呼ばれる。二つ目はス
Win32 サンプル集 Win32 のサンプル集です。 関数別 Win32 サンプル集 関数別の Win32 のサンプル集です。 その他の情報 その他の情報です。(00/02/24更新) 注意事項 注意事項です。必ずお読み下さい。(99/09/20更新) 更新履歴 Win32 API サンプル集の更新履歴です。 暗号技術の基礎知識 とある事情で作成していた文書が無駄骨になってしまったのですが、せっかくなのでここで発表しておきます。 ○サイト移転のお知らせ(03/12/02) これまでmasapico's pageはいくつかの無料サイトを利用して運営していましたが、geocitiesのメールサービス廃止をきっかけに、それらの無料サイトに登録していたアカウント情報の変更を行なおうとしたところ、色々と問題が起こりました。検討の結果、暫定的に以下のサイトに移転することにしました。 新しいURL:h
本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。
リンクして下さっている方もいるようなので、ざっと直しました。あてずっぽうで書いている箇所がまだありますが、暇なときに随時修正します。(2001/02/26) 1.暗号技術(Cryptography)の基礎知識 1.1. 基本的な暗号化 以下の文を暗号化(Encrypt)することを考える。
「アプリケーションの二重起動を防ぐにはどうすれば良いのか」「他のアプリケーションを起動し、そのアプリケーションの終了を待つにはどうすれば良いか?」といった質問は、大変よく見かける質問であり、また、それに対する回答のバリエーションも多々ある。回答を見れば、その人の技量が分かるといっても良いほどである。ここでは、よく見かける回答例を紹介する。 アプリケーションの二重起動を防ぐ方法: ・PrevInstanceを使用する方法 VBで二重起動を防ぐ方法として、App.PrevInstanceプロパティを使用する方法がある。App.PrevInstanceプロパティは、二重起動されている場合Trueとなり、されていない場合Falseとなる。したがって、例えばFormのLoad時にこのプロパティをチェックし、Trueならば、メッセージを表示して終了する、等のコードを書けば良い。 このように、VBでは二
Win32は「仮想メモリ」をサポートしている。Windows上で実行されているプロセスは、実際の物理メモリの容量に関わらず、プロセスごとに4Gバイトの仮想メモリ空間が割り当てられる。 仮想メモリ空間は、ページと呼ばれる単位で管理される。x86系ならば1メモリページは4Kバイトである。システムは、プロセスの仮想メモリ空間中で、プロセスが使用しているメモリページだけを物理メモリに割り当て、未使用のメモリページは物理メモリに割り当てない。この仕組みにより、物理メモリの容量を超える仮想メモリ空間を実現することができる。 物理メモリには、RAMとページングファイルがある。システムは、RAMの容量以上の物理メモリが必要になると、RAM上のメモリページをページングファイルに退避し、RAM上に空きメモリページを作り、このページを使用する。ページングファイルに退避されたメモリページに割り当てられていた仮想メ
このページを最初にブックマークしてみませんか?
『MASAPICO's PAGE』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く