[課題]APIについて教えて下さい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
じょー

[課題]APIについて教えて下さい

#1

投稿記事 by じょー » 11年前

今高2です
課題で人感センサーを使って、ウィンドウズをロックするプログラムを作成しようとしています(8/31には提出)
ですが、プログラミングは始めたばかりで、先生からのレクチャーも一切ありません・・・
なので、簡単なプログラムの作り方もよく分かりません
1から学ぶ時間はないと思ったので
似たプログラムをネットで見つけて、それを少し変えて完成にしようと思っています

↓のプログラムは、人感センサー(I-OデータのSENSOR-HM/ECO) で 着席/離席 を判断するので、その情報を受け取り、
新しいウィンドウに
着席してるときは「います」
離席してるときは「いません」
と表示させるプログラムです
このプログラムは実行できました

visual studio の C# ですがちゃんと表示できていますか?
どれを載せればいいかわからないので1つだけ載せました
他コードは↓のサイトにあります
お手数ですがそちらをご覧ください
http://code.msdn.microsoft.com/C-Window ... -fa51d9a0/


↓のcodeのif文の中でlockworkstationを使えばいいのだと思い
lockworkstationを使っている他のプログラムを探して参考にしました
参照設定でuser32.dllを追加しようとしたら
「ファイルがアクセス可能で、有効なアセンブリまたはCOMコンポーネントであることを確認してください」
と出ました
これの解決方法が分かりません

どうすればlockworkstationを使えるのか
どうやって、どこでlockworkstationを使うのか
を教えてください
また、こうしたほうがいい、などのアドバイスがありましたら
書き込んでください
お願いします

OSはwindows7
開発環境はvisual studio 2010 C#
です


code Window1.xaml.cs

コード:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.WindowsAPICodePack.Sensors;

namespace WpfAppliHumidity
{
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            // Human Presenceセンサーの取り出し 
            var humanPresence =
                SensorManager.GetSensorsByTypeId<HumanPresence>().First();
            // イCベントハンドラーの登録^ 
            humanPresence.DataReportChanged +=
                new DataReportChangedEventHandler(humidity_DataReportChanged);
        }

void humidity_DataReportChanged(Sensor sender, EventArgs e) 
        { 
            HumanPresence humanPresence = sender as HumanPresence; 
            this.Dispatcher.BeginInvoke( 
                new UpdateWindowDelegator(UpdateWindow), 
                new object[] { humanPresence.Presence }); 
        } 
 
        private delegate void UpdateWindowDelegator(bool presence); 
        private void UpdateWindow(bool presence) 
        { 
            if (presence) 
            { 
                // Presenceがtrue、つまり、"いる"とき 
                tbExist.Opacity = 1; 
                tbUnexist.Opacity = 0; 
            } 
            else 
            { 
                // Presenceがfalse、つまり、"いない"とき 
                tbExist.Opacity = 0; 
                tbUnexist.Opacity = 1; 
            } 
        }
    }
}

YuO
記事: 947
登録日時: 12年前
住所: 東京都世田谷区

Re: [課題]APIについて教えて下さい

#2

投稿記事 by YuO » 11年前

参照設定で追加可能なdllは大原則としてアセンブリのみです。
つまりは,
  • C#やVisual Basic,C++/CLI等でビルドされたアセンブリ
  • tlbimp等で作成された,COM相互運用アセンブリ (VSでCOMを参照設定した場合に作られるアセンブリ含む)
が追加可能です。
# sgen等もありますが,とりあえず除外。

user32.dllはアセンブリではないため,参照設定で追加できません。
アセンブリでないDLLの関数を呼び出すには,プラットフォーム呼び出し (P/Invoke) を利用します。
MSDN: アンマネージ コードとの相互運用

LockWorkStation関数の場合,

コード:

BOOL WINAPI LockWorkStation(void);
なので,

コード:

[DllImport("User32.dll", SetLastError = true)]
[return: MarshalAs(UnmangedType.Bool)]
static extern bool LockWorkStation ();
と書く必要があります。

2011-08-22T23:18+09:00
後のコードブロックの言語指定を修正
最後に編集したユーザー YuO on 2011年8月22日(月) 23:17 [ 編集 1 回目 ]

じょー

Re: [課題]APIについて教えて下さい

#3

投稿記事 by じょー » 11年前

YuOさん、回答ありがとうございます
プラットフォーム呼び出しを利用すれば
参照を追加しなくてもLockWorkStation関数が利用できるということですね

プラットフォーム呼び出しをどこで使えばいいのでしょうか?
HumanPresence.csに新しいクラスを作成すればいいのでしょうか?
それとも新しいプロジェクトを作成し、そこに書けばいいのでしょうか?

コードも載せていただけると助かります

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 12年前
住所: 東海地方
連絡を取る:

Re: [課題]APIについて教えて下さい

#4

投稿記事 by softya(ソフト屋) » 11年前

LockWorkStation()の呼び出しのためにクラスやファイルを用意する必要はないと思います。

次のサイトが参考になりませんか?
「起動するだけでOSをロックしてモニタを省電力モードにするやつ作った(管理人日記) - むぅもぉ.jp」
http://muumoo.jp/news/2007/08/25/0mmquicklock.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

じょー

Re: [課題]APIについて教えて下さい

#5

投稿記事 by じょー » 11年前

softya(ソフト屋) さん 回答ありがとうございます
おかげで課題がおわりそうです

じょー

Re: [課題]APIについて教えて下さい

#6

投稿記事 by じょー » 11年前

http://dixq.net/forum/viewtopic.php?f=3&t=9172#p74339
こちらにまた質問したので
こちらは解決とします
回答してくださった方
ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る