2016-09-07 18 views
-1

私はLazarus/FPCを使用していますが、Windowsでポインティングデバイスのリストを取得する方法を探しています - そして、最終的に特定のデバイスを無効にして有効にできるようにします。Windowsでポインティングデバイスのリストを取得する(パスカル)

Google検索では、MSDNのthisとフリーパスカルのwikiのthisが表示されました。

これは良い出発点のようですが、残念ながら私は最初のハードルに落ちています...この例ではmanagerオブジェクトを作成する方法を理解できません。

MSDNの例は(C#)とである:

Iが部分としてパスカルに変換している
private void PopulatePointers(TreeView tvDevices) 
{ 
    //Add "Pointer Devices" node to TreeView 
    TreeNode pointerNode = new TreeNode("Pointer Devices"); 
    tvInputDevices.Nodes.Add(pointerNode); 

    //Populate Attached Mouse/Pointing Devices 
    foreach(DeviceInstance di in 
     Manager.GetDevices(DeviceClass.Pointer,EnumDevicesFlags.AttachedOnly)) 
    { 

     //Get device name 
     TreeNode nameNode = new TreeNode(di.InstanceName); 
     nameNode.Tag = di; 
     TreeNode guidNode = new TreeNode(
      "Guid = " + di.InstanceGuid); 

     //Add nodes 
     nameNode.Nodes.Add(guidNode); 
     pointerNode.Nodes.Add(nameNode); 
    } 

} 

uses windows, DirectInput; 

procedure getPointingDevices(); 
begin 
    for pointingDevice in Manager.GetDevices(DeviceType.Keyboard,EnumDevicesFlags.AttachedOnly) do 
    begin 
    devicesTree.Items.AddChild(devicesTree.Items.TopLvlItems[0],pointingDevice.InstanceName); 
    end; 

    devicesTree.Items.TopLvlItems[0].Expand(true); 
end; 

及びIはDirectInput.pasDirectX.incDXTypes.pasJedi.incXinput.pasを含んでいた(いくつかのそのうち実際には必要ないかもしれませんが、私は後でそれを作業します)。

明らかに、そのメソッドにアクセスできるようにするためにはManagerオブジェクトを作成する必要がありますが、これまで読んだことのあるドキュメントからどうすればいいのかわかりません。

+0

.netコードは、直接fpxコードに変換されません。 C++のサンプルから始めて、それを翻訳する必要があります。 –

+0

@David Heffernan - 私の例では.netコードはどこですか? MSDNの例はC#コードですが、マウス/ポインティングデバイスに到達するためにDirectXのDirectInput機能を使用する必要があるかもしれないという手がかりを与えてくれました。 DirectXライブラリ/ユニットはLazarus/FPC用に既に翻訳されており、それらは私のプロジェクトに追加したモジュールです。私が抱えている問題は、Managerオブジェクトをどのように作成するのか、どのように作成するのかわからないということです。 –

+0

Er、C#は.net言語です。私はあなたが前進するためには少し良くなったことを理解する必要があると思います。あなたはそれを理解せずにコードを変換することを望んでいるようです。それは実り多いものとは思われません。 –

答えて

2

あなたが探しているのは、DirectInput IDirectInput8 COMインターフェイスです。

入力デバイスを列挙するには、DirectInput8Create()関数を使用してIDirectInput8インターフェイスを取得し、EnumDevices()またはEnumDevicesBySemantics()メソッドを使用します。例:

uses 
    Windows, DirectInput; 

function MyEnumCallback(lpddi: LPCDIDEVICEINSTANCE; pvRef: Pointer): BOOL; stdcall; 
var 
    Tree: TTreeView; 
begin 
    Tree := TTreeView(pvRef); 
    Tree.Items.AddChild(Tree.Items.TopLvlItems[0], lpddi.tszInstanceName); 
end; 

procedure getPointingDevices; 
var 
    DI: IDirectInput8; 
begin 
    OleCheck(DirectInput8Create(HInstance, DIRECTINPUT_VERSION, IDirectInput8, @DI, nil)); 
    OleCheck(DI.EnumDevices(DI8DEVCLASS_POINTER, @MyEnumCallback, devicesTree, DIEDFL_ATTACHEDONLY)); 
    devicesTree.Items.TopLvlItems[0].Expand(true); 
end; 
+0

こんにちはレミー、それは興味深いものです。リンクされたページをすばやく読み込むと、デバイスを一覧表示し、ネイティブのコントロールフォームを表示できるようになるかもしれませんが、プログラムでデバイスを無効にして有効にすることはできないようです。しかし、私は、http://wiki.freepascal.org/Windows_Programming_Tipsを見てきました。半分の方法は、列挙と有効化と無効化を行うようなものです。私は現時点でそれをしていますが、あなたのソリューションはより軽量に見え、私の元の要求を満たすために見えます。 –

関連する問題