RUNDLL.EXEを使ったDLL呼び出しについて

Windowsフォルダには、RUNDLL.EXEという、そのまま起動しても何の効果もないアプリケーションが存在します。

これは、DLL,OCX,EXEなどのファイルから任意の関数を呼び出すアプリケーションのようで、
RUNDLL.EXEと、RUNDLL32.EXEの2つがあります。
どうやら、後者はRUNDLL.EXEの32Bit版のようですね。

このプログラムは、Windowsのシステムにとってとても重要なファイルなので、間違っても削除しちゃダメですよ(笑)
ウイルスではありませぬ。
(万が一RUNDLL.EXEがウイルス感染してしまった場合は別ですが・・・)

この記事では、RUNDLL.EXEを活用して、自作プログラムから、
あーんなことやこーんな事♥(←誇大表現ですw)を実現したり、
コマンドプロンプトからコントロールパネルや、Windows終了・再起動を呼び出すなどの、Windows上級者テクニックを使用するための方法をご紹介します。

・・・まぁ、前置きはこのくらいにして、実際にRUNDLL.EXEを使用してみましょう。

Windowsのコマンドプロンプトから実行する例:
rundll rnaui.dll,RnaDial
※Windows10の場合、rundll.exeが無いため、「rundll32」を使用します。 また、rnaui.dllは無いようですので、上記のコマンドはエラーとなります。

C言語や、Hot Soup Processorを使用して、自作のプログラムから呼び出す例:
exec("rundll rnaui.dll,RnaDial");

HSPの場合は、exec "〜"またはexec("〜")、C言語の場合は、exec("〜")やsystem("〜")、 PHPなら`〜`とかexec("〜")で呼び出せますので、それぞれの環境や言語に応じて、置き換えてください。

上記の例では、RUNDLL.EXE(rundll)からrnaui.dllを呼び出し、
その中のRnaDial関数を実行します。
この命令を実行すると、ネットワーク接続ダイアログが表示されるはずです。

このように、基本的には、「rundll ファイル名,関数名」 もしくは「rundll32 ファイル名,関数名」という感じで記述します。

当然ながら、プログラムからも呼び出せます。

ただし、rundll.exeおよびrundll32.exeは、引数を指定したり、戻り値を取得する関数には向きませんので、ご注意を。

資料

RUNDLL.EXE及び、RUNDLL32.EXEを使用した関数呼び出し例

下記は、HSP(Hot Soup Processor)から呼び出す場合の例です。
普通にWindowsのコマンドプロンプトから呼び出す場合は、exec("〜〜")の、〜〜の部分のみを使用して下さい。


ネットワーク接続ダイアログを表示 exec("rundll rnaui.dll,RnaDial")
ダイヤルアップネットワーク接続ウィザードを表示 exec("rundll32 rnaui.dll,RnaWizard")
プリンタの追加ウィザードを表示 exec("rundll32 shell32.dll,SHHelpShortcuts_RunDLL AddPrinter")
ファイルを開くアプリケーションの選択 exec("rundll shell32.dll,OpenAs_RunDLL c:¥¥windows¥¥notepad.exe")
(この例では、notepad.exeを開くアプリケーションを選択)
Windowsを終了 exec("rundll user,exitwindows")
Windowsを再起動 exec("rundll user,exitwindowsexec")

コントロールパネル関連
(「rundll shell32.dll,Control_RunDLL」を、「control」に置き換えても動作します。  例:exec("control appwiz.cpl"))


コントロールパネルのフォルダ exec("rundll shell32.dll,Control_RunDLL")
アプリケーションの追加と削除のプロパティ exec("rundll shell32.dll,Control_RunDLL appwiz.cpl")
画面のプロパティ exec("rundll shell32.dll,Control_RunDLL desk.cpl")
インターネットのプロパティ exec("rundll shell32.dll,Control_RunDLL inetcpl.cpl")
地域のプロパティ exec("rundll shell32.dll,Control_RunDLL intl.cpl")
ゲームオプション exec("rundll shell32.dll,Control_RunDLL joy.cpl")
マウスのプロパティ exec("rundll shell32.dll,Control_RunDLL main.cpl @0")
キーボードのプロパティ exec("rundll shell32.dll,Control_RunDLL main.cpl @1")
プリンタのフォルダ exec("rundll shell32.dll,Control_RunDLL main.cpl @2")
フォントのフォルダ exec("rundll shell32.dll,Control_RunDLL main.cpl @3")
サウンドとマルチメディアのプロパティ exec("rundll shell32.dll,Control_RunDLL mmsys.cpl")
モデムのプロパティ exec("rundll shell32.dll,Control_RunDLL modem.cpl")
ネットワーク exec("rundll shell32.dll,Control_RunDLL netcpl.cpl")
パスワードのプロパティ exec("rundll shell32.dll,Control_RunDLL password.cpl")
システムのプロパティ exec("rundll shell32.dll,Control_RunDLL sysdm.cpl")
新しいハードウェアの追加ウィザード or ハードウェア Windows10の場合 :
exec("rundll32 shell32.dll,Control_RunDLL sysdm.cpl,,2")
Windows10の場合は、ハードウェアのプロパティ画面が開きますが、

Windows9xの場合 :
exec("rundll shell32.dll,Control_RunDLL sysdm.cpl @1")
Windows 9xの場合、新しいハードウェアの追加ウィザードの画面があります。
ダイヤルのプロパティ 懐かしき、ダイヤルアップのプロパティです。もはや使われる事はないでしょう(笑)

Windows10の場合 :
exec("rundll32 shell32.dll,Control_RunDLL telephon.cpl")
Windows 9xの場合 :
exec("rundll shell32.dll,Control_RunDLL telephon.cpl")
日付と時刻のプロパティ Windows10の場合 :
exec("rundll32 shell32.dll,Control_RunDLL timedate.cpl")
※「rundll32 shell32.dll,Control_RunDLL timedate.cpl,,1」で、「追加の時計」になります。

Windows 9xの場合 :
exec("rundll shell32.dll,Control_RunDLL timedate.cpl")
コントロールパネルの準備中? exec("rundll shell32.dll,Control_FillCache_RunDLL")
※Windows10の場合、エントリーが無い旨のエラーとなるようです。
このように、一見重要と思われる、shell32.dllを、無理やり呼び出して、あんなことやこーんなことができます(笑)
この記事は、Windows9x時代の時に書かれたものなので、上記のコマンドが古い可能性があります。
随時アップデートしていきますので、しばしお待ちを(^^)
この記事の最終更新日 : 2017年10月30日


資料室のトップに戻る
Windows/iPhoneアプリ、ゲーム用フリー音源、ヒーリングミュージックのMeteoric Stream -> 資料室 -> RUNDLL.EXEを使ったDLL呼び出しについて
▲Top