ネイティブの sample_extension サンプル内に、現在アクティブなウィンドウのタイトルを取得する関数を追加しました。ダーツ内で定期的に getActivetWindowTitle を呼び出して出力したい
import "sample_extension.dart";
import "dart:async";
void main() {
var isLittleEndian = SysInfo.isLittleEndian;
var pageSize = SysInfo.pageSize;
var sizeOfInt = SysInfo.sizeOfInt;
var version = SysInfo.version;
print('Dart VM (${sizeOfInt * 8} bit): $version');
print('Page size: $pageSize KB');
print('Endianness: ${isLittleEndian ? 'Little-endian' : 'Big-endian'}');
new Timer.periodic(new Duration(seconds:1), (timer) => pr() );
}
void pr(){
var activeWindow = SysInfo.activeWindow;
print('Active window: $activeWindow');
}
私のダーツファイル sample_extension.dart は
library sample_extension;
import "dart-ext:sample_extension";
class SysInfo {
//<se>
static bool isLittleEndian = _isLittleEndian();
static final int pageSize = _getPageSize();
static final int sizeOfInt = _getSizeOfInt();
static final String version = _getVersionString();
static bool _isLittleEndian() native "IsLittleEndian";
static int _getPageSize() native "GetPageSize";
static int _getSizeOfInt() native "GetSizeOfInt";
static String _getVersionString() native "GetVersionString";
//</se>
//<aui>
static final String activeWindow = _getActiveWindowString();
static String _getActiveWindowString() native "GetActiveWindowString";
//</aui>
}
追加cc部分は
void GetActiveWindowString(Dart_NativeArguments arguments) {
Dart_Handle result;
HWND hwnd;
LPTSTR lpString;
Dart_EnterScope();
hwnd=GetForegroundWindow();
GetWindowText(hwnd, lpString, 128);
result = Dart_NewStringFromCString(lpString);
Dart_SetReturnValue(arguments, result);
Dart_ExitScope();
}
関数検索関数リストを追加しました
{"GetActiveWindowString", GetActiveWindowString},
dartapp をロードすると、正しいアクティブ ウィンドウが表示されます。
ただし、実行中、プログラムは開始時に初期化された値のみを出力します。実際のアクティブ ウィンドウではありません。
私は何を間違っていますか?