- ベストアンサー
C言語で常駐ソフトを作成
C言語を利用して常駐ソフトを作成したいと考えています。 目標としては、タイマー付きの自動でパソコンをシャットダウンするソフト等を作りたいと思っています。 作成方法、または作成方法が記載されているHP等を教えていただければ幸いです。 自分のスキルとしては、ポインタ、構造体等も理解しているつもりです。 ソフトとしては、テキストファイル編集ソフトくらいしか作った事がありません。 しかしC言語以前にJavaを扱っていて、Appletを用いてスペースインベーダー(もどき)を作ったり、メール送信ソフトを作ったりした事があります。 (Javaでやれば?と思った人がいたらJavaでのやり方も教えていただけるとありがたいです^^; ) OS: WIndowsXP Professional 開発環境: BorlandC++ エディタ: CPad for Borland C++Compiler を使っていますが、 VisualStudio2005もあります。 (テキストファイルを読み込み、編集して出力するソフト等の非常に軽いソフトしか作った事がないためVisualStudioは起動が遅くて不快だったため使用した事はあまりありません^^; ) よろしくお願いします。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
★補足に対するアドバイス >ちなみにですけど、このような事を初歩から学べるような本を >知っていたら教えて欲しいんですが・・・。 ↑ http://www.amazon.co.jp/dp/4797325453/→『Windowsゲームプログラミング』 http://www.amazon.co.jp/dp/4797328487/→『猫でもわかるWindowsプログラミング 第2版』 本屋やネット『cbook24』や『Amazon』さんで見つけましょう。 初歩から学べて分かりやすい本として2冊紹介しました。 >また、これはWindowsプログラミングというものなのですか? ↑ http://www.amazon.co.jp/dp/4789836908/→『Win32API完璧マスタ―Visual C++プログラミング』 http://www.amazon.co.jp/dp/4875934394/→『Win32 APIのしくみ―Windows開発環境「C++、VB、Delphi、VB.NET」からの利用法』 こちらも探せばたくさんありますが、全体的に金額が高いです。 だから MSDN サイトを活用すれば無料です。 http://msdn2.microsoft.com/ja-jp/library/default.aspx→『MSDN ライブラリ』 ここで API 関数などを検索してマニュアルを読むわけです。 ※無料なので活用しましょう。日本語サイトです。英語サイトもあるけど。 小技集: ・小技集(サンプル集)の本やサイトを紹介します。 http://www.expertmg.co.jp/html/cti/vctips/index.htm→『VC++によるWin32プログラミングTips』 http://katsura-kotonoha.sakura.ne.jp/prog/win.shtml→『Windows API』 http://sapporo.cool.ne.jp/tanomi/→『BCBQ&A』 http://www.alpha-net.ne.jp/users2/junchoon/tips000.html→『Win32 tips [山内狂団]』 http://www14.big.or.jp/~ken1/tech/tech.html→『Windows プログラミング テクニック集』 http://www.geocities.jp/skynet3113/data/index.html→『WinTips ジャンル一覧』 http://www.arcpit.co.jp/winapi/api_01/index.htm→『1.APIの基本(Windows API Topics)』 お勉強サイト: ・『猫でもわかるプログラミング』は回答者 No.7 さんが紹介しているため省きます。 http://wisdom.sakura.ne.jp/system/winapi/→『Win32 API入門』 http://nienie.com/~masapico/sample_index.html→『Win32 サンプル集』 http://nienie.com/~masapico/api_index.html→『API別 Win32 サンプル集』 http://www.geocities.jp/ky_webid/win32c/index.html→『Win32API(C言語)編』 ・探せばいろいろ見つかります。 その他: ・ネット検索のコツを紹介します。 (1)日本語で探すときは語尾に『とは』を付けて検索。→例『常駐ソフトとは』 (2)関連しそうな API 関数名で検索。 (3)関連しそうな API で使う構造体名や共用体名で検索。 (4)関連しそうな WM_XXX メッセージなどで検索。 (5)関連しそうなマクロ関数名などで検索。 (6)その他は自分で検索術を探す意欲かな。 最後に: >常駐ソフトの作成方法がわかれば教えてください。お願いします。 ↑ これは既に回答が No.6(zwi)さんでありますね。 常駐ソフトといっても難しくはないのです。 ・単純に (1)常に表示されるウインドウではなくて非ウインドウを持つのが基本。 (2)メニューなどを出すためにタスクトレイにアイコンを表示。 (3)タスクトレイのアイコンよりメニューやダイアログなどを出す仕組み。 (4)他にもタスクトレイにもアイコンを出さずに2度プログラムを起動したときに メニューやダイアログを出すタイプも作れます。トレイアイコンを増やしたくない 場合は有効です。 ・まずは『非ウインドウ』と『タスクトレイ・アイコン』から検索、実装して下さい。 参考資料: http://www.expertmg.co.jp/html/cti/vctips/icon.htm→『アイコンをシステムトレイに表示させる』 http://www.expertmg.co.jp/html/cti/vctips/process.htm→『多重起動を防止する』 http://www.expertmg.co.jp/html/cti/vctips/menu_toolbar.htm→『ポップアップメニューを表示させる』 以上。
その他の回答 (8)
- furyfox
- ベストアンサー率56% (58/103)
作成方法については 既に回答にあがっている「猫でもわかる~」が参考になると思います。 参考になるというより勉強するといった感じでしょうか。 一通り、Windowsプログラミングを学べば常駐プログラムも作れます。 常駐するかどうかは単に、ウインドウの表示があるかどうかというだけの話ですし 後はタスクトレイアイコンに表示するかどうかやサービスとして起動できるようにするかどうか 等です。 >テキストファイルを読み込み、編集して出力するソフト等の非常に軽いソフトしか作った事がないためVisualStudioは起動が遅くて不快だったため使用した事はあまりありません^^; 別にVC++のコンパイル自体はコマンドラインから行えるので slnファイルを扱う時だけVCを開いて 他は秀丸等のエディタで書けばよいんじゃないでしょうか? (nmakeを使うならそのslnファイルさえ不要だと思います。)
お礼
たしかにウィンドウの表示があるかないかだけの違いですね・・・ 他の人の意見を聞く事はとても参考になりますね。 VisualStudioは起動遅いですよねw 「猫でもわかるプログラミング」を読んで勉強しようと思います!ありがとうございました!
- zwi
- ベストアンサー率56% (730/1282)
#1のzwiです。 >また、これはWindowsプログラミングというものなのですか? WindowsAPI(Win32API)を使ったWindowsプログラミングになります。 これは、BCC(Borland C++Compiler)でもVisualStudio2005でもプログラミング可能です。 お使いのVisualStudio2005は無料のExpress Edtionでしょうか? Express Edtionは、無料なためMFCというクラスライブラリとリソースエディタが使用できません。 MFCはWin32APIをパッケージ化してC++のクラス化したもので、クセはありますが慣れると効率よくWinアプリを作成できるライブラリです。 リソースエディタは、GUIでウィンドウフォームを作成できる便利な機能ですが、これも削られています。 BCCに比べてメリットは、統合環境なのでmakefileが不要、デバッガが標準で付いている点でしょうか。 デメリットとして、VisualStudio2005からUNICODEが標準になったので、文字列の記述が面倒になったこと、openとかがセキュリティ上問題があるので必ず警告されるようになった事、やはりBCCに比べて重いことでしょうか。 WindowsAPIを使う限りは、プログラミングの手間は似たようなものです。どちらを使うのかの参考までに。 参考になりそうなサイトは、 「猫でもわかるプログラミング」で大半はBCCでもそのままコードが使えるはずです。本も多数出てます。 http://www.kumei.ne.jp/c_lang/
お礼
よくわかりました。ありがとうございます。 また、返信遅れてしまいもうしわけありません。(私用のため・・・) ちなみにVisualStudio2005は有料のものです。 「猫でもわかるプログラミング」を読んで参考にしたいと思います。 ありがとうございました。
- zwi
- ベストアンサー率56% (730/1282)
#1のzwiです。 常駐ソフトというのは、タスクトレイ(通知領域)にアイコンを表示したり、Xボタンで直ちに終了しないようにしたり、起動時はウィンドを表示しないようにする事で良いですか? 参考になりそうなのを幾つか紹介します。 http://support.codegear.com/article/35942 http://www.geocities.co.jp/siliconvalley/4805/bcbtips/bcbtips026.htm これもVC++だと情報が多いんですけど。BCB,BCC関係は少ないですね。
補足
まさにそれです! とても参考になります。ありがとうございます。 VC++で頑張ってみようかと思います。 ちなみにですけど、このような事を初歩から学べるような本を知っていたら教えて欲しいんですが・・・。 また、これはWindowsプログラミングというものなのですか?
- maguro999
- ベストアンサー率21% (59/273)
適当なキーワードとWin32APIで だいたいの情報はそろうと思うけど 質問者はいったいなにがわからないのだろうか? 例 http://www.google.co.jp/search?q=%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%80%80Win32API&start=0&ie=utf-8&oe=utf-8&client=firefox&rls=org.mozilla:ja:official http://www.google.co.jp/search?hl=ja&client=firefox&rls=org.mozilla%3Aja%3Aofficial&hs=ko9&q=%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E5%89%B2%E3%82%8A%E8%BE%BC%E3%81%BF%E3%80%80Win32API&btnG=%E6%A4%9C%E7%B4%A2&lr= >(Javaでやれば?と思った人がいたらJavaでのやり方も教えていただけるとありがたいです^^; JavaからWin32APIを呼び出せばいいだけ
補足
その適当なキーワード(Win32API)がわからずに苦戦していました。 初心者のため知識があまりなく何を調べればいいのかよくわからなかったのです。 とても参考になりました。ありがとうございます。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス >目標としては、タイマー付きの自動でパソコンをシャットダウンするソフト等を作りたいと思っています。 ↑ タイマー処理は SetTimer()、KillTimer()、WM_TIMER を使います。 非常に簡単です。簡単すぎて驚きます。 ※ネットで検索すると直ぐにでもサンプルが見つかります。 >パソコンをシャットダウン ↑ ExitWindowsEx() 関数を使います。 Windows 95、98、Me 系は ExitWindowsEx() だけでシャットダウンが出来ます。 Windows NT、2000、XP、Vista 系はシャットダウンするための特権モードなどを 取得する必要があります。ちょっと複雑かな。 ・下にサンプルを載せておきます。 サンプル: // Windowsのシャットダウンを実行 static BOOL myExitWindowsEx( UINT uFlags ) { TOKEN_PRIVILEGES TokenPri; HANDLE hToken; if ( OpenProcessToken(GetCurrentProcess(),(TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY),&hToken) ){ if ( LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&TokenPri.Privileges[0].Luid) ){ TokenPri.PrivilegeCount = 1; TokenPri.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges( hToken, FALSE, &TokenPri, 0, NULL, NULL ); if ( GetLastError() == ERROR_SUCCESS ){ return( ExitWindowsEx(uFlags,0) ); } } } return( FALSE ); } 使い方: myExitWindowsEx( EWX_LOGOFF ); // ログオフ myExitWindowsEx( EWX_POWEROFF ); // パワーオフ myExitWindowsEx( EWX_REBOOT ); // 再起動 myExitWindowsEx( EWX_SHUTDOWN ); // シャットダウン 参考資料1: http://homepage2.nifty.com/sak/w_sak3/doc/syspc/vc_net06.htm http://homepage2.nifty.com/DSS/VCPP/API/ExitWindowsEx.htm http://www.g-ninja.net/tips/shutdown.html 参考資料2: http://yokohama.cool.ne.jp/chokuto/advanced/function/SetTimer.html http://yokohama.cool.ne.jp/chokuto/advanced/function/KillTimer.html http://yokohama.cool.ne.jp/chokuto/advanced/message/WM_TIMER.html 以上。
補足
詳しい説明ありがとうございます! タイマーの作り方は参考URLによって出来そうな感じなのですが、 タイマーを作りたいというのは例として挙げただけであり、実際には常駐ソフトを作る事が前提で考えています。 常駐ソフトの作成方法がわかれば教えてください。お願いします。
- zwi
- ベストアンサー率56% (730/1282)
BorlandC++では、この手の情報少ないですからね。 「SE_SHUTDOWN_NAME XP VC++」で探すと結構見つかったりします。 私はVC++の人なので提供できる情報が的外れだったらごめんなさい。 シャットダウン。NT用ですがvistaまで通用するはずです。 C++Builderでかかれてますが、Borland C++ Compiler5.5でも参考になるかと。 http://support.codegear.com/jp/article/35937 VC++用ですが、こちらも参考に。 http://onishi-lab.jp/programming/shutdown_win.html タイマーというか時計です。時間処理の参考に。 http://www2.ttcn.ne.jp/~tkky/Application/Clock/clock1.htm 他にもC++BuilderのTIPS集があるみたいです。 どちらもプログラムの難易度としては高くありませんが、Borland C++ Compiler5.5は情報が少ないので苦労するかと思いますが、がんばってください!
補足
情報があまりにも見つからなくて非常に苦戦していました。 本当にありがとうございます! じっくりと読んで頑張って作ってみます!
- zwi
- ベストアンサー率56% (730/1282)
フリーソフトでいっぱいありますが? http://www.vector.co.jp/vpack/filearea/win/util/restart/timer/ http://www.vector.co.jp/vpack/filearea/win/util/restart/ あえて作りたい理由は何でしょうか? シャットダウンやタイマーは難しいプログラムでは無いので、あちこちのサイトに情報はころがっています。 例えばシャットダウンは、SE_SHUTDOWN_NAME特権を得て、ExitWindowsExでシャットダウンします。
補足
パソコン関係の大学に通っているためプログラミングに非常に興味があります。 やはり自分で作る事によってスキルアップすると思っています。 フリーソフトであるのは知っていますが、自分で作ってみたいため質問させていただきました。 情報が見つけられないため(探すのが下手かもしれません)、情報のあるサイトを教えてください。 お願いします。
最近のWindowsには。 ShutDown.exeというそのまんまの実行ファイルがあるので。 作る必要がないような気が…。
補足
プログラミングを学びたいため作る必要性というより興味本位でやってみたいです。 スキルアップしたいのでよろしくお願いいたします。
お礼
たくさんのURL教えていただきありがとうございます。 また、丁寧に検索方法まで教えていただき、非常に勉強になりました。 これでより頑張れそうです!ありがとうございます!