Win32 API 日本語リファレンス
ホーム › System.AddressBook › DeregisterIdleRoutine

DeregisterIdleRoutine

関数
登録済みのアイドルルーチンを登録解除する。
DLLMAPI32.dll呼出規約winapi

シグネチャ

// MAPI32.dll
#include <windows.h>

void DeregisterIdleRoutine(
    void* ftg
);

パラメーター

名前型方向説明
ftgvoid*inout登録解除するアイドルルーチンのFTGハンドル。FtgRegisterIdleRoutineの戻り値を渡す。

戻り値の型: void

公式ドキュメント

DeregisterIdleRoutine は、FNIDLE ベースのアイドルルーチンを MAPI システムから削除します。この記事では、そのパラメーター、戻り値、および解説について説明します。

戻り値

なし。

解説(Remarks)

クライアントアプリケーションまたはサービスプロバイダー内のタスクは、有効な ftg パラメーターを保持しているアイドルルーチンであれば、どれでも登録解除できます。特に、アイドルルーチンは自分自身を登録解除することもできます。

次の関数は、MAPI アイドルエンジン、および FNIDLE 関数プロトタイプに基づくアイドルルーチンを扱います。

アイドルルーチン関数 用途
ChangeIdleRoutine
登録済みのアイドルルーチンの特性を変更します。
DeregisterIdleRoutine
登録済みのアイドルルーチンを MAPI システムから削除します。
EnableIdleRoutine
登録済みのアイドルルーチンを MAPI システムから削除せずに、無効化または再度有効化します。
FtgRegisterIdleRoutine
アイドルルーチンを有効な状態または無効な状態で MAPI システムに追加します。
MAPIDeInitIdle
呼び出し元アプリケーションの MAPI アイドルエンジンをシャットダウンします。
MAPIInitIdle
呼び出し元アプリケーションの MAPI アイドルエンジンを初期化します。

ChangeIdleRoutine、DeregisterIdleRoutine、および EnableIdleRoutine は、FtgRegisterIdleRoutine が返した関数タグを入力パラメーターとして受け取ります。

プラットフォーム上のすべてのフォアグラウンドタスクがアイドル状態になると、MAPI アイドルエンジンは実行可能な状態にあるアイドルルーチンのうち、最も優先度の高いものを呼び出します。同じ優先度のアイドルルーチン間での呼び出し順序は保証されません。

アイドルルーチンが登録解除された後、アイドルエンジンがそのルーチンを再び呼び出すことはありません。DeregisterIdleRoutine を呼び出す実装では、FtgRegisterIdleRoutine 関数の最初の呼び出しでアイドルエンジンが使用するためにポインターを渡したメモリブロックをすべて解放する必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp)

各言語での呼び出し定義

// MAPI32.dll
#include <windows.h>

void DeregisterIdleRoutine(
    void* ftg
);
[DllImport("MAPI32.dll", ExactSpelling = true)]
static extern void DeregisterIdleRoutine(
    IntPtr ftg   // void* in/out
);
<DllImport("MAPI32.dll", ExactSpelling:=True)>
Public Shared Sub DeregisterIdleRoutine(
    ftg As IntPtr   ' void* in/out
)
End Sub
' ftg : void* in/out
Declare PtrSafe Sub DeregisterIdleRoutine Lib "mapi32" ( _
    ByVal ftg As LongPtr)
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

DeregisterIdleRoutine = ctypes.windll.mapi32.DeregisterIdleRoutine
DeregisterIdleRoutine.restype = None
DeregisterIdleRoutine.argtypes = [
    ctypes.POINTER(None),  # ftg : void* in/out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('MAPI32.dll')
DeregisterIdleRoutine = Fiddle::Function.new(
  lib['DeregisterIdleRoutine'],
  [
    Fiddle::TYPE_VOIDP,  # ftg : void* in/out
  ],
  Fiddle::TYPE_VOID)
#[link(name = "mapi32")]
extern "system" {
    fn DeregisterIdleRoutine(
        ftg: *mut ()  // void* in/out
    );
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("MAPI32.dll")]
public static extern void DeregisterIdleRoutine(IntPtr ftg);
"@
$api = Add-Type -MemberDefinition $sig -Name 'MAPI32_DeregisterIdleRoutine' -Namespace Win32 -PassThru
# $api::DeregisterIdleRoutine(ftg)
#uselib "MAPI32.dll"
#func global DeregisterIdleRoutine "DeregisterIdleRoutine" sptr
; DeregisterIdleRoutine ftg
; ftg : void* in/out -> "sptr"
#uselib "MAPI32.dll"
#func global DeregisterIdleRoutine "DeregisterIdleRoutine" sptr
; DeregisterIdleRoutine ftg
; ftg : void* in/out -> "sptr"
; void DeregisterIdleRoutine(void* ftg)
#uselib "MAPI32.dll"
#func global DeregisterIdleRoutine "DeregisterIdleRoutine" intptr
; DeregisterIdleRoutine ftg
; ftg : void* in/out -> "intptr"
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	mapi32 = windows.NewLazySystemDLL("MAPI32.dll")
	procDeregisterIdleRoutine = mapi32.NewProc("DeregisterIdleRoutine")
)

// ftg (void* in/out)
r1, _, err := procDeregisterIdleRoutine.Call(
	uintptr(ftg),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // void
procedure DeregisterIdleRoutine(
  ftg: Pointer   // void* in/out
); stdcall;
  external 'MAPI32.dll' name 'DeregisterIdleRoutine';
result := DllCall("MAPI32\DeregisterIdleRoutine"
    , "Ptr", ftg   ; void* in/out
    , "Int")   ; return: void
●DeregisterIdleRoutine(ftg) = DLL("MAPI32.dll", "int DeregisterIdleRoutine(void*)")
# 呼び出し: DeregisterIdleRoutine(ftg)
# ftg : void* in/out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

extern "mapi32" fn DeregisterIdleRoutine(
    ftg: ?*anyopaque // void* in/out
) callconv(std.os.windows.WINAPI) void;
proc DeregisterIdleRoutine(
    ftg: pointer  # void* in/out
) {.importc: "DeregisterIdleRoutine", stdcall, dynlib: "MAPI32.dll".}
pragma(lib, "mapi32");
extern(Windows)
void DeregisterIdleRoutine(
    void* ftg   // void* in/out
);
ccall((:DeregisterIdleRoutine, "MAPI32.dll"), stdcall, Cvoid,
      (Ptr{Cvoid},),
      ftg)
# ftg : void* in/out -> Ptr{Cvoid}
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
void DeregisterIdleRoutine(
    void* ftg);
]]
local mapi32 = ffi.load("mapi32")
-- mapi32.DeregisterIdleRoutine(ftg)
-- ftg : void* in/out
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('MAPI32.dll');
const DeregisterIdleRoutine = lib.func('__stdcall', 'DeregisterIdleRoutine', 'void', ['void *']);
// DeregisterIdleRoutine(ftg)
// ftg : void* in/out -> 'void *'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("MAPI32.dll", {
  DeregisterIdleRoutine: { parameters: ["pointer"], result: "void" },
});
// lib.symbols.DeregisterIdleRoutine(ftg)
// ftg : void* in/out -> "pointer"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
void DeregisterIdleRoutine(
    void* ftg);
C, "MAPI32.dll");
// $ffi->DeregisterIdleRoutine(ftg);
// ftg : void* in/out
// 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
// WINAPI(stdcall): x64 では呼出規約が統一されるため問題なし。x86 では __stdcall 対応のラッパが必要な場合あり。
import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;

public interface Mapi32 extends StdCallLibrary {
    Mapi32 INSTANCE = Native.load("mapi32", Mapi32.class);
    void DeregisterIdleRoutine(
        Pointer ftg   // void* in/out
    );
}
@[Link("mapi32")]
lib LibMAPI32
  fun DeregisterIdleRoutine = DeregisterIdleRoutine(
    ftg : Void*   # void* in/out
  ) : Void
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。
import 'dart:ffi';
import 'package:ffi/ffi.dart';

typedef DeregisterIdleRoutineNative = Void Function(Pointer<Void>);
typedef DeregisterIdleRoutineDart = void Function(Pointer<Void>);
final DeregisterIdleRoutine = DynamicLibrary.open('MAPI32.dll')
    .lookupFunction<DeregisterIdleRoutineNative, DeregisterIdleRoutineDart>('DeregisterIdleRoutine');
// ftg : void* in/out -> Pointer<Void>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
procedure DeregisterIdleRoutine(
  ftg: Pointer   // void* in/out
); stdcall;
  external 'MAPI32.dll' name 'DeregisterIdleRoutine';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "DeregisterIdleRoutine"
  c_DeregisterIdleRoutine :: Ptr () -> IO ()
-- ftg : void* in/out -> Ptr ()
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let deregisteridleroutine =
  foreign "DeregisterIdleRoutine"
    ((ptr void) @-> returning void)
(* ftg : void* in/out -> (ptr void) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library mapi32 (t "MAPI32.dll"))
(cffi:use-foreign-library mapi32)

(cffi:defcfun ("DeregisterIdleRoutine" deregister-idle-routine :convention :stdcall) :void
  (ftg :pointer))   ; void* in/out
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $DeregisterIdleRoutine = Win32::API::More->new('MAPI32',
    'void DeregisterIdleRoutine(LPVOID ftg)');
# my $ret = $DeregisterIdleRoutine->Call($ftg);
# ftg : void* in/out -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。